0

我的 2 次检查青蛙式游戏时遇到了这个问题。所以 Gameover 检查是对青蛙对象的简单碰撞检查。

下一个检查进行 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() 方法在这里无关紧要。您可以完全停止该程序。

但是你的代码看起来很奇怪。GameOver 是一个对象吗?而不是你游戏中的简单方法。看起来您的代码确实有一个奇怪的游戏结构。无论如何,当游戏结束时,'gamelogic'循环不应再运行,而是转到菜单。

或者您可以保持游戏运行并进行空值检查。但是阅读您的代码,似乎整个结构并不是那么好。aTop 是你的 Frog 课的一部分吗?如果是这样,它应该存在才能被调用。如果您从世界中删除 Frog 类,您可以执行类似的操作(但我看不到 aTop 方法被调用的位置)

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

你能分享更多你的代码吗?我认为这应该给你一个想法,当对象被移除时,不应该再调用对象,因为游戏结束并且正常的游戏循环不应该再运行了。否则,nullchecks。

于 2015-11-18T13:04:22.457 回答