0

フロッガー スタイルのゲームの 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);   
    }
  }

}

4

1 に答える 1

0

さまざまなアプローチ。ゲームが終了すると、もう getY() チェックを行うことはできません。ゲームを続行するのではなく、メイン メニューなどに戻ります。ここでは getY() メソッドは関係ありません。プログラムを完全に停止できます。

しかし、あなたのコードは奇妙に見えます。ゲームオーバーはオブジェクトですか?ゲームの単純な方法ではなく。あなたのコードは、ゲームの奇妙な構造を持っているようです。いずれにせよ、ゲームが終了すると、'gamelogic' ループは実行されなくなり、代わりにメニューに移動します。

または、ゲームを実行し続けて null チェックを行うこともできます。しかし、あなたのコードを読むと、構造全体があまり良くないようです。aTop は Frog クラスの一部ですか? その場合、呼び出されるために存在する必要があります。世界から Frog クラスを削除すると、次のようなことができます (ただし、aTop メソッドが呼び出される場所はわかりません)。

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

あなたのコードをもう少し共有していただけませんか?ゲームが終了し、通常のゲーム ループが実行されなくなるため、オブジェクトが削除されたときにオブジェクトへの呼び出しがなくなるはずです。それ以外の場合は、nullchecks です。

于 2015-11-18T13:04:22.457 に答える