import org.andengine.engine.Engine.EngineLock;
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.IOnSceneTouchListener;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.util.FPSLogger;
import org.andengine.input.touch.TouchEvent;
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.region.ITextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.color.Color;
import android.util.DisplayMetrics;
public class SpriteRemoveActivity extends SimpleBaseGameActivity implements IOnSceneTouchListener
{
private static int winWidth = 854;
private static int winHeight = 480;
//图片纹理区域
private BitmapTextureAtlas mBitmapTextureAtlas;
//纹理范围(用来剪切纹理)
private ITextureRegion mTextureRegion;
//精灵
private Sprite mSprite;
@Override
public EngineOptions onCreateEngineOptions()
{
setScreenDisplay();
Camera camera = new Camera(0, 0, winWidth, winHeight);
EngineOptions engineOptions = new EngineOptions(
true,
ScreenOrientation.LANDSCAPE_FIXED,
new RatioResolutionPolicy(winWidth, winHeight), camera);
return engineOptions;
}
/**
* TextureOptions
* 1、NEAREST(Nearest滤波,实现上依赖GL_NEAREST做不光滑过滤,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度快画质差)
* 2、BILINEAR(双线性插值,实现上依赖GL_LINEAR做线性滤波,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度慢画质佳)
* 3、REPEATING(与NEAREST同为Nearest滤波,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度较快画质差)
* 4、REPEATING_BILINEAR(与BILINEAR同为双线性插值,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度很慢画质佳(低端机跑此模式异常悲剧,高端机尚可)
* 5、NEAREST_PREMULTIPLYALPHA(所有[PREMULTIPLYALPHA]结尾的TextureOptions与其它同名类差别仅在于是否支持根据Alpha值设置透明纹理,以下同)
* 6、BILINEAR_PREMULTIPLYALPHA
* 7、REPEATING_PREMULTIPLYALPHA
* 8、REPEATING_BILINEAR_PREMULTIPLYALPHA等静态对象。
*
* 以上TextureOptions实例都可以通过“TextureOptions.XXXXXX”的方式进行引用并设置给Texture。
* 事实上,除了AndEngine提供的Texture渲染模式,我们也可以按照规则自行构建需要的TextureOptions。
* 比如构建一个混插的TextureOptions:
*
* new TextureOptions(GL10.GL_LINEAR_MIPMAP_LINEAR,
* GL10.GL_LINEAR_MIPMAP_NEAREST, GL10.GL_REPEAT, GL10.GL_REPEAT, GL10.GL_MODULATE, true);
* 另外,TextureOptions默认还有DEFAULT模式,不过该模式实际引用为NEAREST_PREMULTIPLYALPHA,也就是纹理低画质但支持Alpha。
* 如果您想要兼容低端机,则建议不要使用含有【BILINEAR】字样的AndEngine加载大图,
* 而应直接使用TextureOptions.DEFAULT或TextureOptions.NEAREST_PREMULTIPLYALPHA;
* 因为BILINEAR模式对硬件要求较高,如果以此模式将较大纹理放到低端机上渲染,速度很可能无法保证。但是,假如您的游戏只针对高端机用户便无需介怀了。
*/
@Override
protected void onCreateResources()
{
//设置图片路径
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("images/");
/*
* 创建一个图片纹理区域(地图集)
* 如果创建的区域大小大于所用的图片的实际大小,那么多出来的区域就会浪费掉,其实就是对我们的内存的消耗。
* 建议:
* 如果加载的图片比较多,可以建立一张很大的BitmaoTextureAtlas,然后将其他图片加载到这张区域上来。
* 需要注意的是BitmaoTextureAtlas并不是可以无限创建大小,因为内存限制等问题。
* 因此,如果图片很多很大的话,可以建立多张BitmaoTextureAtlas,分开装载。
* 见:http://blog.csdn.net/xyz_fly/article/details/7458002
* AndEngine要求纹理加载的图片必须为2的整数次幂,否则报错
*/
mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32,TextureOptions.DEFAULT);
//得到图片并加装到纹理区域上来
mTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mBitmapTextureAtlas, this, "face_box.png", 0, 0);
mBitmapTextureAtlas.load();
}
@Override
protected Scene onCreateScene()
{
this.mEngine.registerUpdateHandler(new FPSLogger());
Scene scene = new Scene();
scene.setBackground(new Background(Color.BLUE));
float pX = (winWidth-mTextureRegion.getWidth())/2;
float pY = (winHeight-mTextureRegion.getHeight())/2;
//创建精灵
mSprite = new Sprite(pX, pY, mTextureRegion, this.getVertexBufferObjectManager());
scene.attachChild(mSprite);
scene.setOnSceneTouchListener(this);
return scene;
}
/**
* 设置屏幕大小
*/
private void setScreenDisplay()
{
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
winWidth = outMetrics.widthPixels;
winHeight = outMetrics.heightPixels;
}
@Override
public boolean onSceneTouchEvent(Scene scene, TouchEvent sceneTouchEvent)
{
if (mSprite == null) return false;
//先将引擎锁起来,再删除,删除后,再释放锁。为了解决同步的问题
//得到引擎锁
EngineLock engineLock = this.mEngine.getEngineLock();
//将引擎锁锁住
engineLock.lock();
//从场景中删除该精灵
scene.detachChild(mSprite);
//销毁
mSprite.dispose();
//置空
mSprite = null;
//解锁
engineLock.unlock();
return true;
}
}
相关推荐
在AndEngine这个强大的2D游戏开发引擎中,精灵(Sprite)和场景(Scene)的坐标系统是两个独立的体系,理解和有效地在它们之间进行坐标转换是实现动态游戏元素的关键。让我们深入探讨一下这个主题。 首先,...
在AndEngine游戏开发中,Tiled精灵是一种常用的游戏对象,用于创建连续播放的动画效果。AndEngine内置的TiledSprite类允许开发者通过TiledTextureRegion来构建这样的精灵,但是这通常需要预先准备一个包含所有帧的...
本篇文章将详细讲解AndEngine中精灵(Sprite)及其动作(Animations)的应用,以一个简单的例子为基础,帮助初学者更好地理解和实践。 首先,AndEngine中的精灵是2D游戏中的基本元素,它可以是一个静态图像或动态...
在AndEngine这个强大的2D游戏开发引擎中,精灵(Sprite)是核心的视觉元素之一,它代表了游戏画面中的一个可移动或可交互的对象。在这个主题中,我们讨论的是一个已经封装好的AndEngine动画精灵类,它使得创建和管理...
本示例旨在介绍如何利用AndEngine进行游戏开发,通过实例化引擎、场景管理、精灵动画、物理引擎以及用户交互等关键概念,帮助开发者快速上手。 首先,AndEngine的核心是Engine类,它是整个游戏运行的基石。在创建...
4. **事件处理和触摸输入**:AndEngine提供了简单的接口用于处理用户触摸事件,如点击、滑动等,方便游戏中的交互设计。 5. **扩展和模块化**:AndEngine支持各种扩展,如粒子系统、地形编辑器、音乐和音效模块,...
AndEngine的核心特性在于它的模块化设计,主要包括场景(Scene)、实体(Entity)和行为(Behavior)等概念。场景是游戏的主界面,可以包含多个实体和行为。实体是游戏中可交互的对象,如角色、敌人、道具等,它们有自己的...
3. **图形与精灵**:AndEngine支持多种图形元素,包括Sprites(精灵),这是游戏中动态对象的基础。文档会讲解如何创建、加载和动画化精灵,以及如何处理碰撞检测。 4. **纹理与纹理 atlases**:纹理是游戏图形的...
在AndEngine中,开发者可以通过定义纹理区域来指定精灵在大图中的位置和大小。 3. **精灵(Sprite)对象**:AndEngine中的`Sprite`类代表一个可移动、可旋转、可缩放的2D图像。它可以从精灵表中创建,通过指定纹理...
7. Entity:实体是在场景中可以被绘制的对象,如游戏中出现的精灵、矩形、文字、直线等。实体具有多种属性,如位置、旋转角度、缩放比例和颜色。 8. EngineOption:这是一个用于设置Engine的参数对象,可以根据需要...
在AndEngine中,游戏场景是由多个实体(或称为节点)组成的,`attachChild()`就是将一个节点(如精灵、纹理、形状等)添加到父节点(通常是Scene或Group)上的方法,从而将它显示在游戏中。 AndEngine的核心组件...
4. Camera:游戏中的Camera对象用于截取游戏场景的一部分,以显示在用户的屏幕上。通常情况下,每个场景只需要一个Camera对象。 5. Scene:场景类Scene是所有游戏中活动对象的根容器,它可以容纳各种游戏对象,比如...
- 将精灵添加到AndEngine的场景中,这样它就可以在屏幕上显示并参与游戏逻辑。 - 可以通过`Scene.attachChild(Sprite)`方法将精灵添加到场景的层次结构中。 9. **事件监听**: - 可以为精灵添加点击事件监听器,...
AndEngine的架构基于Scene(场景)、Entity(实体)和Module(模块)的概念。Scene是游戏的主要工作区,包含多个Entity,每个Entity可以看作游戏中的一个独立对象,如角色、道具等。Module则是一组相关功能的集合,...
在实际开发过程中,开发者可以利用AndEngine提供的基础类和工具类,如Scene(场景)、Sprite(精灵)、Camera(相机)等来构建游戏世界,通过Physics Engine(物理引擎)实现物体碰撞检测,通过Particle System...
4. **扩展性**:AndEngine提供了许多扩展模块,如精灵、物理引擎、粒子系统等,方便开发者进行复杂游戏功能的实现。 5. **活跃社区**:AndEngine拥有一个活跃的开发者社区,提供了丰富的教程和示例代码,便于学习和...
AndEngine的核心在于其强大的渲染引擎,它支持精灵(Sprites)、纹理(Textures)、纹理区域(Texture Regions)以及多边形(Polygons)等基本图形元素。此外,还有动画系统、物理引擎接口、碰撞检测以及场景管理等...
3. **精灵管理器扩展**:方便地管理和操作游戏中的精灵(Sprites),实现动画效果。 4. **地形渲染扩展**:支持2D地形的渲染,可以创建出具有高度和纹理变化的地图。 5. **音乐和音频播放扩展**:处理游戏中的背景...
例如,精灵是AndEngine中的基本元素,用于表示2D游戏中的静态或动态对象,如角色、道具等。而纹理atlases则是优化资源加载和内存使用的一种方法,将多个小图像合并成一个大纹理,减少了在游戏运行时加载和切换图片的...
这个文件包含了AndEngine的所有核心功能,包括场景管理、精灵动画、物理引擎、粒子系统、音乐和音效播放等。将这个jar包导入到你的Android项目中,你就能够开始利用AndEngine的强大功能来构建游戏了。 AndEngine的...