doo*_*oxe 11 java swing libgdx
我正在为我的游戏创建一个关卡编辑器,我在使用LwjglCanvas和JFrame时遇到了问题.我使用JFrame(而不是LwjglFrame)来保持引擎和关卡编辑器尽可能独立.我有两个JAR:WorldEditor.jar和GameEngine.jar.在WorldEditor中,我有一个名为"test"的按钮,假设加载GameEngine.jar(如果尚未加载)并启动(如果已加载则将其重新启动)到应用程序主框架中.实际上,我所做的是将WorldEditor游戏容器(例如JFrame中的JPanel)Gdx.app.postRunnable注入游戏应用程序,并用于将lwjglcanvas添加到注入的游戏容器中:
世界编辑方面:
JPanel _gameContainer = new JPanel(); // is inside a JFrame
MyGame game = loadGame(_gameContainer); // load the GameEngine JAR, and retrive the game
Run Code Online (Sandbox Code Playgroud)
GameEngine方面:
// container is the _gamecontainer of above
public void createGame(final Container gameContainer)
{
LwjglCanvas canvas = new LwjglCanvas(myapp, myconfig);
Gdx.app.postRunnable(new Runnable()
{
public void run()
{
gameContainer.add(canvas.getCanvas());
}
});
}
Run Code Online (Sandbox Code Playgroud)
事实是,postRunnable从来没有被调用(由于应用程序之前没有可见,我错了吗?)我已经尝试了很长时间但没有结果......
有人知道我可以做些什么来解决这个问题吗?或者至少另一种(让我们说更容易)的方法来做到这一点?
小智 11
我是这样做的:
public class EditorApp extends JFrame {
public EditorApp() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Container container = getContentPane();
container.setLayout(new BorderLayout());
LwjglAWTCanvas canvas = new LwjglAWTCanvas(new MyGame(), true);
container.add(canvas.getCanvas(), BorderLayout.CENTER);
pack();
setVisible(true);
setSize(800, 600);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new EditorApp();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的游戏类也有一些API,可以让我的编辑器轻松使用.
你必须使用SwingUtilites.invokelater因为postRunnable发布到没有运行的游戏循环.我会尝试从MyGame获取一个Component并添加它.如果您返回一个Component,则表示您没有dep.到了LwjglCanvas.它不是那么好,因为现在MyGame界面有一个dep.摆动,但值得一试,看看它是否解决了你的问题.
| 归档时间: |
|
| 查看次数: |
5923 次 |
| 最近记录: |