2012-05-22 2 views
0

Я создал отдельный класс, расширяющий AnimatedSprite, называемый «Enemy». Я создал несколько экземпляров Врага в моей сцене. У каждого из них должен быть свой собственный TimerHandler, который контролирует анимацию. Тем не менее, таймеры, похоже, связаны друг с другом, и каждый спрайт меняет свой TileIndex одновременно. Вот код:AndEngine: Несколько TimerHandlers

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); 
} 

} 

Кто-нибудь знает, как позволить каждому объекту иметь собственный независимый таймер? Благодаря!

+1

Нам нужно будет увидеть больше кода, чем это? Является ли таймер статичным? – CaseyB

+0

Нет, я просто определяю его как «таймер TimerHandler»; Статическое изображение не имеет видимого эффекта. –

+0

Пожалуйста, добавьте еще код. –

ответ

3

Я думаю, вы используете тот же TextureRegion для каждого врага. Если вы их не скопировали, попробуйте

Enemy e = new Enemy(x,y,yourTextureregion.deepCopy()); 
Смежные вопросы