2013-10-17 2 views
0

AndEngine을 처음 사용하는 앱을 만들고 있습니다. 내 앱은 애니메이션 지향적입니다. 즉, 애니메이션을 클릭하면 여러 개의 이미지가 있습니다. 이러한 애니메이션의 대부분은 프레임 애니메이션입니다. 내가 입자 시스템, 중력 및 기타 물건과 함께 몇 가지 애니메이션을 필요로하기 때문에 AndEngine을 사용하고 있습니다. 누군가 AndEngine의 간단한 onclick 애니메이션 코드로 나를 도울 수 있을지, 아니면 모든 AndEngine 튜토리얼이 프레임 애니메이션별로 프레임이없는 게임 튜토리얼이기 때문에 좋은 튜토리얼을 가르쳐 주시겠습니까? 어떤 도움을 주시면 감사하겠습니다.Android AndEngine Ontouch 애니메이션

+0

당신이 우리에게 애니메이션 "프레임으로 프레임"당신과 함께 몇 가지 코드를 보여줄 수와 이것은 스프라이트 시트? AnimatedSprite 또는 TiledSprite를 사용하고 있습니까? – Orgmir

+0

아직 코드를 작성하지 않았습니다. AnimatedSprite 및 TiledSprite에 대해 들었지만 그것에 대한 자세한 생각은 없습니다. 또한 나는 그들을위한 충분한 튜토리얼을 찾을 수 없었다. 이 좋은 예제 나 튜토리얼을 가르쳐 주시겠습니까? – Bhaijaan

답변

2
  • 시작하기 전에 :이 대답은 AndEngine의 TexturePacker 확장을 사용한다는 점에 유의하십시오.

프레임 애니메이션별로 AndEngine에서 지원하는 Texture Packer라는 프로그램을 사용하고 있습니다. 실제로 모든 이미지를 드래그하여 프로젝트 내에서 사용해야하는 3 개의 파일을 내 보냅니다. 파일은 다음과 같습니다. .xml, .java, .png 이렇게하면 내부에있는 모든 프레임으로 큰 비트 맵 (2048x2048 이하로 유지하려고 시도)을 만들고 있습니다.

작성한 파일을 가지고 있다고 가정하고 프로젝트에 복사해야합니다. .png와 .xml은 같은 디렉토리에 있습니다. assets/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, 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); 

               } 
              });