我正在使用Andengine創建一個Android應用程序。應用程序的一部分需要用戶從屏幕上的一組精靈中選擇幾個精靈,這會導致選定的精靈變成不同的顏色(即移動到下一個拼貼)。我將它們全部聲明爲動畫精靈,並且我爲每個精靈使用相同的紋理。問題是,一旦我選擇了一個精靈,每個精靈都會移動到下一個方塊,而不僅僅是我選擇的方塊。我如何才能做出一個精靈變化?只想讓一個精靈動畫,而不是他們都做。 Andengine
此處,我設置了紋理和諸如此類的東西:
private Texture mGreenTextureAtlas;
private TiledTextureRegion mGreenBallFaceTextureRegion;
@Override
public void onLoadResources() {
/* Textures. */
...
this.mGreenTextureAtlas = new Texture(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
...
TextureRegionFactory.setAssetBasePath("gfx/");
/* TextureRegions. */
...
this.mGreenBallFaceTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mGreenTextureAtlas, this, "green_ball.png", 0, 16, 2, 1); // 64x32
this.mEngine.getTextureManager().loadTextures(this.mCueTextureAtlas, this.mGreenTextureAtlas , this.mBackgroundTexture, this.mPocketTexture);
}
此處,我居然創造了精靈和應用紋理:
face = new AnimatedSprite(pX, pY, this.mGreenBallFaceTextureRegion);
body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);
encapsed = new Encapsulator(body, face, Encapsulator.AVOID_BALL, mFaceCount);
ballsList.add(encapsed);
我封裝每個精靈,它的身體,和其他一些數據放入我製作的對象中,然後將該對象添加到ArrayList中。
這裏是onTouch事件處理程序。
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final ITouchArea pTouchArea,final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionDown()) {
final AnimatedSprite face = (AnimatedSprite) pTouchArea;
for(int i=0; i<ballsList.size(); i++)
{
if(face.equals(ballsList.get(i).animatedFace))
{
ballsList.get(i).toggleType(face);
System.out.println("Ball " + ballsList.get(i).id + " is now " + ballsList.get(i).type);
}
}
return true;
}
return false;
}
最後,這裏是在封裝器類是負責移動到下一個平鋪toggleType方法:
public void toggleType(AnimatedSprite face)
{
if(this.type == AVOID_BALL)
{
this.type = HIT_BALL;
face.nextTile();
}
else if(this.type == HIT_BALL)
{
this.type = AVOID_BALL;
face.setCurrentTileIndex(0);
}
}
如果很抱歉,這是有點囉嗦。任何幫助表示讚賞。
太棒了;)工作。 –