AndEngine 简单介绍

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值