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;
}
}
AndEngine 简单介绍
最新推荐文章于 2024-03-14 11:45:39 发布