使用libgdx已经有一段时间了.最近经常有朋友问我如何在libgdx中调用android的内容.
正常来说libgdx是跨平台的,gdx中的代码是不允许有任何其他平台的相关代码,但实际使用时经常会有调用其他平台内容的需求.其实这个也很简单,利用java中的事件机制很容易实现,下面贴出相关代码:
1:BsuEvent是一个虚类,用来实现消息通知及响应消息后执行的一些操作.
public abstract class BsuEvent { public abstract void notify(Object obj,String msg); }
2:libgdx主类代码,构造函数中带入了一个BsuEvent对象,这个对象赋给bevent,以后想什么时候调用android中的内容,执行bevent的notify方法并带入执行消息字符串就可以了。
public class BsuGame extends Game { public BsuEvent bevent = null; //用于通知desktop或android等其他平台执行某些操作 public BsuGame(BsuEvent be){ bevent = be; bevent.notify(this, "test"); } @Override public void create() { } @Override public void dispose() { super.dispose(); } }3:这里是android客户端的主类我们可以看到在BsuGame构造函数中实现了一个匿名内部类BsuEvent实例,并覆盖了它的虚方法notify.notify中就是要调用的android内容,由于是在android环境下,所以我们可以随心所欲的调用android内容Toast,来实现显示一条浮动消息的功能.
public class MainActivity extends AndroidApplication { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); cfg.useGL20 = true; initialize(new BsuGame(new BsuEvent(){ @Override public void notify(Object obj, String msg) { Toast.makeText(MainActivity.this, "libgdx消息通知", Toast.LENGTH_SHORT).show(); } }), cfg); } }