This site requires JavaScript, please enable it in your browser!
Greenfoot back
franman
franman wrote ...

2012/10/10

Tutorial problem- How to Access from one object to another

franman franman

2012/10/10

#
I followed the instructions based on the tutorial How to Access from one object to another by davmac. I've compiled everything but the counter doesn't update whenever I shoot an asteroid. I compare the code to the answers and to me they look exactly the same. So here are the codes I tried to follow can someone please pin point what I've forgotten to add?
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Space here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Space  extends World
{

    private Counter theCounter;

    /**
     * Constructor for objects of class Space.
     */
    public Space()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(600, 400, 1); 
        addObject(new Rocket(), 300, 340);
        theCounter = new Counter();
        addObject(new Counter(), 40, 340);
    }

    public Counter getCounter()
    {
        return theCounter;
    }
    
    /**
     * Prepare the world for the start of the program. That is: create the initial
     * objects and add them to the world.
     */
    private void prepare()
    {
    }
    
    public void act()
    {
        if (Greenfoot.getRandomNumber(1000) < 3) {
            addObject(new Asteroid(), 0, 20);
        }
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * A bullet to be shot at asteroids.
 * 
 * The Shot moves to the top of the screen and then expires. If it hits an asteroid
 * on the way, it destroys the asteroid, and then expires immediately.
 */
public class Shot  extends Actor
{
    private Rocket myShip;

    /**
     * Constructor for a Shot. You must specify the ship the shot comes from.
     */
    public Shot(Rocket myShip)
    {
        this.myShip = myShip;
    }

    /**
     * Act - do whatever the Shot wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        int ypos = getY();
        if (ypos > 0) {
            ypos = ypos - 5;
            setLocation(getX(), ypos);
            Actor rock = getOneIntersectingObject(Asteroid.class);
            if (rock != null) {
                // We've hit an asteroid!
                hitAnAsteroid();
                getWorld().removeObject(rock);
                getWorld().removeObject(this);
            }
        }
        else {
            // I reached the top of the screen
            getWorld().removeObject(this);
        }
    }
    
    /**
     * This method gets called (from the act method, above) when the shot hits an
     * asteroid. It needs to do only one thing: increase the score counter.
     * (Everything else, such as removing the asteroid which was hit, is dealt
     * with in the act method).
     */
    private void hitAnAsteroid()
    {
        Space spaceWorld = (Space) getWorld();
        Counter counter = spaceWorld.getCounter();
        counter.bumpCount(5);
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;

/**
 * Write a description of class Counter here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Counter  extends Actor
{
    private int totalCount = 0;

    public Counter()
    {
        setImage(new GreenfootImage("0", 20, Color.WHITE, Color.BLACK));
    }

    /**
     * Increase the total amount displayed on the counter, by a given amount.
     */
    public void bumpCount(int amount)
    {
        totalCount += amount;
        setImage(new GreenfootImage("" + totalCount, 20, Color.WHITE, Color.BLACK));
    }
}
danpost danpost

2012/10/10

#
On line 23 you are adding a 'new' counter to the world, not the one you already created in the previous line. Instead, add the counter that was already created.
franman franman

2012/10/11

#
^Thank you it's kinda hard to see where you're missing when dealing with lots of words and when it was compiled w/o errors.
You need to login to post a reply.