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() {

    }
}
时间: 2024-11-04 19:41:07

AndEngine游戏引擎之BoundCamera的相关文章

Android 2D游戏引擎AndEngine快速入门教程

Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引擎开发2D游戏. 试读下载地址:http://pan.baidu.com/s/1c0CODiw 前言 作为一款免费的手机操作系统,Android系统占据大半的手机系统份额.在Android众多的应用类型中,游戏应用由其娱乐性成为最大的分支.由于手机的操控特点,2D游戏成为Android游戏的主流,如

Android游戏引擎AndEngine入门讲解

AndEngine是一款基于OpenGL ES技术的2D游戏引擎,可以运行在Android1.6及以上版本的系统中.拥有更多的游戏组件与扩展功能,在默认情况下已经可以支持中文. 虽然AndEngine作为游戏引擎在功能上较libGDX更为丰富和人性化,但相比libGDX的绘图渲染机能却逊色不少.libGDX有较为完善的OpenGLES环境适应性,而AndEngine在这方面的投入明显不足.所以你是否选择AndEngine,需要从实际出发,多做几次真机测试才好下决定,下面小编将逐步讲解AndEng

Android 2D游戏引擎AndEngine配置环境

Android 2D游戏引擎AndEngine配置环境 1.2  配置环境 在任何编程中,都需要一些软件或者硬件的支持.否则,没有硬件软件是不可能存在的,而想要编写对应语言的的程序,这需要对应语言库和编译器等的支持.所以在开AndEngine的游戏也需要这些东西,而我们需要的环境都有那些呢?本节内容就将解密AndEngine环境的配置本文选自Android 2D游戏引擎AndEngine快速入门教程. 1.2.1  环境要求 编写AndEngine需要一定的编程环境才可以完成编写.而为了调试,需

认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多,但是大多数都需要花费一些资金才可以正式使用.而我们这里要讲解的AndEngine则是一个免费并且开源的2D游戏引擎.对于它的使用,读者不仅不必担心授权问题,而且还可以获得AndEngine源码,在需要的时候对其进行修改.本章就来讲解如何在自己的计算机上搭建一个自己AndEngine开发平台.本文选

Android 8款开源游戏引擎

1.Angle  (2D    Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发.该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程. 最低运行环境要求不详. 项目地址:http://code.google.com/p/angle/ 2.Rokon  (2D    Java) rokon是一款Android 2D游戏引擎,基于OpenGL ES技术开

教你如何选择Android游戏引擎

我们进行Android游戏开发时选择游戏引擎是必须的,但是该如何选择呢?哪个Android游戏引擎更加适合自己呢?本文就提供了三个游戏引擎的对比说明,阐述了它们各自的特点,为大家选择引擎提供了参照. 1.Ronkon 如果不是想帮助作者解决一大堆兼容性问题的话还是不要使用这个引擎,我在上面浪费了1天半,就只是为了把实例程序跑起来.开始还以为是我水平菜,结果一堆人没跑起来,和我一样都是黑屏.虽然它文档做得好但我还是放弃了,本来Android平台兼容性就是老大难,在来个半吊子的引擎我可没本事搞定.

Android 八款开源 Android 游戏引擎

原文地址 本文内容 Angle Rokon LGame AndEngine libgdx jPCT Alien3d Catcake 最近无意间看到一篇关于 Android 搜索引擎的文章,于是搜索了,学不学是其次,主要是要有这方面的知识--技多不压身嘛~ 下面罗列出八款常见的 Android 游戏引擎,以供参考.收费.下载量过小.不公开源码,以及鄙人不知道(-_-)的引擎不在此列. Angle Angle 是一款专为 Android 平台设计的,适合快速开发的 2D 游戏引擎,基于 OpenGL

[Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游 戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情. 事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存

Android 游戏引擎汇总

1.AndEngine 简介:AndEngine 基于libGDX框架开发,使用OpenGL ES进行图形绘制.同时继承了BOX2D物理引擎,因此能实现一些较为复杂的物理效果.在Rokon停止更新以后,AndEngine 成为Android 最为流行的2D游戏引擎 优点:(1)高效:在大运算量好事情况下,使用C/C++本地代码进行开发.比如物理引擎或者音频处理. (2)AndEngine是开源项目,开发者可对源码进行修改,它的源码在github上托管. (3)拥有Particle System