2013-10-17 83 views
0

我第一次使用AndEngine創建應用程序。我的應用程序是面向動畫的,即它具有多個點擊動畫的圖像。大多數這些動畫是逐幀動畫。我使用的是AndEngine,因爲我需要一些帶有粒子系統,重力和其他東西的動畫。有人可以在AndEngine中使用簡單的onclick動畫代碼來幫助我,也可以指點我一些很好的教程,因爲所有的AndEngine教程都是沒有逐幀動畫的遊戲教程。任何幫助,將不勝感激。Android AndEngine Ontouch動畫

+0

你能告訴我們「一幀一幀」動畫一些代碼,使你的?你有沒有機會使用AnimatedSprite或TiledSprite? – Orgmir

+0

我還沒有寫任何代碼。我聽說過AnimatedSprite和TiledSprite,但沒有詳細的介紹。我也找不到足夠的教程。你能指點一些很好的例子或教程嗎? – Bhaijaan

回答

2
  • 開始之前:請注意,此答案使用了AndEngine的TexturePacker擴展。

對於我的逐幀動畫我使用的是一個名爲Texture Packer的程序,它由AndEngine支持。實際上,您只需將所有圖像拖動到那裏,然後導出需要在項目中使用的3個文件。該文件是:.xml,.java,.png 通過這樣做,我創建了一個大的位圖(儘量保持低於或等於2048x2048),其中包含所有幀。

假設您創建了這些文件後,您需要將它們複製到您的項目。 .png和.xml進入同一目錄,最有可能位於資產/ gfx/...下,而.java文件應與其餘類一起位於src目錄中。

現在讓我們看看一些代碼..

所有我們需要從文件加載所有的紋理首先..我們將做到這一點使用下面的代碼:

這些都是我們的變量將用來創建我們的動畫對象。

private TexturePack dustTexturePack; 
private TexturePackTextureRegionLibrary dustTexturePackLibrary; 
public TiledTextureRegion dust; 

下面的代碼實際上加載從位圖的單紋理到我們的變量

try { 
     dustTexturePack = new TexturePackLoader(activity.getTextureManager(),"gfx/Animations/Dust Animation/").loadFromAsset(activity.getAssets(),"dust_anim.xml"); 

     dustTexturePack.loadTexture(); 
     dustTexturePackLibrary = dustTexturePack.getTexturePackTextureRegionLibrary(); 

} catch (TexturePackParseException e) { 
    Debug.e(e); 
} 
TexturePackerTextureRegion[] obj = new TexturePackerTextureRegion[dustTexturePackLibrary.getIDMapping().size()]; 

for (int i = 0; i < dustTexturePackLibrary.getIDMapping().size(); i++) { 
    obj[i] = dustTexturePackLibrary.get(i); 
} 

dust = new TiledTextureRegion(dustTexturePack.getTexture(), obj); 

正如你所看到的,我們使用的是TiledTextureRegion對象。到目前爲止,我們所做的實際上是加載紋理,並給我們的TiledTextureRegion對象提供所需的關於位於我們的大位圖中較小圖像區域的所有信息。 (注意,我的「塵埃」變量位於ResourceManager類中,因此它是公共的 - 這個信息是爲下一個給出的代碼)

AnimatedSprite dustAnimTiledSprite = new AnimatedSprite(500, 125, resourcesManager.dust, vbom); 
myScene.attachChild(dustAnimTiledSprite); 

最後,以動畫在特定給定的時間的對象,我們只需使用簡單的方法有生命的,就像這樣的:

dustAnimTiledSprite.animate(40, 0); 

(在這種情況下,每一個的持續時間幀是40,並且有0個循環 - 將被動畫一次)

**不太清楚AnimatedSprite和TiledSprite之間有什麼區別。但這是我在遊戲中展示簡單動畫的方式。

我希望這是你正在尋找的。好運

+0

我必須通過以下方式更改TexturePackLoader: 'code' dustTexturePack = new TexturePackLoader(this.getAssets(),this.getTextureManager())。loadFromAsset(「gfx/Animations/Dust Animation/dust_anim.xml」,「gfx /動畫/粉塵動畫/「); 'code' – Arkady

0

這是精靈表8幀

Player.sprite.animate(
              new long[] { 100, 100 }, 7, 8, 
              false, new IAnimationListener() { 

               public void onAnimationStarted(
                 AnimatedSprite pAnimatedSprite, 
                 int pInitialLoopCount) { 

               } 

               public void onAnimationLoopFinished(
                 AnimatedSprite pAnimatedSprite, 
                 int pRemainingLoopCount, 
                 int pInitialLoopCount) { 

               } 

               public void onAnimationFrameChanged(
                 AnimatedSprite pAnimatedSprite, 
                 int pOldFrameIndex, 
                 int pNewFrameIndex) { 

               } 

               public void onAnimationFinished(
                 AnimatedSprite pAnimatedSprite) { 
                Player.sprite.animate(
                  new long[] { 100, 
                    100, 100, 
                    100, 100, 
                    100, 100 }, 
                  0, 6, true); 

               } 
              });