天天看點

AndEngine引擎學習之繪制直線

   上午搭建了下AndEngine的環境,運作起來了demo,看起來感覺很不錯。這裡寫了個demo,凡事都要重基礎開始學習,在學習android的繪圖過程中也是,從如何繪制直線,矩形等到複雜的圖像。這裡做下筆記哈。

1、建立完android項目,引入AndEngine的項目類庫,

<a href="http://blog.51cto.com/attachment/201211/151649663.png" target="_blank"></a>

2、建立Activity并繼承SimpleBaseGameActivity,重載onCreateEngineOptions() ,onCreateResources(),onCreateScene()。

activity的執行順序是onCreateEngineOptions()  -&gt; onCreateResources()-&gt;onCreateScene()。

以下是運作的log:

<a href="http://blog.51cto.com/attachment/201211/152124599.jpg" target="_blank"></a>

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); 

    } 

    protected void onCreateResources() {  

        Log.i(TAG, "--onCreateResources()--"); 

     * 建立場景 

    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&lt;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; 

真機運作效果:

<a href="http://blog.51cto.com/attachment/201211/152949715.png" target="_blank"></a>

如果你使用虛拟機運作的話會報:java.lang.IllegalArgumentException: No EGLConfig found!的錯誤。

是以隻能使用真機。

以上就是建立一個簡單的AndEngine的引擎的實作過程。初學請大牛們多多指教。

本文轉自xuzw13 51CTO部落格,原文連結:http://blog.51cto.com/xuzhiwei/1049109,如需轉載請自行聯系原作者

繼續閱讀