我到这一点时,我不得不更换所有new Sprite(texture)
与new Sprite(manager.get(imgPath,Texture.class))
以优化精灵创建和启动游戏之前做的所有负载。AssetManager纹理给人黑色矩形
问题是,当我使用公共的AssetManager加载所有纹理时,我会看到黑色的矩形。
但是,每次我需要加载纹理时都使用新的AssetManager()可以正常工作(也许是因为此管理器很快被garbadge收集,没有时间处理它创建的纹理?),但那样没有意义使用它。
下setupBody()方法被调用我的精灵体包装器构造的端部。
运行的代码(但没用)─为每个精灵一个新AssetManager:
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);
}
代码让我无眠─这个想法是有一个单一的非静态经理:
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之外,两个精灵几乎没有区别! 当使用相同的管理器创建所有精灵纹理时,它们的纹理glhandle设置为0,这解释了黑色矩形。但是,当使用本地新创建的资产管理器创建每个精灵时,这个精确的句柄有一些适当的值(2269)。
您尚未显示足够的相关代码以查看出了什么问题。像加载所有内容的位置以及获取纹理引用以制作精灵的位置。 – Tenfour04
我还没有加载任何东西。我只是尝试使用一个AssetManager。目前我一个接一个加载(你会在setupBody()内看到finishLoading())。实际上,setupBody()是一切都完成的地方。 游戏通过创建大量OrganPart实例开始。 OrganPart是精灵体包装。它有一个box2d主体和一个精灵。所有这些都是在OrganPart构造函数结尾处调用的setupBody()处初始化的。 – neogineer
如果您需要更多信息,我在这里。 – neogineer