android遊戲引擎andengine學習系列二:簡單的例子

來源:互聯網
上載者:User

如何高效的學習,這才是我們最值得去學習的。

 

 

首先匯入架包,下載:http://download.csdn.net/detail/duancanmeng/4060082 lib檔案夾中

像我們寫android程式entends Activity一樣,我們一開始也要extends BaseGameActivity,而且實現四個必須被重載函數:

public class Main extends BaseGameActivity {      public void onLoadComplete() {               }      public Engine onLoadEngine() {          return null;      }      public void onLoadResources() {               }      public Scene onLoadScene() {          return null;      }    } 

 

只需實現上面四個方法,把商務邏輯和資料加進去,便可完成一個簡單的小例子。

先上:

 

 

具體代碼如下:

public class ShapeModifierExample extends BaseGameActivity{private static final int CAMERA_WIDTH = 720;private static final int CAMERA_HEIGHT = 480;private Camera mCamera;private Texture mTexture;private TiledTextureRegion mFaceTextureRegion;@Overridepublic Engine onLoadEngine() {Log.i("test","onLoadEngine");//遊戲攝像機,在AndEngine的Camera有兩種作用,一是用以調節螢幕的顯示地區,二是利用HUD類實際繪製遊戲螢幕於手機之上。//new Camera中的四個參數,第一個和第二個是代表camera的左頂點,第三個和第四個分別代表camera的寬和高this.mCamera = new Camera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT);//Engine是AndEngine的核心所在,//它對AndEngine引擎中Camera、Scene等重要組件進行了統一管理,//但必須和BaseGameActivity合作使用,//利用EngineOptions類可以對其進行必要的參數配置。//其中EngineOptions中的參數://    第一個判斷是否為全屏//  第二個判斷螢幕橫屏還是豎屏//    第三個RatioResolutionPolicy(按比例修正畫面大小,以適應螢幕大小),//  第四個便是我們自己定義的//第三個參數還可以:BaseResolutionPolicy(除了會校正一下螢幕大小外,什麼也不做)、// FillResolutionPolicy(展開遊戲畫面為全屏填充,視攝像機大小不同,會有不同程度變形)、//FixedResolutionPolicy(強行規定遊戲畫面為固定大小,此設定不會自動適應螢幕大小),//RatioResolutionPolicy(按比例修正畫面大小,以適應螢幕大小),//RelativeResolutionPolicy(根據構建RelativeResolutionPolicy時的縮放參數,縮放遊戲螢幕為指定比例)。return new Engine(new EngineOptions(true,ScreenOrientation.LANDSCAPE,new RatioResolutionPolicy(CAMERA_WIDTH,CAMERA_HEIGHT),this.mCamera));}@Overridepublic void onLoadResources() {Log.i("test","onLoadResources");//該處Texture的構造方法中三個參數://  第一個:要使用的紋理圖片的寬度//  第二個:要使用的紋理圖片的高度//  第三個:紋理的渲染方式//第三個參數其中有如下情況://1、NEAREST(Nearest濾波,實現上依賴GL_NEAREST做不光滑過濾,紋理環繞模式為GL_CLAMP_TO_EDGE,顯示速度快畫質差)//2、BILINEAR(雙線性插值,實現上依賴GL_LINEAR做線性濾波,紋理環繞模式為GL_CLAMP_TO_EDGE,顯示速度慢畫質佳)//3、REPEATING(與NEAREST同為Nearest濾波,但紋理環繞模式為GL_REPEAT,會自動填滿紋理上的空白地區,顯示速度較快畫質差)//4、REPEATING_BILINEAR(與BILINEAR同為雙線性插值,但紋理環繞模式為GL_REPEAT,會自動填滿紋理上的空白地區,顯示速度很慢畫質佳(低端機跑此模式異常悲劇,高端機尚可))//5、NEAREST_PREMULTIPLYALPHA(所有[PREMULTIPLYALPHA]結尾的TextureOptions與其它同名類差別僅在於是否支援根據Alpha值設定透明紋理,以下同)//6、BILINEAR_PREMULTIPLYALPHA//7、REPEATING_PREMULTIPLYALPHA//8、REPEATING_BILINEAR_PREMULTIPLYALPHA等靜態對象。//等等this.mTexture = new Texture(64,32,TextureOptions.BILINEAR_PREMULTIPLYALPHA);//前2個參數意義是划出//pWidth*pHeight大小的一塊空間用來儲存createFromAsset裝載的貼圖//備忘1//將紋理圖片“貼”到我們上面定義的Texture上//其中的參數:第二個代表本context,第四個:代表紋理貼到Texture上的X座標,第五個:代表貼到Texture上的Y座標,第六個:代表紋理要貼的列數,第七個:代表紋理要貼的行數this.mFaceTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mTexture, this, "face_box_tiled.png", 0, 0, 2, 1);this.mEngine.getTextureManager().loadTexture(mTexture);}@Overridepublic Scene onLoadScene() {Log.i("test","onLoadScene");//registerUpdateHandler函數註冊得到IUpdateHandler介面,內部有onUpdate以及reset兩個函數等待實現,幾乎所有AndEngine應用中都必然會看到它的身影,它也是AndEngine添加具體業務到遊戲業務線程中的主要方法之一。//主要用來供外部方法調用,以便更新業務//可以看到所有的exmaples中都有如此寫法this.mEngine.registerUpdateHandler(new FPSLogger());//備忘2//情境容器,作用類似於LGame中的Screen,能夠將某一特定情境作為遊戲模組進行調用,我們可以利用它來切換當前遊戲的畫面與觸控螢幕監聽,切換方法是利用Engine.setScenefinal Scene scene = new Scene(1);//這裡的顏色的值設定必須在0.0到1.0,例如(1,0,0)為紅色scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));final int centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;final int centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;Log.i("test","centerX:"+centerX+",centerY:"+centerY);//定義一個方塊final Rectangle rect = new Rectangle(centerX + 100, centerY, 32, 32);rect.setColor(1, 0, 0);//定義一個動畫精靈,並設定一些屬性final AnimatedSprite face = new AnimatedSprite(centerX - 100, centerY, this.mFaceTextureRegion);face.animate(100);face.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);      //備忘3//主要設定上面定義的兩個組件的動作//LoopShapeModifier(final IShapeModifierListener pShapeModiferListener, final int pLoopCount, final ILoopShapeModifierListener pLoopModifierListener, final IShapeModifier pShapeModifier)//從列印的語句可以看出,第一個參數是當整個動作結束的時候所做的一些操作,第二個參數就是動作的迴圈的次數,第三個就是一個動作完成後所做的一些操作,第四個就是具體的動作final LoopShapeModifier shapeModifier =new LoopShapeModifier(new IShapeModifierListener() {@Overridepublic void onModifierFinished(final IModifier<IShape> pShapeModifier, final IShape pShape) {ShapeModifierExample.this.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(ShapeModifierExample.this, "Sequence ended.", Toast.LENGTH_LONG).show();}});}},1,new ILoopShapeModifierListener() {@Overridepublic void onLoopFinished(final LoopModifier<IShape> pLoopShapeModifier, final int pLoopsRemaining) {ShapeModifierExample.this.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(ShapeModifierExample.this, "Loops remaining: " + pLoopsRemaining, Toast.LENGTH_SHORT).show();}});}},new SequenceShapeModifier(//這裡面的參數,第一個是Duration,第二個是From,第三個是tonew RotationModifier(1, 0, 90),new AlphaModifier(2, 1, 0),new AlphaModifier(1, 0, 1),new ScaleModifier(2, 1, 0.5f),new DelayModifier(0.5f),//這裡是一些組合動作new ParallelShapeModifier(new ScaleModifier(3, 0.5f, 5),new RotationByModifier(3, 90)),new ParallelShapeModifier(new ScaleModifier(3, 5, 1),new RotationModifier(3, 180, 0))));face.addShapeModifier(shapeModifier);rect.addShapeModifier(shapeModifier.clone());scene.getTopLayer().addEntity(face);scene.getTopLayer().addEntity(rect);return scene;}@Overridepublic void onLoadComplete() {// TODO Auto-generated method stubLog.i("test","onLoadComplete");}}

備忘1:這裡因為紋理圖片是:,所以定義的時候會根據紋理的具體情況來定義。

 

運行程式後可以發現後台很快的列印出:onLoadEngine,onLoadResources,onLoadScene,centerX:328,centerY:224,onLoadComplete

然後再執行一系列的動作,可以看到後台列印:

由此可以判定:備忘2處註冊的作用便是不停的重新整理螢幕,其Engine類中的onTickUpdate函數外部調用。

 

備忘3:這裡不明白的,可以參考http://www.cnblogs.com/yujunyong/archive/2011/04/13/2015467.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.