所以,我开始制作一个简单的2D游戏,过了一会儿,我跑了它,它给了我一些错误。
我将其运行到调试模式,它显示错误位于第105和第60行以及Thread.run()
这是我的代码:
package me.andrewc.tower;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import me.andrewc.tower.dy.DynamicsLoader;
import me.andrewc.tower.gfx.Screen;
import me.andrewc.tower.gfx.UI;
import me.andrewc.tower.level.Level;
public class TowerComponent extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;
public static final int WIDTH = 640, HEIGHT = 480;
public static final String NAME = "Autumn Hero";
private boolean running = false;
private Screen screen;
private Level level;
public TowerComponent() {
DynamicsLoader.init(this);
level = Level.levels.get(1);
screen = new Screen(WIDTH, HEIGHT);
}
public void start() {
running = true;
new Thread(this).start();
}
public void stop() {
running = false;
}
@Override
public void run() {
int fps = 0, tick = 0;
double fpsTimer = System.currentTimeMillis();
double nsPerTick = 1000000000.0d / 60;
double then = System.nanoTime();
double unprocessed = 0;
while(running) {
boolean canRender = false;
double now = System.nanoTime();
unprocessed += (now - then) / nsPerTick;
then = now;
while(unprocessed >= 1) {
tick++;
tick(); // HERE !!
canRender = true;
--unprocessed;
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(canRender) {
fps++;
render();
}
if(System.currentTimeMillis() - fpsTimer > 1000) {
System.out.printf("%d fps, %d tick%n", fps, tick);
fps = 0; tick = 0;
fpsTimer += 1000;
}
}
}
private void render() {
BufferStrategy bs = getBufferStrategy();
if(bs == null) {
createBufferStrategy(3);
requestFocus();
return;
}
Graphics g = bs.getDrawGraphics();
//Render objects here
UI.render(screen);
level.render(screen);
//Done with rendering
g.drawImage(screen.image, 0, 0, WIDTH, HEIGHT, null);
g.dispose();
bs.show();
}
private void tick() {
level.tick(); //HERE !!
}
public static void main(String[] args) {
TowerComponent game = new TowerComponent();
Dimension dimension = new Dimension(WIDTH, HEIGHT);
game.setMaximumSize(dimension);
game.setMinimumSize(dimension);
game.setPreferredSize(dimension);
game.setSize(dimension);
JFrame frame = new JFrame();
frame.setTitle(NAME);
frame.add(game);
frame.pack();frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
game.start();
}
}
答案 0 :(得分:-1)
Level.levels.get(1);
可能返回null