import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.entity.util.FPSLogger;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.atlas.bitmap.BuildableBitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.source.IBitmapTextureAtlasSource;
import org.andengine.opengl.texture.atlas.buildable.builder.BlackPawnTextureAtlasBuilder;
import org.andengine.opengl.texture.atlas.buildable.builder.ITextureAtlasBuilder.TextureAtlasBuilderException;
import org.andengine.opengl.texture.region.TiledTextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import android.util.DisplayMetrics;
/**
* 多个动画精灵
*/
public class AnimateSpriteActivity extends SimpleBaseGameActivity
{
private static int winWidth = 854;
private static int winHeight = 480;
//图片纹理区域(自动定义位置)
private BuildableBitmapTextureAtlas mBuildableBitmapTextureAtlas;
private TiledTextureRegion mBananaTiledTextureRegion,mFaceBoxTiledTextureRegion,
mHelicopterTiledTextureRegion,mSnapdragonTiledTextureRegion;
@Override
public EngineOptions onCreateEngineOptions()
{
setScreenDisplay();
Camera camera = new Camera(0, 0, winWidth, winHeight);
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(winWidth, winHeight), camera);
}
@Override
protected void onCreateResources()
{
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("images/");
/*
* BuildableBitmapTextureAtlas对象是一个很好的方式来实现ITextureRegion对象在我们的纹理地图中,无需手动定义位置。
* 而BitmapTextureAtlas是手动定义TextureRegion在BitmapTextureAtlas中的位置。
* BuildableBitmapTextureAtlas纹理地图的目的是自动将其ITextureRegion对象放到纹理地图中最合适的坐标。
* 用这种方法创建纹理是最简单,最有效的方法,因为使用很多纹理地图开发大型游戏时,会非常耗时和容易出错。
* 除了BuildableBitmapTextureAtlas的自动化功能,开发人员可以在纹理地图中定义透明边距,以避免纹理出血的发生。
*/
mBuildableBitmapTextureAtlas = new BuildableBitmapTextureAtlas(this.getTextureManager(), 1024, 1024, TextureOptions.DEFAULT);
mBananaTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(mBuildableBitmapTextureAtlas, this, "banana_tiled.png", 4, 2);
mFaceBoxTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(mBuildableBitmapTextureAtlas, this, "face_box_tiled.png", 2, 1);
mHelicopterTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(mBuildableBitmapTextureAtlas, this, "helicopter_tiled.png", 2, 2);
mSnapdragonTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(mBuildableBitmapTextureAtlas, this, "snapdragon_tiled.png", 4, 3);
try
{
//BlackPawnTextureAtlasBuilder作用是AndEngine自动组合N个贴图纹理到一张大的纹理里面。其几个参数是子纹理间的距离等
//在几乎所有的情况下,我们将避免纹理出血的可能性。但是在极端的情况下如果纹理出血,请加大第三个参数的值,这将有助于缓解问题
mBuildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(0, 1, 1));
} catch (TextureAtlasBuilderException e)
{
e.printStackTrace();
}
//一旦地图集已经建成,我们现在可以加载
mBuildableBitmapTextureAtlas.load();
}
@Override
protected Scene onCreateScene()
{
this.mEngine.registerUpdateHandler(new FPSLogger());
Scene scene = new Scene();
scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));
AnimatedSprite mBananaSprite = new AnimatedSprite(100, 50, mBananaTiledTextureRegion, this.getVertexBufferObjectManager());
AnimatedSprite mFaceBoxSprite = new AnimatedSprite(400, 30, mFaceBoxTiledTextureRegion, this.getVertexBufferObjectManager());
AnimatedSprite mHelicopterSprite = new AnimatedSprite(100, 250, mHelicopterTiledTextureRegion, this.getVertexBufferObjectManager());
AnimatedSprite mSnapdragonSprite = new AnimatedSprite(400, 250, mSnapdragonTiledTextureRegion, this.getVertexBufferObjectManager());
mBananaSprite.animate(100);
mFaceBoxSprite.animate(100);
mHelicopterSprite.animate(new long[]{100,100},1,2,true);
mSnapdragonSprite.animate(100);
scene.attachChild(mBananaSprite);
scene.attachChild(mFaceBoxSprite);
scene.attachChild(mHelicopterSprite);
scene.attachChild(mSnapdragonSprite);
return scene;
}
/**
* 设置屏幕大小
*/
private void setScreenDisplay()
{
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
winWidth = displayMetrics.widthPixels;
winHeight = displayMetrics.heightPixels;
}
}
相关推荐
在AndEngine这个强大的2D游戏开发引擎中,精灵(Sprite)是核心的视觉元素之一,它代表了游戏画面中的一个可移动或可交互的对象。在这个主题中,我们讨论的是一个已经封装好的AndEngine动画精灵类,它使得创建和管理...
本示例源码着重展示了如何利用AndEngine将多张小图片合并成一张大图,进而创建动画精灵,实现动态效果。这个过程通常被称为精灵表(Sprite Sheet)或纹理 atlas 技术,对于优化资源加载和减少渲染时的draw调用次数...
在AndEngine游戏开发中,Tiled精灵是一种常用的游戏对象,用于创建连续播放的动画效果。AndEngine内置的TiledSprite类允许开发者通过TiledTextureRegion来构建这样的精灵,但是这通常需要预先准备一个包含所有帧的...
本资源"Android andengine中直接加载多张小图片合成一张大图片生成动画精灵源码.zip"是针对AndEngine中如何通过合并多张小图片来制作动画精灵的一个实例代码包。 在AndEngine中,动画精灵(Sprite)是一种可移动的...
这个压缩包中的源码是关于如何使用AndEngine将多张小图片合成一张大图片,进而创建出动画精灵。下面将详细解释这一过程中的关键知识点。 1. **AndEngine基础**: AndEngine是一个开源的Java库,专门为Android平台...
这个项目源码示例是关于如何使用AndEngine来创建动画精灵,通过将多张小图片合成一张大图片,然后在运行时进行切割和动画处理。这种技术通常被称为精灵表(Sprite Sheet)或纹理 atlas。 1. **精灵表(Sprite Sheet...
这个毕业设计项目的核心是利用AndEngine的技术实现动态精灵(Sprite)的动画效果,通过将多张小图片组合成一张大图片,然后在运行时分割和动态加载,以达到流畅的动画效果。 一、AndEngine简介 AndEngine是一款开源...
本篇文章将详细讲解AndEngine中精灵(Sprite)及其动作(Animations)的应用,以一个简单的例子为基础,帮助初学者更好地理解和实践。 首先,AndEngine中的精灵是2D游戏中的基本元素,它可以是一个静态图像或动态...
本压缩包中的源码示例是关于如何利用AndEngine来实现一个高级功能:直接加载多张小图片并将其合成为一张大图片,进而生成动画精灵。这个技术在游戏开发中极为常见,用于制作角色移动、攻击等动态效果。 首先,我们...
在这个"AnimatedSprites"的例子中,我们将深入探讨AndEngine如何处理动画精灵,以及如何实现多点触摸功能。 一、 AnimatedSprites与精灵动画 在2D游戏中,精灵(Sprite)通常指的是一个可以移动或改变的静态图像。...
本篇文章将深入探讨如何在AndEngine中通过加载多张小图片并合成为一张大图片,进而生成动画精灵。 首先,我们要了解AndEngine中的精灵(Sprite)概念。精灵是2D游戏中最常见的元素,它可以是一个静态的图像或者动态...
这个压缩包"安卓Andriod源码——andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip"显然包含了关于如何在AndEngine中创建动画精灵的具体示例代码。动画精灵在游戏开发中是非常重要的元素,它们通常由多...
安卓开发-andengine中直接加载多张小图片合成一张大图片生成动画精灵
在Android应用开发中,特别是在游戏...通过学习这个源码,学生不仅可以掌握AndEngine的基本用法,还能了解到Android游戏开发中的资源管理和动画实现策略,这对于完成毕业设计以及今后的Android开发工作都将大有裨益。
andengine中直接加载多张小图片合成一张大图片生成动画精灵
本教程主要探讨如何在AndEngine中直接加载多张小图片,并将它们合成一张大图片,生成动画精灵。 首先,我们需要理解AndEngine中的精灵和动画概念。精灵是2D游戏中的基本元素,它可以是一个静态的图片或者一个动态的...