3

バケツで雨滴をキャッチする単純な libgdx ゲームを作成する素晴らしいチュートリアルを確認しました画像の使い方をもっと知りたくて、雨粒を赤ちゃんに置き換えてみました。

かわいい赤ちゃん!

baby.png を読み込もうとすると、次のエラーが表示されます。

com.badlogic.gdx.utils.GdxRuntimeException: Texture width and height must be 
powers of two: 60x83

好きなサイズの画像を読み込むにはどうすればよいですか?

4

3 に答える 3

5

画像書き込みをロードする前に..

Texture.setEnforcePotImages(false); 

これは、アプリケーション リスナの create 関数で行うことができます。テクスチャ アトラスを作成したくない場合は、これが最も簡単な方法です。

于 2013-08-30T05:20:58.800 に答える
0

少し読んだだけで、TextureAtlas と TexturePackerの説明にたどり着きました。これは、小さな画像の束を 1 つの大きな画像に結合します。これにより、読み込みと描画が高速になります。Vikalp が言うように、パフォーマンスの違いを気にしない場合は、画像サイズに関するルールを無効にすることもできます。

Texture.setEnforcePotImages(false); 

ゲーム アトラスの詳細については、Udacity の HTML5 ゲーム クラスを参照してください。

独自のアトラスを作成するには、TexturePacker GUIを使用して開始できますが、最終的にはコマンドライン プロジェクトを作成して、生の画像を自動的にパックすることをお勧めします。

バケツと雨滴のチュートリアルからサンプル コードを取得し、TextureAtlas の使用に切り替えるサンプル プロジェクトを投稿しました。次に、アトラスを読み込み、アトラスから画像を読み込みます。

atlas = new TextureAtlas(Gdx.files.internal("atlas/plank.pack"));
dropImage = atlas.findRegion("images/baby");
bucketImage = atlas.findRegion("images/bucket");

私が見つけた 1 つのバグは、画像が HTML プロジェクトに読み込まれないことです。すべての画像をサブフォルダーに入れることで、バグを回避できることがわかりました。

TexturePacker と、後で追加するユニット テストを保持する新しいプロジェクトを作成しました。テクスチャ パッカーは次のようになります。

package com.github.donkirkby.plank;

import com.badlogic.gdx.tools.imagepacker.TexturePacker2;

public class PlankPacker {
    public static void main (String[] args) throws Exception {
        TexturePacker2.process(
                "raw-assets",  // source folder
                "../plank-game-android/assets/atlas", // destination
                "plank.pack"); // data file
    }
}
于 2013-08-30T05:13:25.620 に答える
0

画像 (左上隅) を 128x128 テクスチャに配置することもできます。Afaik は、2 の累乗でないテクスチャを使用すると遅くなり、より多くの VRAM を消費します。GPU のアーキテクチャと OpenGL でのテクスチャ バインディングの処理が「遅い」ため、同時に使用される画像を 1 つの大きな pow-two テクスチャに配置し、このテクスチャの領域として取得して速度を上げることを常にお勧めします。アプリ。テクスチャの使用と取得は次のようになります。

Texture texture = Gdx.files.internal("data/yourtexture.png");
TextureRegion region = new TextureRegion(texture, 0, 0, 60, 83);

このようなものを描くために:

batch.draw(region, positionX, positionY);
于 2013-08-30T08:20:11.897 に答える