new Sprite(texture)
をnew Sprite(manager.get(imgPath,Texture.class))
に置き換えなければならないときは、スプライトの作成を最適化してゲームを開始する前にすべての読み込みを行う必要があります。AssetManagerのテクスチャが黒い四角形を与える
問題は、共通のAssetManagerを使用してすべてのテクスチャを読み込むと、黒い四角形が表示されることです。
テクスチャをロードする必要があるたびに、新しいAssetManager()を使用すると、(このマネージャはすぐにガレージが収集され、作成したテクスチャを処理する時間がないためかもしれませんが)それを使用する点はありません。
下記のsetupBody()メソッドは、スプライトボディラッパーコンストラクタの最後に呼び出されます。眠れぬ私を保つ
protected void setupBody(String path){
BodyEditorLoader loader = new BodyEditorLoader(Gdx.files.internal(path));
BodyDef bDef = new BodyDef();
bDef.type = BodyDef.BodyType.DynamicBody;
bDef.position.set(this.position);
bDef.angle = this.rotation;
body = mWorld.createBody(bDef);
body.setUserData(this);
FixtureDef fix = new FixtureDef();
fix.density = 0.1f;
fix.friction = 0f;
fix.restitution = 0.5f;
fix.filter.categoryBits = this.getCategory();
fix.filter.maskBits = this.getMask();
origin = loader.getOrigin("base"+identifier, 1).cpy();
String imgPath = loader.getImagePath("base"+identifier);
AssetManager manager = new AssetManager();
manager.load(imgPath,Texture.class);
manager.finishLoading();
Texture baseSpriteTexture = manager.get(imgPath,Texture.class);
Texture baseSpriteTexture = new Texture(imgPath);
baseSprite = new Sprite(baseSpriteTexture);
loadHighlightedSprite(loader, identifier);
attachFixture(loader, identifier, fix);
}
コード─アイデアは、単一の非静的マネージャを持つことです:
作業コード(まだ役に立たない)─各スプライトの1つの新しいAssetManagerは
protected void setupBody(String path){
/*no changes before */
String imgPath = loader.getImagePath("base"+identifier);
AssetManager manager = SmallIntestineDemoGame.getAssets();
manager.load(imgPath,Texture.class);
/* no changes after */
}
SmallIntestineDemoGame $ getAssets():
public class SmallIntestineDemoGame extends Game {
public AssetManager assets;
@Override
public void create() {
setScreen(new GameScreen());
}
public static AssetManager getAssets() {
return ((SmallIntestineDemoGame) Gdx.app.getApplicationListener()).assets;
}
public void setupAssets(){
this.assets = new AssetManager();
Texture.setAssetManager(assets);
}
}
デバッグ:
アセットマネージャのデバッグが混乱しました。マネージャーのマップが33で立ち往生資産の値の値の大きさは、私はより多くを追加している場合でも:
が、私は両方のケース─新しいAssetManager()でアプリをテストした(すべてのfinishloadingと続きます必要なもの)を作成します。
drawメソッドでブレークポイントを設定し、sprite.texture.glhandleを除いて2つのスプライトの間にほとんど違いはありませんでした。 同じマネージャを使用してすべてのスプライトテクスチャを作成すると、そのテクスチャglhandleが0に設定され、黒い四角形が説明されます。しかし、ローカルで新しく作成されたアセットマネージャを使用して各スプライトを作成すると、glhandleには適切な値が設定されます(2269)。
何が間違っているかを確認するのに関連するコードが十分に表示されていません。すべてをロードする場所や、スプライトを作成するためのテクスチャ参照を取得する場所など。 – Tenfour04
私はまだすべてをロードしていません。私はちょうど1つのAssetManagerを使ってみました。その瞬間、私は1つずつロードします(setupBody()内にfinishLoading()があります)。 実際にsetupBody()はすべてが完了した場所です。 ゲームは多くのOrganPartインスタンスを作成することから始まります。 OrganPartはスプライト本体ラッパーです。それはbox2d本体とスプライトを持っています。すべてOrganPartコンストラクタの最後で呼び出されるsetupBody()で初期化されます。 – neogineer
私はここにいます。 – neogineer