package com.andengine.test; 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.EngineOptions.ScreenOrientation; import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy; import org.anddev.andengine.entity.scene.Scene; import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener; import org.anddev.andengine.entity.scene.background.ColorBackground; import org.anddev.andengine.entity.sprite.Sprite; import org.anddev.andengine.input.touch.TouchEvent; 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; /** * 图片添加删除 * @author Administrator * 实现图片在窗体中添加、删除 */ public class ImageManager extends BaseGameActivity implements IOnSceneTouchListener{ /** * 屏幕尺寸 */ private float CameraWidth = 1500; private float CameraHeight = 480; /** * 屏幕对象 */ private Camera camera; /** * 图象纹理对象 */ private Texture texture; /** * 图象对象 */ private TextureRegion tankTextureRegion; /** * 精灵对象 */ private Sprite face; /** * 精灵状态 */ private int spriteType = 1; /** * 创建窗体第一加载方法 */ public Engine onLoadEngine() { /** * 创建窗体信息 * pX 当前窗体初始X坐标 * pY 当前窗体初始Y坐标 * pWidth 当前窗体宽度, 和高度比对后自适应屏幕 * pHeight 当前窗体高度 , 和宽度比对后自适应屏幕 */ camera = new Camera(0, 0, CameraWidth, CameraHeight); /** * 返回创建窗体对象 * EngineOptions 窗体对象详细信息类 * pFullScreen 是否全屏 * pScreenOrientation 显示模式(横屏/竖屏) * pResolutionPolicy 比对宽高 * pCamera 创建窗体信息对象 */ return new Engine(new EngineOptions(true , ScreenOrientation.LANDSCAPE , new RatioResolutionPolicy(CameraWidth, CameraHeight), this.camera)); } /** * 设置资源信息第二加载方法 */ public void onLoadResources() { /** * 实例化图片纹理 * pWidth 图片宽度 (不能小于真正图片宽度) * pHeight 图片高度(不能小于真正图片高度) * pTextureOptions 不太清楚 , 大概是图片显示效果吧。。 */ texture = new Texture(128 , 256 , TextureOptions.BILINEAR_PREMULTIPLYALPHA); /** * 指定数据源路径到Asset下的gfx文件夹 */ TextureRegionFactory.setAssetBasePath("gfx/"); /** * 创建图片对象 * 图象纹理 * 上下文 * 图片名称 * X坐标 * Y坐标 */ tankTextureRegion = TextureRegionFactory.createFromAsset(texture, this, "tank.png", 0, 0); /** * 设置纹理管理器加载纹理 */ this.mEngine.getTextureManager().loadTexture(texture); } /** * 设置当前窗体第三加载方法 */ public Scene onLoadScene() { /** * 创建窗体现场对象 * pLayerCount 层数量 */ Scene scene = new Scene(1); /** * 设置背景颜色 */ scene.setBackground(new ColorBackground(0,0,255)); /** * 设置触摸窗体屏幕事件对象 */ scene.setOnSceneTouchListener(this); /** * 返回布置完的现场 */ return scene; } /** * 添加图片(自定义方法) */ public void addImage(){ /** * 获得现场对象 */ Scene scene = this.mEngine.getScene(); /** * 设置图片X坐标 */ float tankX = (CameraWidth - tankTextureRegion.getWidth())/2; /** * 设置图片Y坐标 */ float tankY = (CameraHeight - tankTextureRegion.getHeight())/2; /** * 创建精灵并将图片存入 */ face = new Sprite(tankX , tankY , tankTextureRegion){ public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { this.setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY() - this.getHeight() / 2); return true; } }; /** * 将精灵画入最上层布局中 * 布局方式 先画最上层 也就是从0、1、2这种方式画 ,最上层容易被下层覆盖 , 要注意 */ scene.getTopLayer().addEntity(face); /** * 注册屏幕按下事件 */ scene.registerTouchArea(face); scene.setTouchAreaBindingEnabled(true); } /** * 删除图片(自定义方法) * @param pScene */ public void removeImage(final Scene pScene){ this.runOnUpdateThread(new Runnable(){ public void run() { pScene.getTopLayer().removeEntity(face); } }); } /** * 加载机器信息(第四加载方法) */ public void onLoadComplete() { addImage(); } /** * 实现IOnSceneTouchListener接口后可用方法 , 点击当前窗体监听方法 */ public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { // System.out.println("spriteType:" + spriteType); // if(spriteType == 1){ // spriteType = 0; // removeImage(pScene); // }else{ // spriteType = 1; // addImage(); // } return false; } }