Android應用libGDX引擎系列(二)-libGDX 入門精要

by AlexQ (email alexq_andr@163.com

image
image

導語

  1. What's libGDX
  2. Standing on the Shoulders of Giants
  3. Core

What's libGDX

一個作為引擎和游戲基礎的高性能,跨平臺的游戲開發(fā)框架。這個框架允許我們我們專注于基礎而不是游戲引擎的新的特性。它具有很棒的靈活性。

  • libGDX是一個跨平臺的開發(fā)框架。它目前支持的平臺有Windows、Linux、Mac OS X、Android、黑莓、iOS和HTML5。
  • libGDX允許你將代碼不經(jīng)任何修改的部署到多個平臺,而不是修改你的代碼適應不同的平臺或者直接編譯到HTML5。你可以在一個桌面開發(fā)環(huán)境中迅速部署你的代碼。你可以使用所有的Java生態(tài)系統(tǒng)中的開發(fā)工具。
  • libgdx可以在底層進行操作??梢宰屇阒苯釉L問文件系統(tǒng),輸入設備,輸出設備,音頻設備和通過統(tǒng)一的OpenGL ES接口訪問OpenGL。
  • 基于這些底層的操作,libgdx建立了強大的API幫助你完成常見的開發(fā)任務。比如渲染精靈,繪制文本,構(gòu)建用戶界面,播放聲音效果和音樂流,線性代數(shù)和三角計算,解析JSON和XML數(shù)據(jù)等。
  • 在必要時,libGDX可以通過本地代碼追求更好的性能。所有這些功能隱藏在Java API函數(shù)中,所以你不用為為不同平臺交叉編譯本地代碼而擔心。libGDX的很多部分可以運行在已知的平臺中,所以你不用擔心。
  • libGDX旨在成為一個框架而不是一個引擎,世上沒有一勞永逸的事。相反,Libgdx強大的抽象可以讓你編寫出你想要的游戲或者應用。

Standing on the Shoulders of Giants

libGDX 基于如此多的第三方庫:

  • OpenGL (跨編程語言、跨平臺的編程接口規(guī)格的專業(yè)的圖形程序接口)
  • FreeType (完全免費(開源)的、高質(zhì)量的且可移植的字體引擎)
  • mpg123 (快速的、可移植的 MPEG 播放器和解碼器)
  • xiph.org (開放的編解碼器)
  • soundtouch (開源的音頻處理庫,主要實現(xiàn)包含變速、變調(diào)、變速同時變調(diào)等三個 功能模塊)
  • box2d (用于模擬2D剛體物體的引擎)
  • LWJGL (為開發(fā)者提供簡單易用的API來訪問OpenGL (Open Graphics Library)與OpenAL (Open Audio Library) 同時也提供操作控制器(Gamepads, Steering wheel和操縱桿)的API)
  • OpenAL (自由軟件界的跨平臺音效API)
  • KissFFT (名鼎鼎的kiss fft算法,對浮點運算的優(yōu)化,以及針對定點運算的優(yōu)化)

HelloWorld

執(zhí)行步驟:

  1. 下載gdx-setup.jar


    圖片名稱
  2. 啟動gdx-setup.jar


    圖片名稱
  3. Android需要配置SDK,執(zhí)行“Generate”


    圖片名稱
  4. AndroidStudio Open 文件夾


    圖片名稱
  5. Run


    圖片名稱

Code預覽:

    public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new MyGdxGame(), config);
        }
    }
    public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
        }
    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
        }
    }

Core

libGDX 圖形繪制

主要學習四個類:SpriteBatch、Texture 、TextureRegion 、 Sprite
1. Texture 類
* 定義:圖片從原始格式解碼并上傳到GPU就被稱為紋理。

* 功能:其實就是承裝獲取到目標圖片的容器。

* helloworld中有加載圖片的事例:

    ```
        new Texture("badlogic.jpg");
    ``` 
2. SpriteBatch 類
* 定義:SpriteBatch用于繪制二維矩形參考紋理(區(qū)域)。SpriteBatch類可用于批量繪圖命令和優(yōu)化處理的GPU。

* 功能:SpriteBatch可以把許多相同紋理一起描述并一起送入GPU,同時賦予紋理和坐標以便每個圖形的繪制。-------------SpriteBatch可以理解為畫筆。
* helloworld中有加載圖片的事例:
    ```
        SpriteBatch batch;
        ...
        public void render () {
            batch.begin();
            batch.draw(img, 0, 0);
            batch.end();
        }
    ``` 
3. TextureRegion 類
* API定義:定義了一個矩形區(qū)域的紋理。使用的坐標系統(tǒng)與x軸指向右,Y軸向下在左上角的起源。

