#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 (неизвестный источник)