Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA绿足游戏在yCoordinate上结束/获胜检查_Java_Greenfoot - Fatal编程技术网

JAVA绿足游戏在yCoordinate上结束/获胜检查

JAVA绿足游戏在yCoordinate上结束/获胜检查,java,greenfoot,Java,Greenfoot,我对青蛙式游戏的2张支票有这个问题。 所以Gameover检查是对青蛙对象的简单碰撞检查 下一个检查将执行getY coord检查,以检查青蛙对象是否击中了世界屋脊,或者是否击败了游戏 现在,当GameOver检查完成时,就没有更多的对象可以进行getY检查了。所以它给出了一个错误。 我怎么能绕过这个 Frogger类的完整代码: public class Frogger extends Actor { public void act() { checkKeys(); hitE

我对青蛙式游戏的2张支票有这个问题。 所以Gameover检查是对青蛙对象的简单碰撞检查

下一个检查将执行getY coord检查,以检查青蛙对象是否击中了世界屋脊,或者是否击败了游戏

现在,当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);   
    }
  }
公共类Frogger扩展了Actor
{
公共无效法
{
检查键();
打击敌人();
atTop();
}    
私有无效检查密钥()
{
if(Greenfoot.isKeyDown(“up”)){
设置位置(getX(),getY()-3);
}
if(Greenfoot.isKeyDown(“down”)){
设置位置(getX(),getY()+3);
}
if(Greenfoot.isKeyDown(“左”)){
设置位置(getX()-3,getY());
}
if(Greenfoot.isKeyDown(“右”)){
设置位置(getX()+3,getY());
}
}
公敌
{
参与者敌人=getOneIntersectingObject(敌人类);
如果(敌人!=null)
{   
World myWorld=getWorld();
Gameover Gameover=新Gameover();
addObject(gameover,300200);
myWorld.removeObject(this);
}
}
私人文书
{
if(getY()<30)
{   
World myWorld=getWorld();
Youwin Youwin=新Youwin();
myWorld.addObject(youwin,300200);
myWorld.removeObject(this);
}
}

}不同的方法。游戏结束后,您就不能再进行getY()检查了。不要继续运行游戏,而是回到主菜单或其他地方。getY()方法与此无关。你可以完全停止程序

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

或者你可以让游戏继续运行并进行空检查。但是在阅读代码时,整个结构似乎不是很好。你的青蛙课是最高级别的吗?如果是这样,它应该存在,以便调用它。如果您从世界上删除Frog类,您可以执行以下操作(但我看不到Top方法在哪里被调用)


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

Actor Vijand=getOneIntersectingObject(Vijand.class);这句话有点奇怪;显然,您有一个变量
Vijand
和一个类
Vijand
。如何通过两个步骤使代码不可读:将类名用作变量名,并将英语和荷兰语混合在一起:)这两种方法都在Frog类中。我增加了我全部的青蛙课。Gameover和Youwin也都是类。所以我假设方法“act”在循环中被调用。当游戏结束时,打破这个循环,让青蛙表演就不再有意义了。你有这个代码的UML吗?我觉得很奇怪。
 if(myWorld.getFrog()!=null){
   // Get method
}