【问题标题】:Different Textures for same Level Data相同关卡数据的不同纹理
【发布时间】:2016-07-06 03:14:38
【问题描述】:

下面的代码显示了我的 Assets 类,它允许我加载一次纹理并在全局需要时调用它。如果您看到我的包名为 house1.pack,这意味着将有不止一个具有不同艺术风格的房子。我想知道我是否可以通过我当前的代码和微小的调整来实现类似于流行的应用程序 Clash Royale 的设计。我希望在游戏中根据玩家等级加载不同的 .pack 文件。不同的房子有相同的对象,具有相同的 png 文件名和大小,但它们的绘制方式不同。

谢谢,

丹菲特

public class Assets implements Disposable, AssetErrorListener {

public static final String TAG = Assets.class.getName();

public static final Assets instance = new Assets();

private AssetManager assetManager;

public AssetFonts fonts;

public AssetDoor door;
public AssetPlatform platform;
public AssetPlayer player;
public AssetControls controls;

// singleton
private Assets() {
}

public void init(AssetManager assetManager) {
    this.assetManager = assetManager;
    assetManager.setErrorListener(this);
    assetManager.load("TexturePacker/house1.pack", TextureAtlas.class);
    assetManager.finishLoading();

    TextureAtlas atlas = assetManager.get("TexturePacker/house1.pack");

    //create game resource objects
    fonts = new AssetFonts();
    door = new AssetDoor(atlas);
    platform = new AssetPlatform(atlas);
    player = new AssetPlayer(atlas);
    controls = new AssetControls(atlas);
}

@Override
public void error(AssetDescriptor asset, Throwable throwable) {
    Gdx.app.error(TAG, "Couldn't load asset '" + asset.fileName + "'", (Exception) throwable);
}

public class AssetFonts {
...
}

public class AssetPlayer {
    ...
}

public class AssetControls {
    ...
}

public class AssetDoor {
...
}

public class AssetPlatform {
...
}

}

【问题讨论】:

    标签: java libgdx textures assets


    【解决方案1】:

    您可以随时加载和卸载资产。如果您不想在游戏中的其他任何地方使用 house1.pack,您可以:

    assetManager.unload("TexturePacker/house1.pack")
    

    处理你的 house1.pack,然后再次执行 init() 方法中的大部分内容

    assetManager.load("TexturePacker/house2.pack", TextureAtlas.class);
    assetManager.finishLoading();
    //etc
    

    不知道你会如何构建你的代码,但上面的想法是这样的。根据您正在谈论的资产数量(加载时间),您可能需要一个自然过渡点(不一定是完整的加载屏幕)。但是,如果您想即时将纹理从一所房子更改为另一所房子,您可能希望在开始时一次性加载它们并找到一种不同的方法来交换它们。

    【讨论】:

    • 是否可以有一个变量,比如带有文件名的字符串,并根据变量的值在任何给定时间加载我想要的任何纹理?
    • 我想,但你的表现可能会受到影响。根据您拥有的房屋数量和其他资源,您最初可以加载所有房屋 TextureAtlases,您的代码必须确定使用哪一个来应用于您的组件。在动作过程中从文件加载纹理可能会使您的游戏卡顿/看起来很糟糕。最好提前加载纹理,而不仅仅是在需要时加载。由于频繁绑定,每帧使用许多不同的纹理也会影响性能。查看github.com/libgdx/libgdx/wiki/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多