0

私のプログラムは一連の画像をパックし、それらをaste.pngとaste.atlasに出力します。パッキングのコードは次のとおりです。

public void pack(){
    System.out.println("Packing should not be ordinarily called!  If you did not have explicit intentions of Packing, please check ImageAtlas constructor.");
    Settings settings = new Settings();
    settings.maxWidth = 512;
    settings.maxHeight = 512;
    TexturePacker2.process(settings, "E:/Files/Eclipse Projects/StarFighters/StarFighters-android/assets/sprites/" + name, 
            "E:/Files/Eclipse Projects/StarFighters/StarFighters-android/assets/sprites/", name.substring(0,4));
}

プログラムを実行するたびにパックする必要はないので、絶対ファイルパスを使用できます(デスクトップを実行していて新しいイメージを追加した場合にのみパックします)が、絶対ファイルパスのみを使用しましたそれ以外の方法がわからないからです。私はアンドロイドアセットフォルダーを使用しています。(デスクトップはAndroidアセットフォルダーにリンクされています)デスクトップバージョンから実行しているため、Gdx.files.internalが処理するアセットパスを使用する必要があるときに、デスクトップパスに移動しようとしています。(この問題は私のプログラムの機能に不可欠ではありません)

画像をパックしたら、次のようにします。

atlas = new TextureAtlas(Gdx.files.internal("sprites/aste.atlas"));
public Texture getTex(String imgname){
    return atlas.findRegion(imgname).getTexture();
}

getTex()を試してみると、imgnameとして「sma_a2」を渡します。

私のassets/sprites / asteroidsディレクトリには次の画像があります:big_a1.png big_a2.png med_a1.png med_a2.pngsma_a1.pngsma_a2.pngこれらはすべてaste.pngとaste.atlasに正常にパックされました

私の問題は、受け取った画像でどのfnameを渡しても、aste.png全体であるということです。

また、画像から始めて、画像を再度取得するためだけにパックするので、なぜ画像だけでなくパックを使用するのかについても興味がありました。



4

2 に答える 2

4

から戻っgetTexture()てきた人を呼ばないでください。TextureRegionfindRegion

アトラスの要点は、アトラスで検索するすべてのテクスチャが「同じ」テクスチャにあるが、そのテクスチャ内の異なる領域にあるということです。このようにして、OpenGLで1つの大きなテクスチャを「バインド」し(これは多少高価です)、テクスチャから多くの異なる部分をレンダリングできます。

をとるLibgdxの他のAPIのほとんどは、Textureでも機能するはずTextureRegionです。

于 2013-03-21T00:38:05.150 に答える
0

**私の解決策:**

「getTexture」を使用すると、画像全体が返され、テクスチャ領域には基本的に、個々の画像であるパッケージ化された画像の再開を表す長方形が格納されます。つまり、基本的にTextureRegionsの描画は、Texturesの描画とそれほど変わらないので、TextureRegionを描画しただけです。私の場合、スーパークラスに追加して、サブクラスでTexturesとTextureRegionsをサポートするようにしました。サブクラスは、ブール値を使用してTexturesまたはTextureRegionsのどちらを使用するかを指定し、それぞれに対して異なるSpriteBatch.draw()メソッドが呼び出されました。

それらを使用する理由については、上記のPTに次のように投稿されています。

アトラスの要点は、アトラスで検索するすべてのテクスチャが「同じ」テクスチャにあるが、そのテクスチャ内の異なる領域にあるということです。このようにして、OpenGLで1つの大きなテクスチャを「バインド」し(これは多少高価です)、テクスチャから多くの異なる部分をレンダリングできます。

Textureを使用するLibgdxの他のAPIのほとんどは、TextureRegionでも機能するはずです。

だから私にはそれがより効率的/より速いように聞こえます。

于 2013-03-21T01:06:29.657 に答える