我已经试图解决这个问题或者现在找到另一种方式约3天,但我不能让它发挥作用...... 基本我将游戏小程序转换为应用程序,但我无法让游戏循环工作。在NetBeans中,我创建了一个Window,但即使我将其设置为Visible也不会显示。如果您有关于如何制作简单游戏循环的教程,那就太棒了。我很绝望,请帮助我!
这是我的主要课程的代码
package MainClass;
import javax.swing.*;
public class MainClass implements Runnable{
Painter panel = new Painter();
JavaPowderToy Screen = new JavaPowderToy();
Thread t = new Thread();
public void run()
{
Initialize();
while(true)
{
try
{
panel.Paint();
Thread.sleep(15);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
void MainClass()
{
t.start();
}
public static void main(String[] args) {
MainClass Java = new MainClass();
}
private void Initialize()
{
panel.InitializePainting();
new Window().setVisible(true);
}
}
这是我的画家类:
package thejavapowdertoy;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class Painter extends JPanel implements KeyListener{
BufferedImage buffer;
public Painter()
{
setIgnoreRepaint(true);
addKeyListener(this);
setFocusable(true);
}
public void InitializePainting()
{
}
public void Paint()
{
Graphics2D b = buffer.createGraphics();
Graphics2D g = (Graphics2D)this.getGraphics();
b.setColor(Color.red);
b.fillRect(50, 50, 50, 50);
b.dispose();
g.drawImage(buffer, 0, 0, this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyPressed(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
由于
答案 0 :(得分:1)
您的MainClass
实现Runnable
因此我假设您希望它由线程运行。但是,线程t
并不知道。
您需要将MainClass
实例传递给线程的构造函数:new Thread(this);
此外,您的Painter
面板未连接到您创建的窗口,因此无法显示。尝试创建JFrame
或JWindow
并将画家放入其中。
答案 1 :(得分:0)
void MainClass()
{
t.start();
}
这不是构造函数,而是方法!这是因为线程未启动。删除void
还要看其他答案。基本上你有两个线程。一个MainClass
本身,然后是t
内的MainClass
。