簡體   English   中英

來自TextureAtlas的LibGDX縮放和渲染精靈

[英]LibGDX Scaling and Rendering Sprites from TextureAtlas

我目前在繪制和縮放精靈時遇到問題。

我正在從紋理地圖集加載我的資源,我使用LibGDX紋理打包器gui工具沒有問題。 我的紋理圖集圖像當前看起來像這樣。 包包

這些圖像應該是按鈕,但是如您所見,圖像非常小,因此,在加載精靈時,它們會加載一個34x16像素的精靈。 當我在1920x1080的畫布上渲染這些按鈕時,它們太小了。 我使用sprite.scale(int scale)縮放精靈,但是縮放它們時,它們看起來模糊。 我想發生的是,當它們縮放時,每個像素都按比例縮放,從而保持按鈕上的像素化​​效果,而不是從很小的紋理中重新調整大小的圖像。 我目前使用sprite.render(SpriteBatch batch)渲染精靈。 使用atlas.createSprite(String name)加載精靈之后,這是渲染精靈的正確方法嗎? 我不熟悉使用精靈,並從紋理圖集加載紋理,所以我想知道這是否是正確的處理方式。

另外,初始化游戲時,我會從TextureAtlas加載許多不同的Sprite對象。 每個精靈都有一個代表游戲對象的紋理,但是據我了解,您使用sprite.render(SpriteBatch batch)渲染了一個精靈,因此我只能使用從TextureAtlas加載的一個精靈來TextureAtlas一個游戲對象,因為我還必須設置精靈的比例和位置,因為它代表游戲對象。 我習慣於加載Texture ,然后使用batch.render()在給定位置渲染此紋理,但是我看不到如果使用Sprite怎么可能。 即使我使用batch.render(Sprite, x, y) ,我也無法正確縮放精靈,因為如前所述,我想在維持像素化效果的同時縮放精靈,即使如此,使用Sprite.scale()方法,這將縮放Sprite對象的整體大小,從而使多個游戲對象無法多次使用Sprite的紋理。

任何建議將不勝感激。

我當前用於渲染/加載精靈的代碼如下:

從TextureAtlas加載:

public static TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("data/texture/pack/output/pack.pack"));

public static Sprite sprite = atlas.createSprite("buttonUp");
sprite.setScale(10);

渲染精靈:GdxGame.WIDTH / HEIGHT為1920x1080。 盡管“桌面”窗口已從該尺寸縮小。 因此,所有內容都呈現為屏幕為1920x1080。

    batch = new SpriteBatch();
    camera = new OrthographicCamera(GdxGame.WIDTH, GdxGame.HEIGHT);
    camera.position.set(GdxGame.WIDTH/2, GdxGame.HEIGHT/2, 0);
    camera.setToOrtho(false, GdxGame.WIDTH, GdxGame.HEIGHT);

public void render(float delta){
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    batch.setProjectionMatrix(camera.combined);
    batch.begin();

    camera.update();
    sprite.draw(batch);

    batch.end();
}

經過進一步研究,我發現我可以使用Sprite.set(Sprite sprite)使Sprite x成為Sprite y的副本,從而使每個Sprite多次渲染。 但是,這不能解決縮放子圖形的問題。 我必須進一步強調,在渲染縮放的精靈時,縮放不是按像素進行的,這意味着它是模糊的。 但是,當渲染TextureRegion ,例如: batch.draw(TextureRegion, x, y, width, height)如果寬度和高度大於原始紋理的寬度和高度,它將縮放每個像素,而不是將整個對象模糊化為嘗試使其看起來更好。 以下是我正在談論的模糊的圖像:

在此處輸入圖片說明

請注意,即使原始圖像很小且已像素化,此精靈如何縮放為模糊。

您在代碼或texturepacker中使用哪些TextureFilter設置? 嘗試使用“最近”過濾器。 如果將其設置為“線性”或類似,它將始終獲取4個紋理像素(紋素)並對其進行插值以獲取要繪制的像素的顏色。

這可能有助於消除模糊,但是我不確定它是否會產生您想要的8位外觀...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM