JAVA Greenfoot Game Over/Win 检查 yCoordinate

JAVA Greenfoot Game Over / Win check on yCoordinate

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

下一个检查执行 getY 坐标检查,以检查青蛙对象是否撞到了世界的屋顶,因此已经通关了。

现在当 GameOver 检查完成时,没有更多的对象可以进行 getY 检查。所以它给出了一个错误。 我怎样才能绕过这个?

Frogger 的完整代码class:

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);   
    }
  }

}

不同的方法。游戏结束后,您可以不再进行 getY() 检查。不要继续运行游戏,而是回到主菜单什么的。 getY() 方法在这里无关紧要。您可以完全停止该程序。

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

或者您可以保留游戏 运行 并进行空检查。但是阅读您的代码,整个结构似乎不太好。你的 Frog class 的 aTop 部分是?如果是这样,它应该存在才能被调用。如果你从世界中移除 Frog class,你可以做类似的事情(但我没有看到 aTop 方法在哪里被调用)

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

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