SpriteBatch 全部绘制

SpriteBatch draw all

我有一个关于 Libgdx SpriteBatch 的问题:

当我调用 SpriteBatch#draw() 时,Libgdx 会处理 Camera 的截锥体还是绘制它,即使它在截锥体之外?

我已经在查看 SpriteBatch 的代码,但我没有找到任何东西,所以我想知道 Libgdx 是否在内部做了一些事情。 或者我是否必须自己实施 frstum 剔除,例如像这样:

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

其中 tempEnemy 是一个 Sprite,(250,32) 是它的中心,(100,100) 是他的一半大小。

如果我没理解错的话,你是在问,Libgdxs SpriteBatch 是否关心 ViewFrustum 并只绘制可见部分,或者它是否只绘制你告诉他绘制的所有内容。
如果那是问题,答案是 SpriteBatch 绘制所有内容,忽略 ViewFrustum。你必须自己处理,或者使用 Scene2D,它似乎可以做一些 culling.

这是一条评论,但很长,我认为这是最舒服的阅读方式:

在我的情况下,我认为 Tenfour04 是正确的,没有 cullig 更有效,我将尝试描述在我的情况下可能是什么原因:

-> 通过检查 fustrum 可能不会降低效率,但是,通过您需要在

之后执行的操作

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

-> 2 演员必须看,如果她在范围内,必须调用,getX,getw,等等,更多的指令是添加过程

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

也许不是最好的实现,还有一些可以改进的地方,使 2d fustrum 不使用 arrayList 等,如果你在游戏中有很多 sprite 但只有少数 sprite i不觉得。

我的简单benchmark我没有,即使fustrum会被用来取消actor的更新,因为如果这样可能会很高效,比如排除很多有动画的actor,但是这些player不动ect.in结论,

我认为一个简单的 2d 游戏对我来说效率不高,我只是想发表评论,如果有人帮助

感谢Springrbua、noone和Tenfour04

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