SpriteBatch绘制所有

时间:2015-04-28 10:00:34

标签: libgdx

我有一个关于Libgdx的问题SpriteBatch

当我打电话给SpriteBatch#draw()时,Libgdx会照顾Camera s视锥,还是会画它,即使它不在视锥体之外?

我已经在查看SpriteBatch代码,但我没有找到任何内容,所以我想知道,如果Libgdx在内部做了什么。 或者我必须自己实施frstum剔除,例如像这样:

if(camera.frustum.boundsInFrustum(250, 32, 0, 100, 100 ,0)) {   
    tempEnemy.draw (batch); 
}

tempEnemySprite,(250,32)是它的中心,(100,100)是他的一半。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你会问,Libgdxs SpriteBatch是否关注ViewFrustum并且只是绘制可见部分,或者只是绘制了你告诉他绘制的所有内容。
如果那就是问题,那么答案是SpriteBatch绘制所有内容,忽略ViewFrustum。你必须自己照顾,或使用Scene2D,它似乎做了一些culling

答案 1 :(得分:0)

这是一个评论,但很长一段时间,我认为这将是最舒服的阅读方式:

在我的情况下,我认为Tenfour04,是对的,没有cullig更有效率,我会尝试描述可能的原因,在我的情况下:

- >通过检查fustrum可能效率不高,但是,通过

之后需要执行的操作

- > 1在我的情况下使用观察者模式,你会看到相机何时移动并通知其当前的主要演员

- > 2演员必须看,如果她在范围内,不得不打电话,getX,getw等等,更多指示被添加过程

- > 3如果actor在range范围内,则添加到arraylist,现在它具有带可渲染自定义接口的SpriteBatch,更多处理负载,如果添加或者删除了actor,则创建新的arrayList,

也许不是最好的实现,并且有可以改进的东西,让2d fustrum不使用arrayList等,也许所有这些都会更有效,如果你在游戏中有很多精灵但是对于一些Sprite我认为不是

我的简单基准测试我没有,即使将使用fňum取消演员的更新,因为可能会有效率,例如,排除许多动画演员,但这些玩家不会移动等等。总之,

我认为在一个简单的2D游戏中,很少有玩家在我的情况下效率不高,我只是想发表评论,如果有人帮忙

感谢Springrbua,没有人和所有人的Tenfour04

注意: 无论如何,我的简单游戏现在有60,61 fps的速度,没有使用剔除,一个简单的设备,非常酷哈哈