2015-11-18 1 views
0

У меня проблема с моими 2 чеками на игру в стиле лягушки. Таким образом, проверка Gameover - это простая проверка столкновения с объектом лягушки.JAVA Greenfoot Game Over/Win check на yCoordinate

Следующая проверка проверяет координаты getY для проверки того, попал ли объект лягушки на крышу мира ergo, избили игру.

Теперь, когда проверка GameOver выполняется, больше нет объекта для проверки getY. Таким образом, это дает ошибку. Как я могу обойти это?

полный код класса Frogger:

public class Frogger extends Actor 
{ 
public void act() 
{ 
    checkKeys(); 
    hitEnemy(); 
    atTop(); 

}  

private void checkKeys() 
{ 
    if (Greenfoot.isKeyDown("up")) { 
     setLocation(getX(), getY()-3); 
    } 
    if (Greenfoot.isKeyDown("down")) { 
     setLocation(getX(), getY()+3); 
    } 
    if (Greenfoot.isKeyDown("left")) { 
     setLocation(getX()-3, getY()); 
    } 
    if (Greenfoot.isKeyDown("right")) { 
     setLocation(getX()+3, getY()); 
    } 

} 

public void hitEnemy() 
{ 
    Actor Enemy = getOneIntersectingObject(Enemy.class); 
    if(Enemy != null) 
    { 
     World myWorld = getWorld(); 
     Gameover gameover = new Gameover(); 
     myWorld.addObject(gameover, 300, 200); 
     myWorld.removeObject(this); 
    } 
} 

private void atTop() 
{ 
    if (getY() < 30) 
    { 
     World myWorld = getWorld(); 
     Youwin youwin = new Youwin(); 
     myWorld.addObject(youwin, 300, 200); 
     myWorld.removeObject(this); 
    } 
    } 

}

+0

* Актер Vijand = getOneIntersectObject (Vijand.class); * эта линия немного странная; у вас есть как переменная 'Vijand', так и класс' Vijand'. Как сделать ваш код нечитаемым в два этапа: использовать имена классов в качестве имен переменных и микс и mash английский и голландский :) – Gimby

ответ

0

Различные подходы. Когда игра закончена, вы можете просто не делать проверку getY(). Не продолжайте игру, а вернитесь в главное меню или что-то в этом роде. метод getY() здесь не имеет значения. Вы можете полностью остановить программу.

Но ваш код выглядит странно. GameOver - это объект? Вместо простого метода в вашей игре. Это похоже на то, что ваш код имеет странную структуру для игры. Во всяком случае, когда игра закончилась, цикл «gamelogic» больше не должен работать, а скорее перейдите в меню.

Или вы можете сохранить игру и выполнить нулевую проверку. Но, читая ваш код, кажется, что вся структура не так хороша. Является ли aTop частью класса Frog? Если это так, оно должно существовать для его вызова. Если вы удалите класс Frog от мира, вы могли бы сделать что-то подобное (но я не вижу, где Поверх метод вызывается)

if(myWorld.getFrog()!=null){ 
    // Get method 
} 

Не могли бы вы, возможно, разделить немного больше кода? Я думаю, что это должно дать вам идею, но не должно быть больше вызовов объекта при удалении объекта, потому что игра закончилась, и нормальный игровой цикл больше не должен работать. Иначе, nullchecks.

+0

Оба метода находятся внутри класса Frog. Я добавил свой полный класс лягушек. Gameover и Youwin тоже оба класса. –

+0

Итак, я предполагаю, что метод «действовать» вызывается в цикле. Перерыв в этом цикле, когда игра закончена, уже не имеет смысла делать акцию лягушки. У вас есть UML этого кода? Мне это кажется странным. –