0

「敵」と呼ばれる AnimatedSprite を拡張する別のクラスを作成しました。シーンに敵のインスタンスをいくつか作成しました。それぞれに、アニメーションを制御する独自の TimerHandler があるはずです。ただし、タイマーはすべてリンクされているように見え、各スプライトはその TileIndex を同時に変更します。コードは次のとおりです。

package com.tahakki.folkprequel;

import java.util.Random;

import org.anddev.andengine.engine.handler.timer.ITimerCallback;
import org.anddev.andengine.engine.handler.timer.TimerHandler;
import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.extension.physics.box2d.PhysicsConnector;
import org.anddev.andengine.extension.physics.box2d.PhysicsFactory;
import org.anddev.andengine.extension.physics.box2d.PhysicsWorld;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;

import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactListener;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.FixtureDef;

public class Enemy extends AnimatedSprite{

private Body physB;
private PhysicsWorld physW = MainActivity.mPhysicsWorld;
private static final FixtureDef FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0, 0);
private TimerHandler timer;
private Random rand = new Random();

public Enemy(float pX, float pY, TiledTextureRegion pTiledTextureRegion) {
    super(pX, pY, pTiledTextureRegion);

    this.setCurrentTileIndex(rand.nextInt(3));
    this.setScale(0.6f);
    physB = PhysicsFactory.createBoxBody(physW, this, BodyType.DynamicBody, FIXTURE_DEF);
    physB.setFixedRotation(true);
    physW.registerPhysicsConnector(new PhysicsConnector(this, physB));

    timer = new TimerHandler(2 + (2*rand.nextFloat()), true, new ITimerCallback(){
        @Override
        public void onTimePassed(TimerHandler pTimerHandler) {
            int random = rand.nextInt(3);
            Enemy.this.setCurrentTileIndex(random);
        }
    });
    this.registerUpdateHandler(timer);
}

}

各オブジェクトに独自の独立したタイマーを持たせる方法を知っている人はいますか? ありがとう!

4

1 に答える 1

3

各敵に同じ TextureRegion を使用していると思います。それらをコピーしない場合は、試してください

Enemy e = new Enemy(x,y,yourTextureregion.deepCopy());
于 2012-05-23T10:44:57.827 に答える