gpt4 book ai didi

java - 通过图形类时遇到问题

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

我有一个非常简单的游戏引擎,我正在尝试设置它,但我不知道为什么它会抛出异常,但我经验不足,所以我知道我可能做错了什么。

我想使用 Graphics 类通过缓冲区策略直接绘制到 JFrame。一切正常,直到我尝试将 Graphics g 传递到另一个类,然后出现线程错误。这是我所拥有的:

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class GameFrame extends JFrame implements Runnable {

public static final int WIDTH = 1280;
public static final int HEIGHT = WIDTH * 9 / 16;
private final int FPS = 60;

private Thread thread;
private long lastTime;

private Game game;

public GameFrame() {
game = new Game(this);
setLocation((int) ((Toolkit.getDefaultToolkit().getScreenSize().getWidth() - WIDTH) / 2), (int) ((Toolkit.getDefaultToolkit().getScreenSize().getHeight() - HEIGHT) / 2));
setSize(new Dimension(WIDTH, HEIGHT));
setResizable(false);
thread = new Thread(this);
setVisible(true);
createBufferStrategy(3);
setDefaultCloseOperation(EXIT_ON_CLOSE);
thread.start();
}

public void run() {
lastTime = System.currentTimeMillis();

while (true) {
long time = System.currentTimeMillis();
if ((time - lastTime) * FPS > 1000) {
lastTime = time;
tick();
draw();
getBufferStrategy().show();
}
}
}

private void tick() {
game.tick();
}

private void draw() {
game.draw();
}

public static void main(String[] args) {
new GameFrame();
}

}

import java.awt.Graphics2D;

public class Game {

private GameFrame frame;
private Map map;

public Game(GameFrame frame) {
this.frame = frame;
}

public void tick() {

}

public void draw() {
Graphics2D g = (Graphics2D) frame.getBufferStrategy().getDrawGraphics();
g.fillRect(0, 0, 50, 50);
map.draw(g);
g.dispose();
}

}

Game 内部的绘制方法中的矩形将起作用,但如果我将 g 传递给我的 Map 类(它将绘制相同的东西),则会导致线程 NullPointerException。

提前非常感谢您对此提供的任何帮助或您可以提供的任何其他评论!

最佳答案

因为你还没有初始化 map 对象,所以它是null[默认值]

初始化:您需要创建 map 类的实例并将其分配给变量map

您可以在构造函数中初始化它,如下所示。

public Game(GameFrame frame) {
this.frame = frame;
map=new Map();//initialize map nullpointer will go away
}

关于java - 通过图形类时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664252/

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