Hey, it's me again.
I have the same problem now as before. My counter value isn't saving over worlds. I've got a NullPointerException at this line:
I want the SpaceCounter value from level2 to be saved into level2a, and the value of level2a to be put in level2b.
In Rocket :
In level2a prepare method:
And in SpaceCounter:
I set the default value of SpaceCounter as 60, and I implemented a feature of the first stage that doesn't allow you to pass into level2 without a counter value of 60. I did this as I couldn't get the Counter to save from Myworld3 to level2. Any ideas?
Thanks heaps.
P.S. Sorry for my indentation issues, I really don't do much about that until the occasional Ctrl-Shift-I.
((SpaceCounter)level2a.getObjects(SpaceCounter.class).get(0)).setValue(spacecounter.getValue());
private SpaceCounter spacecounter;
if(atWorldEdge())
{
if(getWorld() instanceof level2)
{
level2a level2a = new level2a();
((SpaceCounter)level2a.getObjects(SpaceCounter.class).get(0)).setValue(spacecounter.getValue());
Greenfoot.setWorld(level2a);
}
if(getWorld() instanceof level2a)
{
level2b level2b = new level2b();
((SpaceCounter)level2b.getObjects(SpaceCounter.class).get(0)).setValue(spacecounter.getValue());
Greenfoot.setWorld(level2b);
}
if(getWorld() instanceof level2b)
{
marslevel mw = new marslevel();
Greenfoot.setWorld(mw);
}
}SpaceCounter spacecounter2 = new SpaceCounter();
addObject(spacecounter2,57,32);
spacecounter2.setLocation(56,28);import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;
public class SpaceCounter extends Actor
{
private static final Color transparent = new Color(0,0,0,0);
private GreenfootImage background;
private int value;
private int target;
private int delay = 60;
/**
* Create a new counter, initialised to 0.
*/
public SpaceCounter()
{
background = getImage(); // get image from class
value = 60;
target = 60;
updateImage();
}
/**
* Animate the display to count up (or down) to the current target value.
*/
public void act()
{
if(getWorld() instanceof level2)
{
if(delay>0)delay--;
if(delay==0)
{
value--;
updateImage();
delay = 60;
}
}
if(getWorld() instanceof level2a)
{
if(delay>0)delay--;
if(delay==0)
{
value--;
updateImage();
delay = 60;
}
}
if(getWorld() instanceof level2b)
{
if(delay>0)delay--;
if(delay==0)
{
value--;
updateImage();
delay = 60;
}
}
}
/**
* Add a new score to the current counter value.
*/
public void add(int score)
{
target += score;
}
/**
* Return the current counter value.
*/
public int getValue()
{
return value;
}
/**
* Set a new counter value.
*/
public void setValue(int newValue)
{
target = newValue;
value = newValue;
updateImage();
}
/**
* Update the image on screen to show the current value.
*/
private void updateImage()
{
GreenfootImage image = new GreenfootImage(background);
GreenfootImage text = new GreenfootImage("" + value, 22, Color.BLACK, transparent);
image.drawImage(text, (image.getWidth()-text.getWidth())/2,
(image.getHeight()-text.getHeight())/2);
setImage(image);
}
}

