gpt4 book ai didi

java - 尝试制作一款基于 Ascii 的游戏; JFrame不显示

转载 作者:行者123 更新时间:2023-12-01 23:44:27 31 4
gpt4 key购买 nike

我已经在这个问题上坚持了很长一段时间了。

所以我正在使用某人的 AsciiPanel 库。这是一个库,当 AsciiPanel 添加到 JFrame 时,将创建带有 Ascii 图形的 80x24 旧式 Windows 命令行(用于 Roguelike 游戏等)。

我正在尝试将 AsciiPanel 添加到 JFrame。

问题是,我认为我没有在任何地方创建 JFrame。我不想将其添加到任何奇怪的地方并使代码在以后变得不可读/非常规,所以我决定在这里询问社区。这是代码:

package com.base.engine;


import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import com.base.game.Game;
import asciiPanel.AsciiPanel;


public class Main extends JFrame{

/**
*
*/
private static final long serialVersionUID = 1L;
private static AsciiPanel asciiPanel;
private static Game game;
public boolean gameRunning = true;

public Main() {
initDisplay();
initGame();
gameLoop();
}

private void initDisplay() {
asciiPanel = new AsciiPanel();
add(asciiPanel);
pack();
}
private static void initGame() {
// TODO Auto-generated method stub
game = new Game();
}
private void gameLoop() {
while(gameRunning = true) {
game.getInput();
game.update();
game.redraw();
}
}

void windowClosing(WindowEvent e) {
gameRunning = false;
}

public static void main(String[] args) {
Main game = new Main();
game.setDefaultCloseOperation(EXIT_ON_CLOSE);
game.setVisible(true);
}
}

我还认为 gameLoop() 可能是搞砸的原因,因为我认为在我添加它之前它工作得很好。

感谢您提供任何信息。

最佳答案

你是对的,你的游戏循环阻塞了事件调度线程,阻止它处理重绘请求或传入事件。

根据您的需要,您最好使用 javax.swing.TimerSwingWorkerThread

看看Concurrency in Swing了解更多详情

需要记住的是,Swing 是单线程框架,这意味着所有 UI 组件的所有创建和更新都应该发生在 EDT 的上下文中。

同样,任何阻止 EDT 的操作都会阻止它更新 UI(或处理事件)

关于java - 尝试制作一款基于 Ascii 的游戏; JFrame不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373915/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com