When I move from one world onto the next my score resets back to zero. I have a superclass Scenes world and then subclass Scene2 and Scene3 worlds.
Here is my Scenes superclass world code
This is the Scene2 subclass World code
I have created a Scoreboard actor class to update the score
When my Villian actor intersects the Heart actor the score updates but when I move to the next world by using the Continue actor to move to the next world my score resets back to zero. I want to keep the score moving from one level to the next.
This is my Villian actor code
This is my Continue actor code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class Scenes extends World { public Scoreboard sb; public Scenes() { super ( 1300 , 600 , 1 ); addObject ( new Platform(), 885 , 440 ); addObject ( new Villian(), 37 , 505 ); addObject ( new Continue(), 1263 , 509 ); addObject ( new Heart(), 850 , 374 ); sb = new Scoreboard(); addObject (sb, 45 , 35 ); } public void updateScore() { sb.changeScore(); // change the score } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class Scene2 extends Scenes { public Scene2() { addObject ( new Platform(), 200 , 100 ); addObject ( new Platform(), 600 , 200 ); addObject ( new Platform(), 800 , 130 ); addObject ( new Villian(), 30 , 500 ); addObject ( new Heart(), 1100 , 80 ); addObject ( new Continue2(), 1260 , 500 ); sb = new Scoreboard(); addObject (sb, 45 , 35 ); } public void updateScore() { sb.changeScore(); // change the score } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class Scoreboard extends Actor { public int score = 0 ; public Scoreboard() // constructor for scoreboard { GreenfootImage img = new GreenfootImage( 100 , 30 ); img.setColor( new Color ( 0 , 250 , 0 )); img.drawString( "Score: " + score, 5 , 25 ); setImage(img); } public void changeScore() // when called it needs to change the score { score = score + 1 ; GreenfootImage img = getImage(); img.clear(); img.drawString( "Score: " + score, 5 , 25 ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class Villian extends Actor { private int speed = 7 ; public void act() { checkKeys(); Capture(); } private void checkKeys() { setImage( "Standing.png" ); // sets image if (Greenfoot.isKeyDown( "a" )) // if your pressing a { setImage( "Runningleft.png" ); // Sets image moveLeft(); //initiates moveLeft code } if (Greenfoot.isKeyDown( "d" )) { setImage( "Running.png" ); // Sets image moveRight(); //initiates moveRight code } } public void moveRight() { setLocation (getX() + speed, getY()); } public void moveLeft() { setLocation (getX() - speed, getY()); } public void Capture() { Heart heart = (Heart)getOneIntersectingObject(Heart. class ); if (heart != null ) { getWorld().removeObject(heart); Scenes world = (Scenes)getWorld(); world.updateScore(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 | import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class Continue extends Actor { public void act() { Villian villian = (Villian)getOneIntersectingObject(Villian. class ); if (villian != null ) { Greenfoot.setWorld( new Scene2()); } } } |