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
}
您能否分享更多您的代码?我认为这应该给你一个想法,当对象被移除时不应该再调用对象,因为游戏结束并且正常的游戏循环不应该再是 运行。否则,空检查。
我在对青蛙式游戏进行 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
}
您能否分享更多您的代码?我认为这应该给你一个想法,当对象被移除时不应该再调用对象,因为游戏结束并且正常的游戏循环不应该再是 运行。否则,空检查。