我一直在嘗試使運行渲染(圖形g)和邏輯()但不起作用的canvas遊戲循環。如何使Java Canvas遊戲循環
我已經嘗試製作一個腳本來運行這兩個函數,然後再次調用自己來創建一個循環。
在此先感謝。
我嘗試這樣做:
public class Canvas extends JPanel {
static GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
static int width = gd.getDisplayMode().getWidth();
static int height = gd.getDisplayMode().getHeight();
//Get the system time
long lastTime = System.nanoTime();
//Specify how many seconds there are in a minute as a double
//store as a double cause 60 sec in nanosec is big and store as final so it can't be changed
final double ticks = 60D;
//Set definition of how many ticks per 1000000000 ns or 1 sec
double ns = 1000000000/ticks;
double delta = 0;
public static void main(String[] args) {
JFrame frame = new JFrame("Zombie Run");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Canvas());
frame.setSize(width, height);
frame.setVisible(true);
loop();
}
public static void loop() {
logic();
render(g);
loop();
}
public static void render(Graphics g) {
System.out.println("Running Render");
g.setColor(Color.BLUE);
g.fillRect(0, 0, 800, 500);
}
public static void logic() {
System.out.println("Logic");
}
}
我從日食得到的錯誤是:
Logic
Running Render
Exception in thread "main" java.lang.NullPointerException
at ZombieGame.Canvas.render(Canvas.java:41)
at ZombieGame.Canvas.loop(Canvas.java:36)
at ZombieGame.Canvas.main(Canvas.java:31)
你可以使用[Swing'Timer'](https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)。如果這沒有幫助,請發佈您以[MCVE]形式嘗試過的內容。 –
「一個運行這兩個函數的腳本會再次調用它自己來創建一個循環」 - 腳本不應該在java代碼中。如果它調用自己的方法,你正在運行一個stackoverflow。我想知道你是否沒有聽說過強大的「while」循環。如果不是不想寫電腦遊戲。 – ArcticLord
是的,我沒有嘗試雖然真正的循環,但它拋出了錯誤,並不會工作 –