一:AndEngine的小例子
首先导入架包,下载:http://download.csdn.net/detail/duancanmeng/4060082 lib文件夹中
像我们写android程序entends Activity一样,我们一开始也要extends BaseGameActivity,而且实现四个必须被重载函数:
- public class Main extends BaseGameActivity {
- public void onLoadComplete() {
- }
- public Engine onLoadEngine() {
- return null;
- }
- public void onLoadResources() {
- }
- public Scene onLoadScene() {
- return null;
- }
- }
只需实现上面四个方法,把业务逻辑和数据加进去,便可完成一个简单的小例子。
先上效果图:
具体代码如下:
- public class ShapeModifierExample extends BaseGameActivity{
- private static final int CAMERA_WIDTH = 720;
- private static final int CAMERA_HEIGHT = 480;
- private Camera mCamera;
- private Texture mTexture;
- private TiledTextureRegion mFaceTextureRegion;
- @Override
- public Engine onLoadEngine() {
- Log.i("test","onLoadEngine");
- //游戏摄像机,在AndEngine的Camera有两种作用,一是用以调节屏幕的显示区域,二是利用HUD类实际绘制游戏屏幕于手机之上。
- //new Camera中的四个参数,第一个和第二个是代表camera的左顶点,第三个和第四个分别代表camera的宽和高
- this.mCamera = new Camera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT);
- //Engine是AndEngine的核心所在,
- //它对AndEngine引擎中Camera、Scene等重要组件进行了统一管理,
- //但必须和BaseGameActivity合作使用,
- //利用EngineOptions类可以对其进行必要的参数配置。
- //其中EngineOptions中的参数:
- // 第一个判断是否为全屏
- // 第二个判断屏幕横屏还是竖屏
- // 第三个RatioResolutionPolicy(按比例修正画面大小,以适应屏幕大小),
- // 第四个便是我们自己定义的
- //第三个参数还可以:BaseResolutionPolicy(除了会校验一下屏幕大小外,什么也不做)、
- // FillResolutionPolicy(拉伸游戏画面为全屏填充,视摄像机大小不同,会有不同程度变形)、
- // FixedResolutionPolicy(强行规定游戏画面为固定大小,此设置不会自动适应屏幕大小),
- // RatioResolutionPolicy(按比例修正画面大小,以适应屏幕大小),
- // RelativeResolutionPolicy(根据构建RelativeResolutionPolicy时的缩放参数,缩放游戏屏幕为指定比例)。
- return new Engine(new EngineOptions(true,ScreenOrientation.LANDSCAPE,new RatioResolutionPolicy(CAMERA_WIDTH,CAMERA_HEIGHT),this.mCamera));
- }
- @Override
- public void onLoadResources() {
- Log.i("test","onLoadResources");
- //该处Texture的构造方法中三个参数:
- // 第一个:要使用的纹理图片的宽度
- // 第二个:要使用的纹理图片的高度
- // 第三个:纹理的渲染方式
- //第三个参数其中有如下情况:
- //1、NEAREST(Nearest滤波,实现上依赖GL_NEAREST做不光滑过滤,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度快画质差)
- //2、BILINEAR(双线性插值,实现上依赖GL_LINEAR做线性滤波,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度慢画质佳)
- //3、REPEATING(与NEAREST同为Nearest滤波,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度较快画质差)
- //4、REPEATING_BILINEAR(与BILINEAR同为双线性插值,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度很慢画质佳(低端机跑此模式异常悲剧,高端机尚可))
- //5、NEAREST_PREMULTIPLYALPHA(所有[PREMULTIPLYALPHA]结尾的TextureOptions与其它同名类差别仅在于是否支持根据Alpha值设置透明纹理,以下同)
- //6、BILINEAR_PREMULTIPLYALPHA
- //7、REPEATING_PREMULTIPLYALPHA
- //8、REPEATING_BILINEAR_PREMULTIPLYALPHA等静态对象。
- //等等
- this.mTexture = new Texture(64,32,TextureOptions.BILINEAR_PREMULTIPLYALPHA); //前2个参数意义是划出<span style="FONT-SIZE: 12px; LINE-HEIGHT: 17px"> //pWidth*</span><span style="FONT-SIZE: 12px; LINE-HEIGHT: 17px">pHeight大小的一块空间用来存储</span><span style="FONT-SIZE: 12px; LINE-HEIGHT: 17px">createFromAsset装载的贴图</span> //备注1
- //将纹理图片“贴”到我们上面定义的Texture上
- //其中的参数:第二个代表本context,第四个:代表纹理贴到Texture上的X坐标,第五个:代表贴到Texture上的Y坐标,第六个:代表纹理要贴的列数,第七个:代表纹理要贴的行数
- this.mFaceTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mTexture, this, "face_box_tiled.png", 0, 0, 2, 1);
- this.mEngine.getTextureManager().loadTexture(mTexture);
- }
- @Override
- public Scene onLoadScene() {
- Log.i("test","onLoadScene");
- //registerUpdateHandler函数注册得到IUpdateHandler接口,内部有onUpdate以及reset两个函数等待实现,几乎所有AndEngine应用中都必然会看到它的身影,它也是AndEngine添加具体业务到游戏业务线程中的主要方法之一。
- //主要用来供外部方法调用,以便更新业务
- //可以看到所有的exmaples中都有如此写法
- this.mEngine.registerUpdateHandler(new FPSLogger()); //备注2
- //场景容器,作用类似于LGame中的Screen,能够将某一特定场景作为游戏模块进行调用,我们可以利用它来切换当前游戏的画面与触摸屏监听,切换方法是利用Engine.setScene
- final Scene scene = new Scene(1);
- //这里的颜色的值设置必须在0.0到1.0,例如(1,0,0)为红色
- scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
- final int centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
- final int centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
- Log.i("test","centerX:"+centerX+",centerY:"+centerY);
- //定义一个方块
- final Rectangle rect = new Rectangle(centerX + 100, centerY, 32, 32);
- rect.setColor(1, 0, 0);
- //定义一个动画精灵,并设置一些属性
- final AnimatedSprite face = new AnimatedSprite(centerX - 100, centerY, this.mFaceTextureRegion);
- face.animate(100);
- face.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); //备注3
- //主要设置上面定义的两个组件的动作
- //LoopShapeModifier(final IShapeModifierListener pShapeModiferListener, final int pLoopCount, final ILoopShapeModifierListener pLoopModifierListener, final IShapeModifier pShapeModifier)
- //从打印的语句可以看出,第一个参数是当整个动作结束的时候所做的一些操作,第二个参数就是动作的循环的次数,第三个就是一个动作完成后所做的一些操作,第四个就是具体的动作
- final LoopShapeModifier shapeModifier =
- new LoopShapeModifier(
- new IShapeModifierListener() {
- @Override
- public void onModifierFinished(final IModifier<IShape> pShapeModifier, final IShape pShape) {
- ShapeModifierExample.this.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(ShapeModifierExample.this, "Sequence ended.", Toast.LENGTH_LONG).show();
- }
- });
- }
- },
- 1,
- new ILoopShapeModifierListener() {
- @Override
- public void onLoopFinished(final LoopModifier<IShape> pLoopShapeModifier, final int pLoopsRemaining) {
- ShapeModifierExample.this.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(ShapeModifierExample.this, "Loops remaining: " + pLoopsRemaining, Toast.LENGTH_SHORT).show();
- }
- });
- }
- },
- new SequenceShapeModifier(
- //这里面的参数,第一个是Duration,第二个是From,第三个是to
- new RotationModifier(1, 0, 90),
- new AlphaModifier(2, 1, 0),
- new AlphaModifier(1, 0, 1),
- new ScaleModifier(2, 1, 0.5f),
- new DelayModifier(0.5f),
- //这里是一些组合动作
- new ParallelShapeModifier(
- new ScaleModifier(3, 0.5f, 5),
- new RotationByModifier(3, 90)
- ),
- new ParallelShapeModifier(
- new ScaleModifier(3, 5, 1),
- new RotationModifier(3, 180, 0)
- )
- )
- );
- face.addShapeModifier(shapeModifier);
- rect.addShapeModifier(shapeModifier.clone());
- scene.getTopLayer().addEntity(face);
- scene.getTopLayer().addEntity(rect);
- return scene;
- }
- @Override
- public void onLoadComplete() {
- // TODO Auto-generated method stub
- Log.i("test","onLoadComplete");
- }
- }
一:AndEngine的小例子的更多相关文章
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
- java即时通信小例子
学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- bootstrap 模态 modal 小例子
bootstrap 模态 modal 小例子 <html> <head> <meta charset="utf-8" /> <title ...
- INI配置文件分析小例子
随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...
- JavaScript小例子:复选框全选
JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...
- 【zTree】 zTree使用的 小例子
使用zTree树不是第一次了 但是 还是翻阅着之前做的 对照着 使用起来比较方便 这里就把小例子列出来 总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先 在 ...
- js小例子(标签页)
运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...
- sbrk与brk的使用小例子
sbrk() 和 brk() - Unix的系统函数 sbrk()和brk() 系统的底层会维护一个位置,通过位置的移动完成内存的分配和回收.映射内存时 以一个内存页作为基本单位. void* ...
随机推荐
- iOS开发之都兴忱小结
1.NSArray/NSDictionary ------> strong temp和self.arr是同一地址. 2.NSArray/NSDictionary ------->copy ...
- java 语法错误 (操作符丢失) 在查询表达式
遇到的详细问题: a[0]="11"; a[1]="2223"; a[2]="333"; sta.executeUpdate("i ...
- UBUNTU 14.04 + CUDA 7.5 + CAFFE
这个也是困扰我很久的问题,之前用 http://www.cnblogs.com/platero/p/3993877.html 的安装方法,装了五六七八九十次,总是出问题. 后来找到了一种新的方法,一个 ...
- java实现音频转换
这里需要用到第三方 ffmpeg.exe package com.convertaudio; import java.io.File;import java.util.ArrayList;import ...
- IOS中延时执行的几种方式的比较
本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...
- SPRING IN ACTION 第4版笔记-第十一章Persisting data with object-relational mapping-005Spring-Data-JPA例子的代码
一.结构 二.Repository层 1. package spittr.db; import java.util.List; import org.springframework.data.jpa. ...
- Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fanc ...
- USACO Section 4.2: The Perfect Stall
这题关键就在将题转换成最大流模板题.首先有一个原始点,N个cow个点, M个barn点和一个终点,原始点到cow点和barn点到终点的流都为1,而cow对应的barn就是cow点到对应barn点的流, ...
- Nand flash uboot 命令详解【转】
转自:http://blog.chinaunix.net/uid-14833587-id-76513.html nand info & nand device 显示flash的信息: DM36 ...
- Python 脚本生成测试数据,Python生成随机数据,Python生成大量数据保存到文件夹中
代码如下: import random import datetime import time dataCount = 10*100*100 #10M. codeRange = range(ord(' ...