簡體   English   中英

當box2d的數量超過300時,移動設備的性能非常低

[英]Very low performance on mobile devices when the quantity of box2d bodies is over 300

當我的世界/舞台上有300多具屍體時,我的表現非常低。 在LG optimus 4x高清(Android 4.0.3)上,當我有少於50個機身時,我得到大約33 FPS然后60 FPS。

不確定是否是最好的方法,但我使用我的PoolableEnemyActor創造我的敵人和我的粒子。 當任何敵人死亡時,它會通過使用EnemyActor類中的不同參數創建另外15個小體作為粒子。

如果它們超出相機邊界並因為Scene2d Stage沒有被繪制在它之外,則所有Scene2d Stage都會被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);
    }

}

@LexWebb和@ iforce2d是對的。 經過一些測試,我意識到我正在逐漸達到CPU限制。 當然,有源box2d主體的數量因設備而異,以獲得良好的性能。 此外,如果可能,應審查和禁用任何聯系人。

我還為我的box2d粒子添加了一個“生命周期”變量,以便更快地殺死它們並同時在屏幕上積累較少活動的物體。

現在它在舊手機(Android 2.3.3)上獲得48到55 fps,在新手機上獲得超過60 fps。

較少的顆粒等於較少的樂趣,但它仍然是愉快的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM