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