gpt4 book ai didi

java - 为什么我的屏幕上什么也没有绘制?

转载 作者:行者123 更新时间:2023-12-01 14:13:12 28 4
gpt4 key购买 nike

我正在使用 java 中的 swing 开发 2D 平台游戏,目前正在开发游戏的框架。我正在测试 reapaint() 和绘制函数,但它们不起作用,我一无所知。这是我的代码:

窗口.java

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Window extends JFrame {

public Window() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(1000, 1000);
this.setVisible(true);
this.setTitle("Infiltrator");
this.setLocationRelativeTo(null);
this.setContentPane(new Framework());
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{ new Window(); }
}
);

}





}

面板.java

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public abstract class Panel extends JPanel {

public Panel() {

this.setDoubleBuffered(true);
this.setFocusable(true);

/*
*
if(false)
{
BufferedImage blankCursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(blankCursorImg, new Point(0, 0), null);
this.setCursor(blankCursor);
}
*
*/
}

public static void Draw(Graphics2D g2d) {

}

@Override
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
super.paintComponent(g2d);
Framework.Draw(g2d);
}

}

框架.java

import java.awt.Color;
import java.awt.Graphics2D;

import javax.swing.JFrame;

public class Framework extends Panel {

private static long beginTime, takenTime, sleepTime;
private static long secInNano = 1000000000L;
private static long secInMilli = 1000000L;
private static long fps = 60L;
private static long fpsTime = secInNano / fps;

public static enum GameState {STARTING, MAINMENU, PLAYING, OVER};
public static GameState gameState;

public Framework ()
{
super();

Thread gameThread = new Thread() {
@Override
public void run(){
mainLoop();
}
};

gameState = GameState.STARTING;

gameThread.start();
}

private void mainLoop() {

while (gameState != GameState.OVER) {

beginTime = System.nanoTime();

switch (gameState) {
case STARTING:
LoadandInit();
break;
case MAINMENU:
MainMenu.Update();
break;
case PLAYING:

break;
default:
System.out.println("Ok, somebody messed up.");
break;

}

repaint();

takenTime = System.nanoTime() - beginTime;
sleepTime = (fpsTime - takenTime) / secInMilli;
if (sleepTime < 10)
sleepTime = 10;

try {
Thread.sleep(sleepTime);
} catch (InterruptedException ex) { }


}


}



private static void LoadandInit() {

gameState = GameState.MAINMENU;
}


public static void Draw(Graphics2D g2d) {

g2d.setColor(Color.BLACK);
g2d.drawString("DEARP", 0, 0);
}

}

最佳答案

您正在向窗口添加 Framework 的实例,但 Framework 不会覆盖 PaintCompontents。它有一个由 Panel 调用的静态 Draw 方法,但您永远不会创建 panel 的实例。

您可以将 Draw 方法转换为 PaintComponent(),并删除您的 Panel 类。

此外,您不应该在 Framework 的构造函数内启动线程。这可能会导致 run 方法看到成员变量的不正确值。创建一个新的启动方法来启动线程。

关于java - 为什么我的屏幕上什么也没有绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320551/

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