上午搭建了下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() -> onCreateResources()->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<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,如需轉載請自行聯系原作者