之前搞的那个android小游戏,画面总是感觉有点卡,虽然尝试着把View换成了SurfaceView,而且还加了一些其他的改动,可是还是有点卡。总觉得很业余。准备用OpenGL ES重新写一下。网上一查好像还有些游戏引擎。找到了andengine,就从它开始学习了。先不搞引擎的原理,从使用上开始学习。
一、使用Andengine绘制静态图像
看了AndengineExamples里的Simple部分,留个记录。
1、初始化Engine
public Engine onLoadEngine() {
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
}
①初始化Camera。Camera好像是个专业术语,查了一下没找到什么合适的定义,感觉上定义了可视范围。据说还可以定义可视角度,可视距离什么的。
②根据Camera生成Engine,Engine负责控制描画和更新的流程。EngineOptions的参数
pFullscreen:是否全屏
pScreenOrientation:屏幕方向
pResolutionPolicy:解析比。具体作用不明
2、不用加载资源所以直接跳到加载场景
@Override
public Scene onLoadScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene();
scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
final Random random = new Random(RANDOM_SEED);
for(int i = 0; i < LINE_COUNT; i++) {
final float x1 = random.nextFloat() * CAMERA_WIDTH;
final float x2 = random.nextFloat() * CAMERA_WIDTH;
final float y1 = random.nextFloat() * CAMERA_HEIGHT;
final float y2 = random.nextFloat() * CAMERA_HEIGHT;
final float lineWidth = random.nextFloat() * 5;
final Line line = new Line(x1, y1, x2, y2, lineWidth);
line.setColor(random.nextFloat(), random.nextFloat(), random.nextFloat());
scene.attachChild(line);
}
return scene;
}
①初始化Scene。Scene估计也是个专业术语,好像是定义画布,然后将所有需要绘制的东西直接加入其中就可以了。
②Scene可以通过[setOnSceneTouchListener]方法设定相应屏幕事件的监听器。
3、关于纹理(Texture)和精灵(Sprite)
准备先上网查查纹理,查的头大。简单了学习一下OpenGL,纹理是指将指定图片贴到多变性的表面上,也就是贴图。精灵连OpenGL里也没说。
二、静态图像的绘制原理
有点复杂,简化后的流程如下
BaseGameActivity调用onLoadEngine()生成引擎
BaseGameActivity生成RenderSurfaceView,并将引擎作为Renderer传给了它
BaseGameActivity在显示前的doResume()方法中调用onLoadResources()、onLoadScene()、onLoadComplete()
RenderSurfaceView继承于GLSurfaceView。GLSurfaceView类,主要处理OpenGL ES相关的一些细节,并通过GLThread更新画面(通过Renderer.onDrawFrame()方法)
RenderSurfaceView通过Renderer将onDrawFrame调用交给引擎处理
最终的画图还是交给了引擎,具体怎么画的没有看懂,看样子要先学学OpenGL ES了
一、使用Andengine绘制静态图像
看了AndengineExamples里的Simple部分,留个记录。
1、初始化Engine
public Engine onLoadEngine() {
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
}
①初始化Camera。Camera好像是个专业术语,查了一下没找到什么合适的定义,感觉上定义了可视范围。据说还可以定义可视角度,可视距离什么的。
②根据Camera生成Engine,Engine负责控制描画和更新的流程。EngineOptions的参数
pFullscreen:是否全屏
pScreenOrientation:屏幕方向
pResolutionPolicy:解析比。具体作用不明
2、不用加载资源所以直接跳到加载场景
@Override
public Scene onLoadScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene();
scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
final Random random = new Random(RANDOM_SEED);
for(int i = 0; i < LINE_COUNT; i++) {
final float x1 = random.nextFloat() * CAMERA_WIDTH;
final float x2 = random.nextFloat() * CAMERA_WIDTH;
final float y1 = random.nextFloat() * CAMERA_HEIGHT;
final float y2 = random.nextFloat() * CAMERA_HEIGHT;
final float lineWidth = random.nextFloat() * 5;
final Line line = new Line(x1, y1, x2, y2, lineWidth);
line.setColor(random.nextFloat(), random.nextFloat(), random.nextFloat());
scene.attachChild(line);
}
return scene;
}
①初始化Scene。Scene估计也是个专业术语,好像是定义画布,然后将所有需要绘制的东西直接加入其中就可以了。
②Scene可以通过[setOnSceneTouchListener]方法设定相应屏幕事件的监听器。
3、关于纹理(Texture)和精灵(Sprite)
准备先上网查查纹理,查的头大。简单了学习一下OpenGL,纹理是指将指定图片贴到多变性的表面上,也就是贴图。精灵连OpenGL里也没说。
二、静态图像的绘制原理
有点复杂,简化后的流程如下
BaseGameActivity调用onLoadEngine()生成引擎
BaseGameActivity生成RenderSurfaceView,并将引擎作为Renderer传给了它
BaseGameActivity在显示前的doResume()方法中调用onLoadResources()、onLoadScene()、onLoadComplete()
RenderSurfaceView继承于GLSurfaceView。GLSurfaceView类,主要处理OpenGL ES相关的一些细节,并通过GLThread更新画面(通过Renderer.onDrawFrame()方法)
RenderSurfaceView通过Renderer将onDrawFrame调用交给引擎处理
最终的画图还是交给了引擎,具体怎么画的没有看懂,看样子要先学学OpenGL ES了