* 功能用途:實際操作中我們也經(jīng)常使用圖片的一部分,或者將多個圖片資源集合在一個圖片文件中。而要顯示圖片的一部分就可以使用TextureRegion類。
4. Sprite 類
* API定義:持有的幾何形狀,顏色,和紋理信息使用加載繪制2D精靈。一個精靈有定位和給定的寬度和高度尺寸。
* 功能用途:TextureRegion的加強版,比TextureRegion多了一些功能,如:可以指定位置、顏色、旋轉(zhuǎn)等。

    **其實Sprite的功能就是以上的集合。但是Sprite更方便,它用一個對象描述了一切,但是同時加入了很多TextureRegion和Texture沒有的東西,如位置、顏色、旋轉(zhuǎn).**

libGDX 舞臺和演員

1. 舞臺 Stage類
  • 定義:包含擁有層次結(jié)構(gòu)的一個二維場景,場景中有許多演員。處理視圖和分配輸入事件。舞臺負責操作視角,和處理分配輸入事件。

  • 功能:一個Stage可以充滿整個屏幕。設置視角(一般是浮點型和布爾類型),同時設置使用的相機,調(diào)配 Actor、Group 與 Screen 之間的關系轉(zhuǎn)換(包括坐標)。一個Stage必須負責接收輸入事件,同時將它分配給演員。這通常是通過Stage的gdx.input.setinputprocessor來實現(xiàn)。一個inputmultiplexer可用來處理輸入事件的不同階段,即之前或之后。如果一個演員從輸入的方法中處理一個事件而返回TRUE,那么Stage的輸入方法也會返回true,導致隨后的inputprocessors不接收事件。

  • 使用方法:Stage(float width, float height, boolean keepAspectRatio, SpriteBatch batch)

    (1)第一個參數(shù):設置舞臺的寬度。

    (2)第二個參數(shù):設置舞臺的高度。

    (3)第三個參數(shù):是負責是否讓舞臺鋪滿屏幕,如果這個值是ture的話,舞臺的尺寸就是你設置的大小。如果是false的話,就鋪滿屏幕。

    (4)第四個參數(shù):就是傳入你所聲明的Spirtibatch。

2. 演員 Actor類
  • 定義:在二維場景圖中,一個演員擁有位置,矩形的大小,起點,規(guī)模,旋轉(zhuǎn),和顏色等屬性。演員的位置是相對于演員的父母,它的起點是相對位置,同時可用于縮放和旋轉(zhuǎn)。一個演員也有一個行動,可以加入監(jiān)聽來實現(xiàn)演員接收事件通知。

  • 功能:演員類是一個項目中的基本元素,libgdx中演員封裝了許多有用的方法,比較常用的有draw、addlistrener、fire、addaction等等。

3. 舞臺和演員的概念很好的抽象了游戲中的元素概念,實現(xiàn)了同一場景不同演員隨意配置切換,以及同一演員出現(xiàn)在不同場景。

libGDX 音效

1. Audio 接口

支持格式:mp3、ogg、wav等。

public interface Audio {
   public Sound newSound(FileHandle fileHandle);
   public Music newMusic(FileHandle file);
   public AudioDevice newAudioDevice(boolean isMono);
}
2. Sound 接口
  • Sound(聲音)類旨在播放聲音效果
  • 定義:短音頻的剪輯,可以實現(xiàn)多次播放。它是完全加載到內(nèi)存的,并且只負責加載小的音頻文件。當使用音頻結(jié)束后,調(diào)用dispose方法來銷毀。
  • 支持格式:支持wav格式,不支持ogg格式。
Sound  sound = Gdx.audio.newSound(Gdx.files.internal("sound.wav"));
sound.setLooping(true);
sound.play();
sound.setVolume(15);
3. Music 類
  • 定義:一段長音頻的剪輯,可以在實現(xiàn)多次播放。它是部分被裝載到內(nèi)存的,并且只負責加載大的音頻文件。當該音頻使用結(jié)束后,調(diào)用dispose方法來銷毀。
  • 支持格式:支持MP3 OGG WAV等格式。
Music music = Gdx.audio.newMusic(Gdx.files.internal("xxx.ogg"));
music.setLooping(true);
music.setVolume(15);
music.play();

libGDX 資源加載器

AssetManager 類 負責加載類似于 textures, bitmapfonts, tile maps, sounds, music 等類型的文件。
API

(1)clear() 方法:清空和刪除所有已加載資源和預加載隊列。

(2)containsAsset(T asset) :返回的是一個布爾類型,檢測是否加載了否個資源。

(3)finishLoading() : 所有資源加載完成后,結(jié)束加載資源,也可以手動設置加載到某一項結(jié)束加載。

(3)getAssetFileName(T asset) :獲取資源名字,得到的是一個String類型的文件。

(4)getLoadedAssets() :獲取已經(jīng)加載的資源數(shù)量。

(5)getProgress() :獲取加載進度,返回一個0 - 1之間的小數(shù),這個一般可以用作制作進度條。

(6)isLoaded(java.lang.String fileName) :返回的是一個布爾類型,檢測你傳入的文件是否已經(jīng)被加載了,一般使用的if判斷語句中。

(7)load(java.lang.String fileName, java.lang.Class type) :將已傳入的文件名和類型加入到預加載隊列,為了防止名字和類型重復,這里需要將名字和類型都傳入,常用。

(8)setLoader(java.lang.Class type, AssetLoader loader) :設置加載器,其實AssetManager類中包裝了需要Assetloader對象,這樣才能完成不同類型的文件的加載,當然AssetManager也可以加入加載器。

(9)unload(java.lang.String fileName) :卸載資源,如果某個資源不使用了,就可以卸載該資源,這樣有利于游戲流暢性。

(10)update():加載資源,實際上Load方法其實只是將預加載的資源加載到了預加載隊列,實質(zhì)上并沒有加載資源,使用update()方法才會加載資源,調(diào)用該方法才能,使不斷加載那寫儲存在預加載對了中的資源。

功能優(yōu)點:(官方翻譯)

(1)加載大部分資源采用異步加載的方式,這樣就能在加載的同時不阻塞渲染進程.

(2)實現(xiàn)了引用計數(shù),當A和B都依賴C素材的時候,C只有在A,B都銷毀了才會銷毀.這也意味著即使一個資源加載了很多次,在內(nèi)存中也之后一份.

(3)使用一個單一管理器來實現(xiàn)管理所有素材.

(4)可以實現(xiàn)加載素材時占用的系統(tǒng)內(nèi)存。

libGDX Particle (粒子效果&粒子編輯器)

關于這個例子編輯器,個人推薦看看我下面提到的視頻,里面有專門講粒子編輯器使用的課程,比較直觀。

圖片名稱

官方網(wǎng)站上對軟件中的各個參數(shù)的解釋如下:

  • Delay: 當粒子系統(tǒng)開始后,發(fā)射器等待多少時間開始發(fā)射
  • Duration:發(fā)射器生存跨度,也就是粒子效果持續(xù)的的時間,注意這個時間和粒子生存時間不同
  • Count: 顧名思義,同一時間可出現(xiàn)的粒子個數(shù),有一個上限一下下限。
  • Emission: 每秒鐘發(fā)射多少個粒子,這個參數(shù)帶了一張圖表,圖表中間寫著duration,代表圖表X 軸表示發(fā)射器生存時間,意思是說發(fā)射器的生存時間內(nèi),該圖表控制各個時間點粒子每秒鐘發(fā)射多少個,左邊的上下兩個文本框用于控制生成初始值時的范圍,左邊的'>'字符用于輸入另外一個數(shù)值,比如說下面那個”>“, 發(fā)射器會在這兩個值中間選擇一下隨機值作為上限值,Relative,如果選中,表示圖表中的值是相對值,相對于初始值。否則是個絕對值.
  • Life: 一個粒子的生存時間,
  • Life Offset: 決定粒子在顯示之前已經(jīng)用掉它生命多少值 ,這樣可以實現(xiàn)讓一個粒子在它生命50%時再顯現(xiàn)
  • X Offset and Y Offset: 粒子出現(xiàn)在位置相對中心位置的像素偏移
  • Spawn: 用于產(chǎn)生粒子的發(fā)射器的形狀
  • Spawn Width and Spawn Height: 發(fā)射器的形狀的寬,高
  • Size: 粒子的大小
  • Velocity:
  • Angle:
  • Rotation:
    這個幾值用于控制粒子的運動軌跡:
  • Wind and Gravity: 煙為生存時間內(nèi)在X軸和Y軸上每秒種的像素偏移值
  • Tint: 粒子的顏色,可以在粒子生存期內(nèi)變化任意多個顏色
  • Transparency:粒子的透明度

推薦

  1. 書目
    libGDX游戲開發(fā)入門指南


    image
  2. 網(wǎng)址

  3. 視頻教程
    libGDX開發(fā)教程-奮斗小土豆


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • by AlexQ (email alexq_andr@163.com) 工程托管在此:GitHub What's ...
    AlexueQ閱讀 8,101評論 3 28
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,405評論 4 61
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 《攝影M重門》是個人對攝影藝術(shù)的深度見解,旨在呈現(xiàn)本人對攝影最純真的思考。攝影是很純粹的一件事情,每個人對攝影都應...
    圣鰐紅狼閱讀 325評論 0 1

友情鏈接更多精彩內(nèi)容