自从我开始阅读有关如何管理libGDX中的资产以来已经过了3天。我在文档中读到的第一件事是永远不会使AssetManager或任何纹理静态,但我到目前为止所见的所有示例都将AssetManager作为静态。 有人可以共享一个没有被用作Singleton的AssetManager项目/代码吗? 或者告诉我该怎么做。
答案 0 :(得分:1)
我曾在$j(function() {
$j(document).on('change', 'select#email_select', function(event) {
$j.ajax({
type: "POST",
url: "../profile/ajax/email_info.php",
data: {#select_email val(),
},
cache: false,
alert('error');
});
});
});
类实例中创建$("#user_comment_show").append("<li><a id='remove_link' href='<?php echo base_url()?>/my_site/remove_user_comment/'+data.user_email_address+'/'+data.user_text+'>Your Link Name</a></li>")
。然后,因为我正在使用Screens我将public sealed class UserDomainConfig: ConfigParser {
public UserDomainConfig(string configFilePath) : base(configFilePath) { }
public Domain GetConfig(string key) => GetConfig<Domain>(key);
public override bool LoadConfigs() {
return base.LoadConfigs();
}
public UserDomainConfig SetConfig(string key, Domain value) {
base.SetConfig(key, value);
return this;
}
}
public abstract class ConfigParser: IConfig {
/* Snip */
/// <summary>
/// Gets the config.
/// </summary>
/// <returns>The config.</returns>
/// <param name="key">Key.</param>
/// <typeparam name="T">The 1st type parameter.</typeparam>
public virtual T GetConfig<T>(string key) {
object output = null;
try {
if (!configs.TryGetValue(key, out output))
return default(T);
//return (T)output;
//return output as T;
// This is where the exception is occurring.
// I've tried multiple solutions to try to remedy this issue.
return (T)Convert.ChangeType(output, typeof(T));
} catch (InvalidCastException ex) {
logger.Error($"Failed to cast config { key }!");
}
return default(T);
}
/// <summary>
/// Sets the config.
/// </summary>
/// <returns>The config.</returns>
/// <param name="key">Key.</param>
/// <param name="value">Value.</param>
/// <typeparam name="T">The 1st type parameter.</typeparam>
public virtual IConfig SetConfig<T>(string key, T value) {
if (KeyExists(key))
configs.Remove(key);
configs.Add(key, value);
return this;
}
实例设置为构造函数,我可以通过它访问assetManager
AssetManager
不知道这是不是最好的方式。
如果您不想将Main extends Game
实例传递给屏幕,可以使用
main
获取当前的 public class MyScreen implements Screen {
protected Main game;
public MyScreen (Main game)
{
this.game = game;
game.assetManager.load(...
}
类对象
答案 1 :(得分:1)
我这样做的方法是在我的第一个屏幕(这是一个加载屏幕)中简单地创建一个AssetManager实例,然后通过它们的构造函数在每个屏幕中传递它。
public class LoadingScreen implements Screen {
private AssetManager assetManager ;
}
public LoadingScreen(){
assetManager = new AssetManager ();
}
//when going to the next screen, when the assetManager finishes loading:
((Game)Gdx.app.getApplicationListener()).setScreen(new NextScreen(assetManager,...));
附录,以及你的NextScreen类:
private AssetManager assetManager;
public NextScreen (AssetManager assetManager){
this.assetManager = assetManager;
}