Я строил эту игру на Java. В основном это minecraft в 2D. Я сделал так, чтобы объекты блока удалялись при нажатии. Мой рендеринг блока объектов иногда дает исключение nullpointer после нажатия/удаления блока (случайным образом после примерно 200 блоков). Кажется, что объект иногда удаляется, когда игра находится в renderloop. Когда я добавляю try-catch, в следующем цикле рендеринга больше нет ошибки. Любые идеи, что вызывает это? Является ли этот gameloop прочным, я подозреваю, что именно это и вызывает мою ошибку.редко встречающийся nullpointer исключение (программирование игры Java)
метод визуализации в моем обработчике:
LinkedList<GameObject> object = new LinkedList<GameObject>();
public void render(Graphics g){
for(int i = 0; i < object.size(); i++){
GameObject tempObject = object.get(i);//sometimes nullpointer when getting the object I clicked on
tempObject.render(g);
}
}
Удаление с
ввода мышкойfor(int i = 0; i < handler.object.size(); i++){
if(handler.object.get(i).getID() == ID.Block){
int x1 = (int) handler.object.get(i).getX();
int y1 = (int) handler.object.get(i).getY();
//if mouse is over object
if((MouseX >= x1+1 && MouseX <= (x1 +32-1)) && (MouseY >= y1+1 && MouseY <= (y1 +32-1))){
Block b = (Block) handler.object.get(i);
inventory.addInventoryBlocks(b.getType(), 1);
handler.removeObject(handler.object.get(i));
}
}
}
Gameloop:
public void run() {
this.requestFocus();
long lastTime = System.nanoTime();
double amountOfTicks = 60;
double ns = 1000000000/amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0;
while(running){
long now = System.nanoTime();
delta += (now - lastTime)/ns;
lastTime = now;
while(delta >= 1){
tick();
delta--;
}
if(running)
render();
frames++;
if(System.currentTimeMillis() - timer > 1000){
timer += 1000;
//System.out.println("FPS: " + frames);
frames = 0;
}
}
stop();
}
Что такое структура потоков? Где работает цикл игры? –