我目前正在尝试制作一个小游戏。目的是四处拍摄和收集物品。我已经弄清楚如何拍摄自己的意图。但是,我的子弹超出范围后并没有被移除,这给我带来了java.lang.NullPointerException
错误。任何帮助将不胜感激!
public class Hero extends Player {
public int bulletCount = 0;
public void act() {
checkFire();
bulletCount++;
}
public void checkFire() {
if (bulletCount % 10 == 0) {
bulletCount = 0;
if (Greenfoot.isKeyDown("space")) {
int x = getX(), y = getY();
Bullet bullet = new Bullet(x, y, rotation);
getWorld().addObject(bullet, getX(), getY());
}
}
}
}
public class Bullet extends Player {
private int speed = 10;
public Bullet(int x, int y, int rotation) {
setLocation(x,y);
setRotation(rotation);
}
public void act() {
move(speed);
checkBoundaries();
}
public void checkBoundaries() {
if (getX() > getWorld().getWidth() - 10)
getWorld().removeObject(this);
else if (getX() < 10)
getWorld().removeObject(this);
if (getY() > getWorld().getHeight() - 10)
getWorld().removeObject(this);
else if (getY() < 10)
getWorld().removeObject(this);
}
}
public class Enemy extends Actor{
public void killHero()
{
Actor hero1 = getOneIntersectingObject(Hero.class);
if(hero1 != null) {
World world;
world = getWorld();
LivesCounter livescounter = new LivesCounter();
this.setLocation(Greenfoot.getRandomNumber(world.getWidth()), Greenfoot.getRandomNumber(world.getHeight()));
hero.lives--;
}
}
public class GameScreen extends World
{
public GameScreen()
{
super(600, 400, 1);
prepare();
}
private void prepare()
{
Hero hero = new Hero();
addObject(hero,114,197);
Enemy enemy = new Enemy();
Asteroid asteroid = new Asteroid();
addObject(asteroid,150,72);
Girl girl = new Girl();
addObject(girl,285,72);
Alien alien = new Alien();
addObject(alien,503,191);
Boy boy = new Boy();
addObject(boy,477,75);
}
}
由于某些奇怪的原因,子弹可以击中并摧毁我的小行星,但不能击中我的外星人,但是当我的子弹消失后,这些子弹就无法击中。如果我的子弹击中世界边缘错误。如果我在拍摄时接近世界边缘,我会报错。
答案 0 :(得分:0)
将自己从世界上移开后,您不能调用getX()或getY()。如果子弹向左或向右离开,则此后仍在检查其垂直范围。有两种方法可以解决此问题。最简单的方法是使用else将两个if一起加入:
public void checkBoundaries() {
if (getX() > getWorld().getWidth() - 10)
getWorld().removeObject(this);
else if (getX() < 10)
getWorld().removeObject(this);
else if (getY() > getWorld().getHeight() - 10) // <--- Now an else here
getWorld().removeObject(this);
else if (getY() < 10)
getWorld().removeObject(this);
}
这避免了从世界移除后调用getY()。