[英]Is there a clean way to make a libgdx cross-platform controls implementation
[英]LibGDX - Lwjgl canvas in JFrame not working cross-platform
问题:我有一个要在JFrame中运行的GDX桌面应用程序,以便可以生成其他作为其父级的JFrame,这样当我关闭主游戏时,其他窗口也将关闭。
尝试的解决方案:我在JFrame应用程序中运行GDX应用程序,然后获取其画布并将其添加到内容窗格中。
先前的代码,可以很好地工作(跨平台):
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.width = 800; config.height = 600;
new LwjglApplication(new GDXRoot(), config);
}
}
基于JFrame的新方法(到目前为止,我只让它在Windows 8上可以使用。在OS X,Windows 7甚至Windows 10技术预览版上都无法使用):
public class EditModeLauncher extends JFrame {
final LwjglCanvas canvas;
LwjglApplicationConfiguration config;
public EditModeLauncher() {
config = new LwjglApplicationConfiguration();
config.width = 800; config.height = 600;
config.resizable = false;
canvas = new LwjglCanvas(new GDXRoot(), config);
canvas.getCanvas().setSize(800, 600);
getContentPane().setPreferredSize(new Dimension(800,600));
final JFrame test = new TestUI(this);
test.setLocation(800,300);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
Runtime.getRuntime().halt(0); // because of deadlocks with shut down
}
});
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
getContentPane().add(canvas.getCanvas());
setVisible(true);
canvas.getCanvas().requestFocus();
}
});
test.setVisible(true);
}
private class TestUI extends JFrame {
private TestUI(final EditModeLauncher parent) {
// code omitted ...
}
}
public static void main (String[] arg) {
new EditModeLauncher();
}
}
任何想法可能是什么问题?
我没有Windows,但这在Linux Mint上对我有效:
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.width = 800;
config.height = 600;
ApplicationListener appListener = new MyGdxGame();
Canvas canvas = new Canvas();
new LwjglApplication( appListener, config, canvas );
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.add( canvas );
frame.setSize( config.width, config.height );
frame.setLocationRelativeTo( null );
frame.setVisible(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.