Android遊戲開發十日通(2)-搭建libgdx遊戲引擎

來源:互聯網
上載者:User
libgdx簡介

libgdx是一個跨平台的2D/3D的遊戲開發架構,它由Java/C/C++語言編寫而成。它基於Apache License, Version 2.0協議,對商業使用和非商業使用均免費。

libgdx相容Windows、Linux、Max OS X、Java Applet、Javascript/WebGL與Android[4](1.5版本+)平台。對於Android平台的支援在Android陣營和相關市場日益擴大的情況下libgdx的使用者越來越多。另外,基於MonoTouch,可以實現IOS相容。

官方網站:http://libgdx.badlogicgames.com/

搭建開發環境

作業系統:Opensuse12.2  

開始前請確保配置好android開發環境。jdk最好用1.6的,官網說1.7會有bug。

1)下載libgdx-http://libgdx.badlogicgames.com/download.html

選擇Release Builds。

下載好之後解壓檔案,就像這樣:

2)自動生產開發工程

包中內建的gdx-setup-ui可以用來自動產生項目工程,免去了繁瑣的初始化配置過程。

終端進入到解壓後的檔案夾,運行

java -jar gdx-setup-ui.jar 

利用工具建立工程,參數如下:

注意左下角要選定Generate the desktop project,方便開發調試。

中間的libGDX要是綠色的才能產生項目,紅色的話點擊檔案夾小表徵圖定位到之前下載好的zip檔案。

最後點擊偶下角的Open the generation screen->launch

在當前檔案夾下面會生產三個對應的目錄,

3)匯入工程

在eclipse中首先匯入遊戲工程和desktop工程。

File->import

選中剛才建立好的test-gdx-game檔案夾->finish。

同樣的方法匯入test-gdx-game-desktop。

接下來匯入android工程。

eclipse下面Ctrl+n - >Android project from exiting project->選中test-gdx-game-android->finish.

三個工程匯入完成後,還需要修改一些地方。

由於我們建立項目的時候是同時建立了android版本和desktop版本,gamecode 其實都在test-gdx-game中,而資源檔其實都放在了android項目中asset檔案夾中。

直接運行desktop項目會報錯,提示找不到資源檔。這裡需要在desktop項目中添加一個連結。

右擊test-gdx-game-desktop->project -> Properties -> Java Build Path -> Source tab -> Link Source… -> Browse… -> 定位到 test-gdx-game-android project 的assert檔案夾,點 Finish。

工程就算建立完成了。

desktop和android都可以直接運行,調用的是test-gdx-game中的代碼。

各自的運行結果如下:


項目解析

為了初始化Application必須實現ApplicationListener這個介面, 它用來更新遊戲狀態(即邏輯),渲染出項,暫停遊戲,儲存狀態,釋放資源等。
它也有一個處理Application 聲明周期事件的地方。每個應用,不管後台平台版本都必須實現ApplicationListener 介面。所有平台都會存在並要實現這個介面。

看一下項目代碼:

package com.me.testgdxgame;import com.badlogic.gdx.ApplicationListener;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.OrthographicCamera;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.Texture.TextureFilter;import com.badlogic.gdx.graphics.g2d.Sprite;import com.badlogic.gdx.graphics.g2d.SpriteBatch;import com.badlogic.gdx.graphics.g2d.TextureRegion;public class TestGdxGame implements ApplicationListener {private OrthographicCamera camera;private SpriteBatch batch;private Texture texture;private Sprite sprite;@Overridepublic void create() {float w = Gdx.graphics.getWidth();float h = Gdx.graphics.getHeight();camera = new OrthographicCamera(1, h/w);batch = new SpriteBatch();texture = new Texture(Gdx.files.internal("data/libgdx.png"));texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);sprite = new Sprite(region);sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth());sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2);}@Overridepublic void dispose() {batch.dispose();texture.dispose();}@Overridepublic void render() {Gdx.gl.glClearColor(1, 1, 1, 1);Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);batch.setProjectionMatrix(camera.combined);batch.begin();sprite.draw(batch);batch.end();}@Overridepublic void resize(int width, int height) {}@Overridepublic void pause() {}@Overridepublic void resume() {}}

生命週期如下:

幾個重要的方法:

create() : 當應用程式建立時,此方法被調用一次。

resize(int width,int,height): 每次遊戲螢幕重設並且不是暫停狀態的時候調用此方法。在create()後調用一次。參數是螢幕被重設後的新狂讀和高度。

render(): 每次渲染髮生時遊戲迴圈調用此方法。遊戲更新發生在繪製之前。意思就是說先處理邏輯再處理繪製。

pause(): 在應用destroyed()前調用此方法。在android中Home鍵按下或者重新進入程式時調用。這是一個儲存遊戲狀態的好地方,在android中的resume不一定會調用。

resuem(): 這個方法愛盡在android中調用,當應用獲得焦點時,案頭應用中將不會調用此方法。

dispose(): 當應用destroyed時,調用此方法,在pause()之後。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.