I think i got it right... But please confirm that....
But now i get a NullPointerException like before the adjustment in the line:
in activateBomb()...
Here is my HealthGUI code if helpful:
import greenfoot.*; import java.util.*; public class BombNew extends Actor { private int direction; private Player summoner; private Player opponent; private int timer; private double speed = 100; public BombNew(int dir, Player player) { direction = dir; summoner = player; } public void act() { //Movement speed *= 0.98; setRotation(direction); move((int)speed); Wall wall = (Wall) getOneIntersectingObject(Wall.class); if(wall != null) { //switch direction 180 degrees direction = (direction+180)%360; speed *= 0.75; move((int)speed); } setRotation(0); //Opponent Intersection java.util.List<Player> pSeen = getIntersectingObjects(Player.class); for (Object obj : getObjectsInRange(60, Player.class)) if (obj != summoner) opponent = (Player)obj; if (opponent != null) activateBomb(); //Exploding activateBomb(); } public void activateBomb() { Star star = new Star(); getWorld().addObject(star, this.getX(), this.getY()); //subtract one heart Greenfoot.playSound("LoseLife.mp3"); HealthGUI opponentHealthGUI = opponent.getHealthGUI(); opponentHealthGUI.setLife(opponentHealthGUI.getLife()-1); //respawn the opponent getWorld().removeObject(opponent); getWorld().addObject(opponent, Greenfoot.getRandomNumber(900+1),Greenfoot.getRandomNumber(600+1)); /** * TODO: get some delay in to show the exploding bomb (bomb+star) before removing both */ Greenfoot.playSound("BombExplode.wav"); getWorld().removeObject(this); summoner.setIsBombThrown(false); } }
HealthGUI opponentHealthGUI = opponent.getHealthGUI();
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class HealthGUI extends Actor { private int life = 3; GreenfootImage playerTwoThreeHeart = new GreenfootImage("PlayerTwoThreeHeart.png"); GreenfootImage playerTwoTwoHeart = new GreenfootImage("PlayerTwoTwoHeart.png"); GreenfootImage playerTwoOneHeart = new GreenfootImage("PlayerTwoOneHeart.png"); //TODO: Still misses playerOne images - implement them in the future! public int getLife() { return this.life; } public void setLife(int life) { this.life = life; } public void act(){ switch(life ) { case 3: setImage(playerTwoThreeHeart); break; case 2: setImage(playerTwoTwoHeart); break; case 1: setImage(playerTwoOneHeart); break; default: GameWorld guiWorld = (GameWorld) getWorld(); guiWorld.removeAll(); Greenfoot.playSound("Lose.wav"); Greenfoot.stop(); } } }