JAVA Greenfoot Game Over / Win检查yCoordinate

时间:2015-11-18 12:58:11

标签: java greenfoot

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

接下来检查是否有一个getY coord检查是否有青蛙对象撞到了世界的屋顶,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);   
    }
  }

}

1 个答案:

答案 0 :(得分:0)

不同的方法。当游戏结束时,你可能不再进行getY()检查。不要继续运行游戏,而是返回主菜单或其他东西。 getY()方法在这里无关紧要。你可以完全停止程序。

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

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

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

您可以分享一些代码吗?我认为这应该给你一个想法,但是当移除对象时应该不再有对象的调用,因为游戏结束并且正常的游戏循环不应该再运行。否则,nullcheck。