当我的世界/舞台上有300多具尸体时,我的表现非常低。在LG optimus 4x高清(Android 4.0.3)上,当我有少于50个机身时,我得到大约33 FPS然后60 FPS。
不确定是否是最佳方法,但我使用Poolable
类EnemyActor
创建我的敌人以及我的粒子。当任何敌人死亡时,它会通过使用班级EnemyActor
中的不同参数创建另外15个小团体作为粒子。
如果超出相机边界并且因为Scene2d Stage
之外的所有实体都没有被剔除,则会销毁所有实体。
问题
- 在制作更多之前我应该留意的身体(手机的理想选择)是否有限制?
- 我是否使用正确的方法来创建box2d粒子?
更新1
结合之间是:
- 敌人和地面
- 敌人粒子和gound
- 敌人粒子和敌人
- 敌人自己
- 子弹和敌人
以下是我班EnemyActor
的相关部分:
public class EnemyActor extends Actor implements Poolable{
private World world;
private Body mBody = null;
private Sprite mSprite = null;
public static Vector2 position;
private BodyType bodyType = BodyType.DynamicBody;
private short category = Constants.CATEGORY_ENEMY;
private short mask = Constants.MASK_ENEMY;
private float width = (float)0.4f;
private float height = (float)0.4f;
private float angle = 0;
private float radius = 2f;
private boolean alive;
public boolean isParticle = false;
public int life = 1;
public EnemyActor(World world) {
this.world = world;
this.setAlive(false);
}
@Override
public void act(float delta) {
super.act(delta);
if(mBody != null){
if(life == 0 || mBody.getPosition().x < -10 || mBody.getPosition().x > 18 )
alive = false;
}
}
}
public void init(boolean isParticle,Vector2 newPosition) {
if(!isParticle){
//initiate enemy
} else{
//initiate enemyParticle
}
this.isParticle = isParticle;
}
@Override
public void reset() {
setAlive(false);
n_hits = 0;
isParticle = false;
life = 1;
}
@Override
public void draw(Batch batch, float parentAlpha) {
}
private void create_body() {
mBody = Box2dFactory.createCircleBody(world, position, bodyType, radius, category, mask);
}
}
答案 0 :(得分:2)
@LexWebb和@ iforce2d是对的。经过一些测试,我意识到我正在逐渐达到CPU限制。当然,有源box2d主体的数量因设备而异,以获得良好的性能。此外,如果可能,应审查和禁用任何联系。
我还在我的box2d粒子中添加了一个“生命周期”变量,以便更快地杀死它们并同时在屏幕上累积较少活动的物体。
现在它在旧手机(Android 2.3.3)上获得48到55 fps,在新手机上超过60 fps。
较少的颗粒等于较少的乐趣,但它仍然是令人愉快的。