Libgdx 侧滚Box2D游戏

Libgdx 侧滚Box2D游戏,libgdx,box2d,side-scroller,Libgdx,Box2d,Side Scroller,创建Box2D sidescroller游戏时,在每个对象上滚动并移动它(例如通过x轴)是否有利于性能,如在以下代码快照中所做的那样: for(Body b: bodies) { b.setTransform(-1, b.getPosition().y, b.getAngle()); } 我还想知道渲染,如果我渲染每个物体上的每个纹理,我会一次渲染整个级别,这将花费我很多宝贵的FPS。与评论说这是一个好方法相比,我不这么认为 移动世界中的每一个实体不是直觉。在现实生活中,当你在森林中奔

创建Box2D sidescroller游戏时,在每个对象上滚动并移动它(例如通过x轴)是否有利于性能,如在以下代码快照中所做的那样:

for(Body b: bodies) {
    b.setTransform(-1, b.getPosition().y, b.getAngle());
}

我还想知道渲染,如果我渲染每个物体上的每个纹理,我会一次渲染整个级别,这将花费我很多宝贵的FPS。

与评论说这是一个好方法相比,我不这么认为

移动世界中的每一个实体不是直觉。在现实生活中,当你在森林中奔跑时,树木也不会在你周围移动,只有你在移动

使用
正交摄影机
并更改其位置。当通过
SpriteBatch进行渲染时,将所有实体精确地绘制在它们所在的位置上(可能使用一些米到像素的比例因子),并在
SpriteBatch上使用
SpriteBatch.setProjectionMatrix(camera.combined)
。这样,只会自动绘制可见的实体,因为摄影机变换将消除所有不可见的实体


还有一个提示:尽量避免使用
Body.setTransform()
。相反,试着设置线速度或在物体上施加力/扭矩。使用
setTransform
会导致非物理行为,因为它基本上类似于远程传送,可能会导致奇怪的效果,在我的情况下,有时甚至会出现bug。

与评论中说这是一种很好的方法相比,我不这么认为

移动世界中的每一个实体不是直觉。在现实生活中,当你在森林中奔跑时,树木也不会在你周围移动,只有你在移动

使用
正交摄影机
并更改其位置。当通过
SpriteBatch进行渲染时,将所有实体精确地绘制在它们所在的位置上(可能使用一些米到像素的比例因子),并在
SpriteBatch上使用
SpriteBatch.setProjectionMatrix(camera.combined)
。这样,只会自动绘制可见的实体,因为摄影机变换将消除所有不可见的实体


还有一个提示:尽量避免使用
Body.setTransform()
。相反,试着设置线速度或在物体上施加力/扭矩。使用
setTransform
会导致非物理行为,因为它基本上类似于远程传送,可能会导致奇怪的效果,在我的情况下,有时甚至会出现bug。

与评论中说这是一种很好的方法相比,我不这么认为

移动世界中的每一个实体不是直觉。在现实生活中,当你在森林中奔跑时,树木也不会在你周围移动,只有你在移动

使用
正交摄影机
并更改其位置。当通过
SpriteBatch进行渲染时,将所有实体精确地绘制在它们所在的位置上(可能使用一些米到像素的比例因子),并在
SpriteBatch上使用
SpriteBatch.setProjectionMatrix(camera.combined)
。这样,只会自动绘制可见的实体,因为摄影机变换将消除所有不可见的实体


还有一个提示:尽量避免使用
Body.setTransform()
。相反,试着设置线速度或在物体上施加力/扭矩。使用
setTransform
会导致非物理行为,因为它基本上类似于远程传送,可能会导致奇怪的效果,在我的情况下,有时甚至会出现bug。

与评论中说这是一种很好的方法相比,我不这么认为

移动世界中的每一个实体不是直觉。在现实生活中,当你在森林中奔跑时,树木也不会在你周围移动,只有你在移动

使用
正交摄影机
并更改其位置。当通过
SpriteBatch进行渲染时,将所有实体精确地绘制在它们所在的位置上(可能使用一些米到像素的比例因子),并在
SpriteBatch上使用
SpriteBatch.setProjectionMatrix(camera.combined)
。这样,只会自动绘制可见的实体,因为摄影机变换将消除所有不可见的实体


还有一个提示:尽量避免使用
Body.setTransform()
。相反,试着设置线速度或在物体上施加力/扭矩。使用
setTransform
会导致非物理行为,因为它基本上类似于远程传送,可能会导致奇怪的效果,在我的情况下,有时甚至会出现bug。

但是,我什么时候知道新的身体必须出现在屏幕上?我不知道box2d的性能,但对于上帝摇动,不要在ArrayList的每个循环中使用,你会让GC发疯,foreach每次调用它都会创建一个迭代器。游戏循环中的对象创建是play store中许多游戏性能不佳的主要原因。那么我还应该使用什么呢?经典的(int i=0;i这不会创建必须由GC管理的内部对象?但是,我什么时候知道新的主体必须出现在屏幕上?我不知道box2d的性能,但是对于上帝摇动,不要在每个循环中使用ArrayList,你会让GC疯狂,foreach每次调用它时都会创建迭代器。对象创建insi取消游戏循环是play store中许多游戏性能不佳的主要原因。那么我还应该使用什么?经典的(int i=0;i这不会创建必须由GC管理的内部对象?但是,我什么时候知道新的主体必须出现在屏幕上?我不知道box2d的性能,但是对于上帝摇动,不要在每个循环中使用ArrayList,你会让GC疯狂,foreach每次调用它时都会创建迭代器。对象创建insi取消游戏循环是play store中许多游戏性能不佳的主要原因。那么我还应该使用什么?经典的for(int I=0;I)这不会创建必须由GC管理的内部对象?但是当