我在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);
}
}
}
答案 0 :(得分:0)
不同的方法。当游戏结束时,你可能不再进行getY()检查。不要继续运行游戏,而是返回主菜单或其他东西。 getY()方法在这里无关紧要。你可以完全停止程序。
但你的代码看起来很奇怪。 GameOver是一个对象?而不是游戏中的简单方法。它看起来像你的代码有一个奇怪的游戏结构。无论如何,当游戏结束时,'gamelogic'循环应该不再运行,而是去菜单。
或者您可以保持游戏运行并进行空检查。但阅读你的代码,似乎整个结构并不那么好。你青蛙班的aTop部分?如果是这样,它应该存在以便它被调用。如果从世界中删除Frog类,你可以做类似的事情(但我看不到调用aTop方法的位置)
if(myWorld.getFrog()!=null){
// Get method
}
您可以分享一些代码吗?我认为这应该给你一个想法,但是当移除对象时应该不再有对象的调用,因为游戏结束并且正常的游戏循环不应该再运行。否则,nullcheck。