使用andengine绘制静态图像

之前搞的那个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了

你可能感兴趣的:(游戏,android,Random,float,引擎)