上午搭建了下AndEngine的环境,运行起来了demo,看起来感觉很不错。这里写了个demo,凡事都要重基础开始学习,在学习android的绘图过程中也是,从如何绘制直线,矩形等到复杂的图像。这里做下笔记哈。
1、创建完android项目,引入AndEngine的项目类库,
2、创建Activity并继承SimpleBaseGameActivity,重载onCreateEngineOptions() ,onCreateResources(),onCreateScene()。
activity的执行顺序是onCreateEngineOptions() -> onCreateResources()->onCreateScene()。
以下是运行的log:
3、完整代码:
- package com.xzw.drawline;
- import java.util.Random;
- import org.andengine.engine.camera.Camera;
- import org.andengine.engine.options.EngineOptions;
- import org.andengine.engine.options.ScreenOrientation;
- import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
- import org.andengine.entity.primitive.Line;
- import org.andengine.entity.scene.Scene;
- import org.andengine.entity.scene.background.Background;
- import org.andengine.entity.util.FPSLogger;
- import org.andengine.opengl.vbo.VertexBufferObjectManager;
- import org.andengine.ui.activity.SimpleBaseGameActivity;
- import android.os.Bundle;
- import android.app.Activity;
- import android.util.DisplayMetrics;
- import android.util.Log;
- import android.view.Menu;
- public class MainActivity extends SimpleBaseGameActivity {
- private static final String TAG = "MainActivity";
- //定义随机数常量
- private static final long RANDOM_SEED = 1234567890;
- private static final int LINE_COUNT = 10; //绘制10条
- //设置屏幕的显示大小
- /*private static final int CAMERA_WIDTH = 720;
- private static final int CAMERA_HEIGHT = 480;*/
- private static int camera_width = 720;
- private static int camera_height = 480;
- /**
- * 创建引擎的选项(这里我的理解是初始化过程,和activity的onCreate一样)
- */
- @Override
- public EngineOptions onCreateEngineOptions() {
- Log.i(TAG, "--onCreateEngineOptions()--");
- //初始化屏幕显示区域的大小。
- setSceenDisplay();
- /**
- * 该类即我们常说的游戏摄像机,在AndEngine的Camera有两种作用,
- * 一是用以调节屏幕的显示区域,二是利用HUD类实际绘制游戏屏幕于手机之上。
- */
- final Camera camera = new Camera(0, 0, camera_width, camera_height);
- return new EngineOptions(true,
- ScreenOrientation.LANDSCAPE_FIXED,
- new RatioResolutionPolicy(camera_width, camera_height),
- camera);
- }
- @Override
- protected void onCreateResources() {
- Log.i(TAG, "--onCreateResources()--");
- }
- /**
- * 创建场景
- */
- @Override
- protected Scene onCreateScene() {
- Log.i(TAG, "--onCreateScene()--");
- this.mEngine.registerUpdateHandler(new FPSLogger());
- /**
- * 场景容器,作用类似于LGame中的Screen,
- * 能够将某一特定场景作为游戏模块进行调用
- * ,我们可以利用它来切换当前游戏的画面与触摸屏监听,
- * 切换方法是利用Engine.setScene。
- */
- final Scene scene = new Scene();
- //设置背景,使用RGB的方式进行设置
- scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));
- final Random random = new Random(RANDOM_SEED);
- //顶点缓存对象管理器(ps:这个是我自己翻译的,具体是啥意思,请大牛们帮我解释下)
- final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager();
- 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,vertexBufferObjectManager);
- //设置直线的颜色
- line.setColor(random.nextFloat(),random.nextFloat(),random.nextFloat());
- //将直线添加到场景
- scene.attachChild(line);
- }
- return scene;
- }
- /**
- * 初始化界面大小设置
- */
- private void setSceenDisplay(){
- DisplayMetrics dm = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- camera_width = dm.widthPixels;
- camera_height = dm.heightPixels;
- }
- }
真机运行效果:
如果你使用虚拟机运行的话会报:java.lang.IllegalArgumentException: No EGLConfig found!的错误。
所以只能使用真机。
以上就是创建一个简单的AndEngine的引擎的实现过程。初学请大牛们多多指教。