Ошибка в моем методе уровня перезапуска

#java #game-engine

#java #игровой движок

Вопрос:

это метод перезапуска:

  public void Restart() {
  object.clear();
  LoadImageLevel(loader.loadImage("/level.png"));
  cam.setX(-32);
 } 
  

и это метод LoadImageLevel:

    public void LoadImageLevel(BufferedImage image) {
  int w = image.getWidth();
  int h = image.getHeight();

  for (int xx = 0; xx < h; xx  ) {
     for (int yy = 0; yy < w; yy  ) {
        int pixel = image.getRGB(xx, yy);
        int red = (pixel >> 16) amp; 0xff;
        int green = (pixel >> 8) amp; 0xff;
        int blue = (pixel) amp; 0xff;

        if (red == 0 amp;amp; green == 0 amp;amp; blue == 100) {
           addObject(new Background(0, 0, ObjectId.Background)); // background
           addObject(new Block(xx * 32, yy * 32, 0, ObjectId.Block));

        }
        if (red == 100 amp;amp; green == 60 amp;amp; blue == 0) { // / block
           addObject(new Block(xx * 32, yy * 32, 0, ObjectId.Block));

        }
        if (red == 100 amp;amp; green == 50 amp;amp; blue == 0) { // /block 1
           addObject(new Block(xx * 32, yy * 32, 1, ObjectId.Block));
        }
        if (red == 100 amp;amp; green == 40 amp;amp; blue == 0) { // /block 2
           addObject(new Block(xx * 32, yy * 32, 2, ObjectId.Block));
        }
        if (red == 100 amp;amp; green == 30 amp;amp; blue == 0) { // /block 3
           addObject(new Block(xx * 32, yy * 32, 3, ObjectId.Block));
        }
        if (red == 255 amp;amp; green == 255 amp;amp; blue == 255) { // /block 4
           addObject(new Block(xx * 32, yy * 32, 4, ObjectId.Block));
        }
        if (red == 0 amp;amp; green == 255 amp;amp; blue == 33) { // /block up
           addObject(new Block(xx * 32, yy * 32, 5, ObjectId.Block));
        }
        if (red == 0 amp;amp; green == 245 amp;amp; blue == 33) { // /block up1
           addObject(new Block(xx * 32, yy * 32, 6, ObjectId.Block));
        }
        if (red == 128 amp;amp; green == 128 amp;amp; blue == 128) { // / box
           addObject(new Box(xx * 32, yy * 32, this, ObjectId.Box));

        }
        if (red == 150 amp;amp; green == 150 amp;amp; blue == 150) { // /
                                               // changedable
                                               // block
           addObject(new ChangeableBlock(xx * 32, yy * 32, this,
                 ObjectId.ChangeableBlock));

        }
        if (red == 255 amp;amp; green == 0 amp;amp; blue == 0) { // /red button
           addObject(new Button(xx * 32, yy * 32, 1, this,
                 ObjectId.Button));
        }
        if (red == 0 amp;amp; green == 0 amp;amp; blue == 245) { // /blue button
           addObject(new Button(xx * 32, yy * 32, 2, this,
                 ObjectId.Button));
        }
        if (red == 255 amp;amp; green == 30 amp;amp; blue == 30) { // ///ex
           addObject(new Ex(xx * 32, yy * 32, this, ObjectId.Ex));

        }
        if (red == 0 amp;amp; green == 0 amp;amp; blue == 255) { // / player
           addObject(new Player(xx * 32, yy * 32, this,
                 ObjectId.Player));

          }

        }
     }
   }
  

Теперь самое странное, что в 50% случаев это работает, а в остальных 50% происходит сбой с этой ошибкой:

  Exception in thread "Thread-2" java.lang.NullPointerException
 at com.shuster.killtheex.objects.Box.tick(Box.java:37)
 at com.shuster.killtheex.window.Handler.tick(Handler.java:36)
 at com.shuster.killtheex.window.Game.tick(Game.java:84)
 at com.shuster.killtheex.window.Game.run(Game.java:66)
 at java.lang.Thread.run(Unknown Source)
  

И каждый раз это происходит с другим объектом..
Большое спасибо!!

редактировать: теперь я получил эту ошибку..

    Exception in thread "Thread-2" java.lang.NullPointerException
        at com.shuster.killtheex.window.Handler.render(Handler.java:73)
        at com.shuster.killtheex.window.Game.render(Game.java:107)
        at com.shuster.killtheex.window.Game.run(Game.java:70)
        at java.lang.Thread.run(Unknown Source)
  

Комментарии:

1. и строка 37 из Box.java есть?

2. Что-то равно нулю в строке 37 Box.java . (внутри метода tick)

3. если (tempObject.getId() == ObjectId. Блок) {

4. но проблема в том, что в нем говорится, что ошибка возникает в разных объектах каждый раз при сбое, и теперь я получил это исключение ошибки в потоке «Thread-2» java.lang. Исключение NullPointerException в com.shuster.killtheex.window. Handler.render(Handler.java:73) в com.shuster.killtheex.window.Game.render(Game.java:107) в com.shuster.killtheex.window.Game.run(Game.java:70) в java.lang. Thread.run (неизвестный источник)