当我使用下面的代码时,它会引发异常。 但当我补充:
graphics.drawString("some string", 0, 0);
对于render方法,一切都正常工作我试图查找一些有关drawImage()
的信息,如果在绘制之前必须要做什么,但是找不到。 你能告诉我怎么回事吗?
我创建了一个窗口,并将GamePanel类添加到其中。
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class GamePanel extends JPanel implements Runnable{
//Fields
public static int WIDTH = 600;
public static int HEIGHT = 400;
private static double targetTicksPerSecond = 60;
private static double targetNanosBetweenTicks = 1_000_000_000 / targetTicksPerSecond;
private long startNanos, lastNanos, totalDeltaTime, timer;
private int frames, updates;
private BufferedImage image; // = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private Graphics2D graphics;
private Thread thread;
private boolean running;
public GamePanel(){
if(thread == null){ thread = new Thread(this); thread.start(); }
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
requestFocusInWindow();
}
@Override
public void run(){
init();
while(running){
startNanos = System.nanoTime();
totalDeltaTime += startNanos - lastNanos;
lastNanos = startNanos;
while(totalDeltaTime > targetNanosBetweenTicks){
update();
update++;
totalDeltaTime = 0;
}
render();
draw();
frames++;
if((System.nanoTime() - timer) > 1_000_000_000){
timer += 1_000_000_000;
System.out.println("FPS: " + frames + " Ticks: " + update);
frames = 0; update = 0;
}
}
}
private void init() {
running = true;
timer = System.nanoTime();
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
graphics = image.createGraphics();
}
private void update() {
}
private void render() {
graphics.setColor(Color.BLACK);
graphics.fillRect(0, 0, WIDTH, HEIGHT);
graphics.drawString("a", 0, 0);
}
private void draw(){
Graphics g = (Graphics) getGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
}
}
好的,我正在尝试使用“Graphics2D”创建一个简单的游戏来理解它是如何工作的,并且我在一个循环中不停地调用draw()和render()方法。 在不添加graphics.drawsting(“some string”,x,y);
的情况下,在第85行抛出此异常,即g.drawimage(image,0,0,null);
Exception in thread "Thread-0" java.lang.NullPointerException
at GamePanel.draw(GamePanel.java:85)
at GamePanel.run(GamePanel.java:54)
at java.base/java.lang.Thread.run(Thread.java:832)
我以前实际使用过这段代码,但不知何故,它不起作用。 如果有更有效的方法来制作游戏,我想知道。
你得到的是什么样的例外? 要绘制图像,请参阅此处的链接。 https://docs.oracle.com/javase/tutorial/2D/images/drawimage.html试试:
private void draw(){
Graphics g = (Graphics) getGraphics();
if (image != null)
g.drawImage(image, 0, 0, this);
g.dispose();
}