andengine多张小图片实现动画精灵效果
2014-01-23 12:13
1106 查看
andengine动画精灵,需要美工将多张动画单张图片合成到一张大图片上,程序调用这张大图片生成动画精灵。
我封装一个类,直接传入多张小图片名称,就生成动画精灵类,不用美工来辅助了。
封装的精灵类,AnimationSprite:
MyActivity.java
源代码在此:http://download.csdn.net/detail/wulong710/6876761
我封装一个类,直接传入多张小图片名称,就生成动画精灵类,不用美工来辅助了。
封装的精灵类,AnimationSprite:
package dy.android.xiaochu.game; import android.content.Context; import df.util.Util; import dy.android.xiaochu.constants.IConstants; import org.anddev.andengine.engine.Engine; import org.anddev.andengine.entity.layer.ILayer; import org.anddev.andengine.entity.shape.IShape; import org.anddev.andengine.entity.sprite.AnimatedSprite; import org.anddev.andengine.opengl.texture.Texture; import org.anddev.andengine.opengl.texture.region.TextureRegion; import org.anddev.andengine.opengl.texture.region.TextureRegionFactory; import org.anddev.andengine.opengl.texture.region.TiledTextureRegion; import org.anddev.andengine.util.modifier.IModifier; /** * Created with IntelliJ IDEA. * User: wulong * Date: 14-1-22 * Time: 下午3:39 * To change this template use File | Settings | File Templates. */ public class AnimationSprite { private static final String TAG = Util.toTAG(AnimationSprite.class); // 总的图片纹理区域 private TiledTextureRegion tiledTextureRegion; // 测试用的动画精灵 private AnimatedSprite animatedSprite; private boolean isMultiImages = false; public AnimationSprite(Context pCtx, Engine pEngine, ILayer pLayer, String[] pAssetsPicNameList, final float pX, final float pY, final int pWidth, final int pHeight) { int canvasWidth = 2; int canvasHeight = 2; while (canvasWidth < pWidth * pAssetsPicNameList.length) { canvasWidth = canvasWidth * 2; } while (canvasHeight < pHeight) { canvasHeight = canvasHeight * 2; } Texture bitmapTextureAtlas = new Texture(canvasWidth, canvasHeight, IConstants.TEXTURE_QUALITY); TextureRegion[] childTextureRegions = new TextureRegion[pAssetsPicNameList.length]; for (int i = 0; i < pAssetsPicNameList.length; i++) { childTextureRegions[i] = TextureRegionFactory.createFromAsset(bitmapTextureAtlas, pCtx, pAssetsPicNameList[i], i * pWidth, 0); } tiledTextureRegion = new TiledTextureRegion(bitmapTextureAtlas , 0, 0 , pWidth * pAssetsPicNameList.length , bitmapTextureAtlas.getHeight() , pAssetsPicNameList.length, 1); pEngine.getTextureManager().loadTexture(bitmapTextureAtlas); animatedSprite = new AnimatedSprite(pX, pY, tiledTextureRegion); animatedSprite.setVisible(false); pLayer.addEntity(animatedSprite); if (pAssetsPicNameList.length > 1) { isMultiImages = true; } } public void addShapeModifier(final IModifier<IShape> pShapeModifier) { animatedSprite.addShapeModifier(pShapeModifier); } public void setVisible(boolean visible) { animatedSprite.setVisible(visible); } public void animate(long pDuration) { if (null != animatedSprite && isMultiImages) { animatedSprite.animate(pDuration); } } public void setPosition(final float pX, final float pY) { animatedSprite.setPosition(pX, pY); } public void setWidth(final float pWidth) { animatedSprite.setWidth(pWidth); } public void setScale(final float pScale) { animatedSprite.setScale(pScale); } public boolean isVisible() { return animatedSprite.isVisible(); } public void setHeight(final float pHeight) { animatedSprite.setHeight(pHeight); } public float getX() { return animatedSprite.getX(); } public float getY() { return animatedSprite.getY(); } public float getWidth() { return animatedSprite.getWidth(); } public float getHeight() { return animatedSprite.getHeight(); } }
MyActivity.java
package com.example; import org.anddev.andengine.engine.Engine; import org.anddev.andengine.engine.camera.Camera; import org.anddev.andengine.engine.options.EngineOptions; import org.anddev.andengine.engine.options.resolutionpolicy.FillResolutionPolicy; import org.anddev.andengine.entity.scene.Scene; import org.anddev.andengine.entity.sprite.Sprite; import org.anddev.andengine.opengl.texture.Texture; import org.anddev.andengine.opengl.texture.TextureOptions; import org.anddev.andengine.opengl.texture.region.TextureRegion; import org.anddev.andengine.opengl.texture.region.TextureRegionFactory; import org.anddev.andengine.ui.activity.BaseGameActivity; public class MyActivity extends BaseGameActivity { Scene mMenuScene = null; AnimationSprite animationSprite = null; final private int CAMERA_WIDTH = 320, CAMERA_HEIGHT = 480; enum ELayerIndex { LAYER_BG, LAYER_ANIMATION, LAYER_MAX } @Override public Engine onLoadEngine() { Camera ca = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); return new Engine(new EngineOptions(true, EngineOptions.ScreenOrientation.PORTRAIT, new FillResolutionPolicy(), ca)); } @Override public Scene onLoadScene() { mMenuScene = new Scene(ELayerIndex.LAYER_MAX.ordinal()); mMenuScene.setBackgroundEnabled(false); Texture textrue = new Texture(512, 1024, TextureOptions.DEFAULT); TextureRegion region = TextureRegionFactory.createFromAsset(textrue, this, "bground.png", 0, 0); mEngine.getTextureManager().loadTexture(textrue); Sprite spr = new Sprite(0, 0, region); spr.setWidth(mEngine.getCamera().getWidth()); spr.setHeight(mEngine.getCamera().getHeight()); mMenuScene.getLayer(ELayerIndex.LAYER_BG.ordinal()).addEntity(spr); initAnimations(); return mMenuScene; //To change body of implemented methods use File | Settings | File Templates. } @Override public void onLoadResources() { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onLoadComplete() { //To change body of implemented methods use File | Settings | File Templates. action(); } public void onGamePaused() { super.onGamePaused(); } public void onGameResumed() { super.onGameResumed(); } private void action() { if (null != animationSprite) { animationSprite.animate(100); animationSprite.setVisible(true); } } /** * 初始化跑动的猪 */ private void initAnimations() { animationSprite = new AnimationSprite(this, mEngine, mMenuScene.getLayer(ELayerIndex.LAYER_ANIMATION.ordinal()), new String[]{"game_mole1.png", "game_mole2.png", "game_mole3.png", "game_mole4.png", "game_mole5.png",}, 100, 100, 85, 85); // animationSprite.setPosition((mEngine.getCamera().getWidth() - animationSprite.getWidth()) / 2, // (mEngine.getCamera().getHeight() - animationSprite.getHeight()) / 2); } }
源代码在此:http://download.csdn.net/detail/wulong710/6876761
相关文章推荐
- jQuery插件Slider Revolution实现响应动画滑动图片切换效果
- 用两张图片实现的2D动画效果(翻转)
- 01-实现图片按钮的缩放、动画效果(block的初步应用)
- CSS3动画:流彩文字效果+图片模糊效果+边框伸展效果实现
- CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)
- css3实现点击切换背景图片,并且背景图片实现动画效果
- 【POP动画引擎教程 01】实现图片折叠效果
- DEMO:transition3d、运用动画实现图片3d翻转效果
- CSS3实现的图片加载动画效果
- JQuery.HoverDir库基本使用方法,实现图片滑动动画效果
- HTML5+javascript实现图片加载进度动画效果
- gif的动画图片,可否实现文字水印和图片水印的效果呢?
- 【web前端】JavaScript实现图片幻灯片滚动播放动画效果
- web前端之JavaScript DOM编程艺术之用JavaScript实现动画效果拓展(预览图片)
- iOS动画-来回切换多张图片产生动态效果
- 图片动画实现插件及效果展示
- 利用MATLAB实现图片切换动画效果详解
- jQuery动画效果实现图片无缝连续滚动
- jQuery动画效果实现图片无缝连续滚动
- jQuery实现图片与文本信息切换动画效果