LibGDX遊戲引擎-2-圖片繪製(Texture)

來源:互聯網
上載者:User


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)





聯繫我們

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