AndEngine游戏引擎之BoundCamera

如何追逐一个玩家,始终让玩家在视野范围之内。

AndEngine引擎中使用BoundCamera类。

步骤

1.构造BoundCamera类,起始坐标,长宽,然后传给engine

2.设置BoundCamera的追踪范围一般范围会比之前的摄像头面积要大 setBounds(minX, maxX,minY, maxY)

3.设置BoundCamera可以追踪

4.给BoundCamera设置追踪的实体,然后BoundCamera就可以追踪这个实体了

下面是示例

package com.example.SpriteTest;



import android.util.Log;

import android.widget.Toast;

import org.anddev.andengine.engine.Engine;

import org.anddev.andengine.engine.camera.BoundCamera;

import org.anddev.andengine.engine.camera.Camera;

import org.anddev.andengine.engine.options.EngineOptions;

import org.anddev.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;

import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;

import org.anddev.andengine.entity.IEntity;

import org.anddev.andengine.entity.layer.tiled.tmx.*;

import org.anddev.andengine.entity.layer.tiled.tmx.util.exception.TMXLoadException;

import org.anddev.andengine.entity.modifier.*;

import org.anddev.andengine.entity.scene.Scene;

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;

import org.anddev.andengine.util.modifier.IModifier;



/**

 * Created by Administrator on 2014/12/26.

 */

public class TiledMapActivity extends BaseGameActivity{

    /*----------------����-------------------------------*/

    protected int CAMERA_WIDTH=1280;

    protected int CAMERA_HEIGHT=720;

    /*-----------------AndEngine����----------------------------*/

    protected Engine mEngine;

    protected Camera mCamera;

    protected BoundCamera mBoundCamera;

   // protected Scene mMainScene;







    protected TextureRegion spriteRegion;

    @Override

    public Engine onLoadEngine() {

        mBoundCamera=new BoundCamera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT);

        mCamera=new Camera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT);

        mEngine=new Engine(new EngineOptions(true, EngineOptions.ScreenOrientation.LANDSCAPE,new FillResolutionPolicy(),mBoundCamera));

        return mEngine;

    }



    @Override

    public void onLoadResources() {

        Texture mTexture=new Texture(32,32, TextureOptions.BILINEAR);

        spriteRegion= TextureRegionFactory.createFromAsset(mTexture,this,"face_box.png",0,0);

        mEngine.getTextureManager().loadTexture(mTexture);

    }



    @Override

    public Scene onLoadScene() {



        final Scene mMainScene=new Scene(1);

        TMXLoader mTMXloader=new TMXLoader(this,mEngine.getTextureManager(),new TMXLoader.ITMXTilePropertiesListener() {

            @Override

            public void onTMXTileWithPropertiesCreated(TMXTiledMap pTMXTiledMap, TMXLayer pTMXLayer, TMXTile pTMXTile, TMXProperties<TMXTileProperty> pTMXTileProperties) {

                Log.i("Property",pTMXLayer.getName()+": "+pTMXTileProperties.toArray().toString());

                Toast.makeText(TiledMapActivity.this,"dgsdsdf",Toast.LENGTH_LONG).show();

            }

        });

        try {

            final TMXTiledMap map=mTMXloader.loadFromAsset(this, "gzip.tmx");

            final TMXLayer tmxLayer=map.getTMXLayers().get(0);

            mMainScene.getFirstChild().attachChild(tmxLayer);



            Log.i("Property", "高度:"+tmxLayer.getHeight());

            //用于限制镜头的大小 最小X,最大X,最小Y,最大Y

            this.mBoundCamera.setBounds(0, tmxLayer.getWidth(),0, tmxLayer.getHeight());

            this.mBoundCamera.setBoundsEnabled(true);

            mMainScene.setOnSceneTouchListener(new Scene.IOnSceneTouchListener() {

                @Override

                public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {

                    switch(pSceneTouchEvent.getAction())

                    {

                        case TouchEvent.ACTION_DOWN:

                            TMXTile mTile=tmxLayer.getTMXTileAt(pSceneTouchEvent.getX(),pSceneTouchEvent.getY());

                            StringBuffer sb = new StringBuffer();

                            sb.append("你点击的瓦片信息如下:");

                            sb.append("globalId: "+mTile.getGlobalTileID());

                            sb.append("col:"+mTile.getTileColumn());

                            sb.append("row:"+mTile.getTileRow());

                            Log.i("Property",sb.toString());

                            //瓦片是根据瓦片集中的全局ID来决定的,如果瓦片的ID发生了改变,就会在瓦片集中根据修改后的ID进行更新

                            mTile.setGlobalTileID(map,1);

                            return true;

                        default:

                            return false;

                    }



                }

            });

        } catch (TMXLoadException e) {

            e.printStackTrace();

        }catch (IllegalArgumentException ee){

            ee.printStackTrace();

            Toast.makeText(TiledMapActivity.this,ee.getMessage(),Toast.LENGTH_LONG).show();

        }





        Sprite boy=new Sprite(0,0,spriteRegion);

        boy.registerEntityModifier(new SequenceEntityModifier(new MoveYModifier(10.0f,0.0f,960.0f-32),

                new DelayModifier(3.0f),

                new MoveXModifier(10.0f,0.0f,640-32)));

        mMainScene.getLastChild().attachChild(boy);

        //设置需要追逐的实体(chase:追逐,追寻)

         mBoundCamera.setChaseEntity(boy);

        return mMainScene;

    }



    @Override

    public void onLoadComplete() {



    }

}

 

你可能感兴趣的:(AndEngine)