我是第一次使用AndEngine创建应用程序。我的应用程序是面向动画的,即它有许多点击动画的图像。大多数这些动画都是逐帧动画。我正在使用AndEngine,因为我需要一些带有粒子系统,重力和其他东西的动画。有人可以帮助我在AndEngine中使用简单的onclick动画代码,或者可能指向一些好的教程,因为所有AndEngine教程都是没有逐帧动画的游戏教程。任何帮助将不胜感激。
答案 0 :(得分:2)
对于我的逐帧动画,我使用的是一个名为Texture Packer的程序,它由AndEngine支持。实际上,您只需将所有图像拖到那里,然后导出需要在项目中使用的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对象提供有关位于我们的大位图中的较小图像区域所需的所有信息。
稍后,要在游戏的任何部分使用它,我们可以执行以下操作:(注意我的“dust”变量位于ResourceManager类中,因此它是公共的 - 这个信息是为下一个代码提供的)
AnimatedSprite dustAnimTiledSprite = new AnimatedSprite(500, 125, resourcesManager.dust, vbom);
myScene.attachChild(dustAnimTiledSprite);
最后,为了在特定的给定时间内对对象进行动画制作,我们只使用简单的animate方法,就像这样:
dustAnimTiledSprite.animate(40, 0);
(在这种情况下,每帧的持续时间为40,并且有0个循环 - 将动画一次)
**不太确定AnimatedSprite与TiledSprite之间的区别。但这就是我在游戏中展示简单动画的方式。
我希望这就是你要找的东西。祝你好运
答案 1 :(得分: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);
}
});