LibGDX遊戲引擎-2-圖片繪製
本系列博文均來自 新浪部落格 - 奮鬥小馬鈴薯丶 的文章,在其基礎上加上了我自己的理解和修改,在此說明!
方法種類
1 使用Texture作為圖片容器,在SpriteBatch上繪製
2 使用TextureRegion截取texture,在SpriteBatch上繪製
3 使用Sprite精靈,設定textureRegion,傳入SpriteBatch,進行繪製(例子採用本種類)
------------------------------------------------------------------------------
例子代碼:
package com.qsuron;
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;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
public class MyDemo implements ApplicationListener{
private SpriteBatch batch;
private Texture texture;
private TextureRegion region;
private Sprite sprite;
@Override
public void create() {
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("data/open.png"));
region = new TextureRegion(texture,420,120,310,360);//自 (420,120) 截取 310*360
sprite = new Sprite();
sprite.setRegion(region);
sprite.setOrigin(0,0);//旋轉中心
sprite.setRotation(20);//旋轉角度
sprite.flip(true, false);//水平翻轉
sprite.setSize(200,300);//繪製大小
sprite.setPosition(100,100);//繪製位置
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.begin();
sprite.draw(batch);
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
Texture 類 (圖片容器)
------------------------------------------------------------------------------
API定義:圖片從原始格式解碼並上傳到GPU就被稱為紋理。這裡我也不是很清楚,求大神解答。
------------------------------------------------------------------------------
功能用途:其實就是承裝擷取到的目的圖片的容器。其實你就直接把Texture當成圖片,這樣好理解。
------------------------------------------------------------------------------
Gdx.files
它是libgdx的檔案模組,主要提供以下5大功能:讀取檔案,寫入檔案、
複製檔案、移動檔案、列出檔案和目錄。其中擷取檔案有許多種辦法:
1.Classpath: 路徑相對於classpath,檔案通常為唯讀。
2.Internal: 內部檔案路徑相對於程式根目錄或者android 的assets檔案夾。
3.External: 外部檔案路徑是相對於SD卡根目錄
4.Absolute:assets檔案夾本身就是儲存資源的檔案夾,而且相比resource檔案夾,它其中的資源
不會產生R中的ID,用來放圖片很是合適。
所以用Gdx.files.internal("data/Potato.jpg") 擷取圖片,
然後調用batch.draw(texture,x,y,height,width) 繪製圖形,這裡的(x,y)是繪圖的起點座標,
(height,width)繪製圖形的大小,libgdx使用的是笛卡爾座標系,以左下角為原點。
繪製方向是由下向上,由左到右。
為了方便大家理解我就這裡打一個比方,比如你盛一碗粥,從鍋裡盛出來需要用到湯勺,
這個湯勺就相當於Texture,他們都是用來擷取東西的一個容器,是中間者。
使用方法:
----------------------------------------------------------------
private Texture texture;
texture = new Texture(Gdx.files.internal("data/libgdx.png"));
SpriteBatch類 (畫筆)
------------------------------------------------------------------------------
API定義:SpriteBatch用於繪製二維矩形參考紋理(地區)。
SpriteBatch類可用於批量繪圖命令和最佳化處理的GPU。
-----------------------------------------------------------------------------
功能用途:SpriteBatch可以把許多相同紋理一起描述並一起送入GPU,
同時賦予紋理和座標以便每個圖形的繪製。其實我的理解就是SpriteBatch就是一個畫筆,
沒有畫筆是畫不了圖片的。
------------------------------------------------------------------------------
用法:首先聲明類名,執行個體化、在繪製的的時候分三步,必須先調用begin()方法,
然後再調用draw()方法,最後畫完了調用end()結束,這個順序是繪製的固定格式,也是應該背下來的。
------------------------------------------------------------------------------
使用方法:
private SpriteBatch batch;
batch = new SpriteBatch();
public void render() {
batch.begin();
sprite.draw(batch);
batch.end();
}
-----------------------------------------------------------------
擷取螢幕高寬度
Gdx.graphics.getWidth();
Gdx.graphics.getHeight();
TextureRegion類
截取圖片
new TextureRegion(texture,100,100,-48,48);
以(100,100)為起點,向左48,向上48截取texture
轉載請註明出處:blog.csdn.net/qsuron 小樹部落格(qsuron)