您的位置:首页 > 其它

andengine多张小图片实现动画精灵效果

2014-01-23 12:13 1106 查看
andengine动画精灵,需要美工将多张动画单张图片合成到一张大图片上,程序调用这张大图片生成动画精灵。

我封装一个类,直接传入多张小图片名称,就生成动画精灵类,不用美工来辅助了。

封装的精灵类,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: