




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、android游戲開發(fā)框架libgdx的使用(二-圖形繪制首先了解一下何為texture。按照英文解釋來理解:一個圖片從原始格式解碼并上傳到GPU就被稱為紋理。(說實話我不是很清楚這個的定義哈,求指點為了繪制texture,常常使用幾何來描述,通過幾何對應(yīng)的頂點來描述紋理。比如要描述一個矩形,可以通過描述每個頂點來描述矩形。要繪圖時,首先要綁定紋理,然后傳遞一個幾何描述給OpenGL進(jìn)行繪制。而繪圖的大小和位置由幾何描述和OpenGL的viewport的設(shè)置共同決定。當(dāng)然大部分的游戲都會讓viewport的大小和屏幕一致。這就意味使用像素更容易讓紋理繪制在合適的大小和位置。繪制一個矩形的幾何圖
2、形是非常常見的,同樣讓同一個紋理在不同位置以不同大小位置也是非常常見的,比如漫天的彈幕。但是每次都傳遞每個形狀到GPU進(jìn)行繪制的效率是較低的。所以許多相同紋理可以一起描述并一起送入GPU,這就是SpriteBatch類所要做的。SpriteBatch被賦予了紋理和坐標(biāo)以便每個圖形的繪制。它(SpriteBatch匯集了很多圖形而沒有直接提交給GPU。如果它被賦予的紋理不同于原有的,它將保持原有的圖形,并獲取新的圖形。上一篇文章其實就使用了SpriteBatch,但是沒有繪制圖形,現(xiàn)在我們來試試?yán)L制。先找張圖片來,分辨率必須是2的次方(如32*32,256*512。我截取了我的桌面的一部分,分辨
3、率調(diào)成512*512。 拷貝到assets文件夾中,圖片文件最好都是放在這個里面哈。 然后修改代碼?private Texture texture;實例化texture,texture=new Texture(Gernal(image1.jpg;然后來說一下為什么要將圖片放在assets文件夾中。Gdx.files是libgdx的文件模塊,主要提供以下5大功能。讀取文件寫文件復(fù)制文件移動文件列出文件和目錄而獲取操作文件的FileHandle有4種方法。1.Classpath路徑相對于classpath,文件通常為只讀。2.Internal內(nèi)部文件路徑相對于程序根目錄或者
4、android的assets文件夾。3.External外部文件路徑是相對于SD卡根目錄4.Absoluteassets文件夾本身就是存儲資源的文件夾,而且相比resource文件夾,它其中的資源不會生成R中的ID,用來放圖片很是合適。所以用Gernal(image1.jpg獲取圖片,然后調(diào)用batch.draw(texture,20,10;繪制圖形,20,10是坐標(biāo),笛卡爾座標(biāo),以左下角為原點。完整代碼:?package blogs.htynkn;import com.badlogic.gdx.ApplicationListener;import com.badlog
5、ic.gdx.Gdx;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g2d.SpriteBatch;publicclass FirstGame implements ApplicationListener/繪圖用的SpriteBatchprivate SpriteBatch batch;/紋理private Texture texture;Overridepublicvoid create(batch=new Spri
6、teBatch(;/實例化texture=new Texture(Gernal(image1.jpg; Overridepublicvoid dispose(/TODO Auto-generated method stubOverridepublicvoid pause(/TODO Auto-generated method stubOverridepublicvoid render(Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT;/清屏batch.begin(;batch.draw(texture,20,10;batch.end(;Ov
7、erridepublicvoid resize(int width,int height /TODO Auto-generated method stubOverridepublicvoid resume(/TODO Auto-generated method stub效果: 可以看到圖片不能完整顯示,而實際操作中我們也經(jīng)常使用圖片的一部分,或者將多個圖片資源集合在一個圖片文件中。而要顯示圖片的一部分就可以使用TextureRegion類了。最常用的方法是draw(TextureRegion region,float x,float y,float width,float height指定初始
8、點和長寬。修改代碼:?package blogs.htynkn;import com.badlogic.gdx.ApplicationListener;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g2d.SpriteBatch;import com.badlogic.gdx.graphics.g2d.TextureRegion;publicclass First
9、Game implements ApplicationListener /繪圖用的SpriteBatchprivate SpriteBatch batch;/紋理private Texture texture;/區(qū)域private TextureRegion region;Overridepublicvoid create(batch=new SpriteBatch(;/實例化texture=new Texture(Gernal(image1.jpg;region=new TextureRegion(texture,30,80,200,200;Overridepubli
10、cvoid dispose(/TODO Auto-generated method stubOverridepublicvoid pause(/TODO Auto-generated method stubOverridepublicvoid render(Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT;/清屏batch.begin(;batch.draw(region,0,0;batch.end(;Overridepublicvoid resize(int width,int height /TODO Auto-generated method stubOve
11、rridepublicvoid resume(/TODO Auto-generated method stub效果: 也許你覺得TextureRegion不夠強大,沒有關(guān)系,還可以使用Sprite。Sprite不光包含TextureRegion的功能,還可以指定位置和顏色。關(guān)鍵代碼:?sprite=new Sprite(texture,80,80,400,300;sprite.setPosition(10,10;/位置sprite.setRotation(15;稍微想一下前幾個例子就可以發(fā)現(xiàn),其實Sprite的功能就是以上的集合。但是Sprite更方便,它用一個對象描述了一切。完整代碼如下:?
12、package blogs.htynkn;import com.badlogic.gdx.ApplicationListener;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g2d.Sprite;import com.badlogic.gdx.graphics.g2d.SpriteBatch;publicclass FirstGame implements Ap
13、plicationListener/繪圖用的SpriteBatchprivate SpriteBatch batch;/紋理private Texture texture;/精靈private Sprite sprite;Overridepublicvoid create(batch=new SpriteBatch(;/實例化texture=new Texture(Gernal(image1.jpg;sprite=new Sprite(texture,80,80,400,300;sprite.setPosition(10,10;/位置sprite.setRotation
14、(15;/旋轉(zhuǎn)Overridepublicvoid dispose(/TODO Auto-generated method stubOverridepublicvoid pause(/TODO Auto-generated method stubOverridepublicvoid render(Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT;/清屏batch.begin(;sprite.draw(batch;batch.end(;Overridepublicvoid resize(int width,int height/TODO Auto-generated
15、 method stubOverridepublicvoid resume(/TODO Auto-generated method stub效果: 同時可以通過sprite的setColor方法為圖形著色。?setColor(float r,float g,float b,float a 其中顏色的表述都是介于0,1之間的數(shù)。 繪制的內(nèi)容基本就這么多,下一篇是關(guān)于關(guān)于2D 場景的。 寫在最后: 1.關(guān)于混合問題,默認(rèn)是開啟混合了的。這意味著圖形繪制完成時半透明的部分已經(jīng)被混合了。當(dāng)混 合被關(guān)閉是任何已經(jīng)在場景上的東西都會被紋理代替,這適合繪制大背景。 ? batch.disableBlending(; backgroundSprite.draw(batch; batch.enableBlending(; 2.關(guān)于性能優(yōu)化 SpriteBatch 有個構(gòu)造函數(shù)可以指定最大緩沖數(shù)目。如果數(shù)值過低會造成額外的 GPU 調(diào)用;過高的話 將占用過多的內(nèi)存。 在 SpriteBatch 有 個 字 段 為 maxSpritesInBatch , 可 以 先 設(shè) 置 一 個 很 高 的 緩
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容美發(fā)店員工入股2025年度全新合作框架合同匯編
- 2025年度高端服裝店品牌代理權(quán)轉(zhuǎn)讓合同范本
- 砌體抹灰勞務(wù)分包合同書
- 工業(yè)生產(chǎn)過程質(zhì)量控制要點
- 農(nóng)業(yè)養(yǎng)殖業(yè)智能化養(yǎng)殖管理系統(tǒng)建設(shè)
- 新能源車充電樁建設(shè)合同
- 汽車工程車輛維護(hù)與故障診斷技能考試試題集
- 中學(xué)生物多樣性的感悟
- 城市商業(yè)管理系統(tǒng)升級服務(wù)協(xié)議
- 給排水安裝工程勞務(wù)合同
- 教科版科學(xué)五年級下冊《熱》單元教材解讀分析
- 安脈學(xué)生信息化管理系統(tǒng)(課堂PPT)
- 中小學(xué)基本辦學(xué)條件標(biāo)準(zhǔn)(建設(shè)用地校舍建設(shè)標(biāo)準(zhǔn))
- 化學(xué)實驗室安全培訓(xùn)課件課件
- 渤海灣盆地構(gòu)造演化及其油氣意義
- word公章模板
- 中西醫(yī)結(jié)合腫瘤學(xué)試卷(含答案)
- 開學(xué)第一課我們開學(xué)啦主題班會PPT課件(帶內(nèi)容)
- 體育訓(xùn)練隊隊規(guī)
- 電梯工程開工報告(直梯)(共1頁)
- ANSI B165《鋼制管法蘭及法蘭管件》
評論
0/150
提交評論