フロッガー スタイルのゲームの 2 つのチェックでこの問題が発生しています。したがって、ゲームオーバー チェックは、カエル オブジェクトの単純な衝突チェックです。
次のチェックでは、getY 座標チェックを実行して、カエル オブジェクトが世界の屋根にぶつかったかどうか、つまりゲームに勝ったかどうかをチェックします。
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);
}
}
}