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

2014/5/3

Problem with my Worlds...

Firedudeet Firedudeet

2014/5/3

#
Hi again, I'm getting a problem in my program where for some reason, once the program moves onto the second level, it skips it and goes straight onto the third one, also messing up some of events that happen in the third world. Now, program was working Ok before, however, once I added in some code to stop the music that was playing forever (Which was started in my world 'outerEarth'), things started to go crazy, as I tried to play the previous music from the start of the second world and added in new music for my world 'asteroidField'. I think it would be better to show you the code I have for all 3 of my worlds to see if you can see the problem (Cause I can't see it). 1st World - Outer Earth
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;

/**
 * Write a description of class outerEarth here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class outerEarth extends Levels
{
    private int countAsteroids;
    private spaceShip myShip;
    GreenfootSound music1 = new GreenfootSound("Level1_music.mp3");
    
    /**
     * Constructor for objects of class outerEarth.
     * 
     */
    public outerEarth()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(); 
        setPaintOrder(asteroid1.class, spaceShip.class, Stars2.class);
        GreenfootImage background = getBackground();
        background.setColor(new Color(25,25,115));
        background.fill();
        myShip = new spaceShip();
        addObject(myShip, 100, 300);
        createStars(70);
        countAsteroids = 0;
    }
    
    public void started()
    {
        music1.playLoop();
    }
    
    public void stopped()
    {
        music1.stop();
    }
    
    public void act()
    {
        started();
        if (countAsteroids < 42)
        {
         addAsteroid();
        }
        else
        {
        stopped();
        Greenfoot.setWorld(new Space(myShip.getX(), myShip.getY()));
    }
    }
    
    private void addAsteroid()
    {
        if (Greenfoot.getRandomNumber(250) < 3) 
        {
            addObject(new asteroid1(), 999, Greenfoot.getRandomNumber(529)+10);
            countAsteroids = countAsteroids + 1;
        }
    }
    
    
    private void createStars(int number) 
    {
        GreenfootImage background = getBackground();             
        for(int i=0; i < number; i++) 
        {
             int x = Greenfoot.getRandomNumber( getWidth() );
             int y = Greenfoot.getRandomNumber( getHeight()/2 );
             addObject(new Stars2(), x, y);
        }
    }
}
2nd Level - Space
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;

/**
 * Write a description of class Space here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Space extends Levels
{
    private int countAsteroids;
    private spaceShip myShip;
    GreenfootSound music2 = new GreenfootSound("Level1_music.mp3");
    
    /**
     * Constructor for objects of class Space.
     * 
     */
    public Space(int myX, int myY)
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(); 
        setPaintOrder(asteroid1.class, asteroid2.class, spaceShip.class, Stars.class);
        myShip = new spaceShip();
        addObject(myShip, myX, myY);
        GreenfootImage background = getBackground();
        background.setColor(Color.BLACK);
        background.fill();
        createStars(300);
        countAsteroids = 0;
    }
    
    public void started()
    {
        music2.playLoop();
    }
    
    public void stopped()
    {
        music2.stop();
    }
    
    public void act()
    {
        started();
        if (countAsteroids < 55)
        {
            addAsteroid();
        }
        else
        stopped();
        Greenfoot.setWorld(new asteroidField(myShip.getX(), myShip.getY()));
    }
    
        private void createStars(int number) 
    {
        GreenfootImage background = getBackground();             
        for(int i=0; i < number; i++) 
        {
             int x = Greenfoot.getRandomNumber( getWidth() );
             int y = Greenfoot.getRandomNumber( getHeight() );
             addObject(new Stars(), x, y);
        }
    }
    
    private void addAsteroid()
    {
        if (Greenfoot.getRandomNumber(250) < 3) 
        {
            addObject(new asteroid1(), 999, Greenfoot.getRandomNumber(529)+10);
            countAsteroids = countAsteroids + 1;
        }
        if (Greenfoot.getRandomNumber(600) < 2)
        {
            addObject(new asteroid2(), 999, Greenfoot.getRandomNumber(529)+10);
            countAsteroids = countAsteroids + 1;
        }
    }
}
3rd level - Asteroid field
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;

/**
 * Write a description of class asteroidField here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class asteroidField extends Levels
{
    private int countAsteroids;
    private spaceShip myShip;
    private boolean added = false;
    GreenfootSound music3 = new GreenfootSound("Level3_music.mp3");
    GreenfootSound music4 = new GreenfootSound("Boss_music.mp3");
    
    /**
     * Constructor for objects of class asteroidField.
     * 
     */
    public asteroidField(int myX, int myY)
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(); 
        setPaintOrder(asteroid1.class, asteroid2.class, asteroid3.class, Astercore.class , asteroid4.class , spaceShip.class, dark_asteroid1.class, Stars.class);
        myShip = new spaceShip();
        addObject(myShip, myX, myY);
        GreenfootImage background = getBackground();
        background.setColor(Color.BLACK);
        background.fill();
        createStars(55);
        createAsteroids(12);
        countAsteroids = 0;
        added=false;
    }
    
    public void started()
    {
        music3.playLoop();
    }
    
    public void stopped()
    {
        music3.stop();
    }
    
    public void act()
    {
        started();
        if (countAsteroids < 46)
        {
            addAsteroid();
        }
        else
        stopped();
        if(added==false)
        {
           music4.playLoop();
           addObject(new Astercore(), 960, 300);
           added=true;
        }
    }
    
    private void addAsteroid()
    {
        if (Greenfoot.getRandomNumber(250) < 3) 
        {
            addObject(new asteroid1(), 999, Greenfoot.getRandomNumber(529)+10);
            countAsteroids = countAsteroids + 1;
        }
        if (Greenfoot.getRandomNumber(600) < 2)
        {
            addObject(new asteroid2(), 999, Greenfoot.getRandomNumber(529)+10);
            countAsteroids = countAsteroids + 1;
        }
        if (Greenfoot.getRandomNumber(660) < 3)
        {
            addObject(new asteroid3(), 999, Greenfoot.getRandomNumber(529)+10);
            countAsteroids = countAsteroids + 1;
        }
    }
    
    private void createStars(int number) 
    {
        GreenfootImage background = getBackground();             
        for(int i=0; i < number; i++) 
        {
             int x = Greenfoot.getRandomNumber( getWidth() );
             int y = Greenfoot.getRandomNumber( getHeight() );
             addObject(new Stars(), x, y);
        }
    }
    
    private void createAsteroids(int number)
    {
        GreenfootImage background = getBackground();
        for(int i=0; i < number; i++) 
        {
             int x = Greenfoot.getRandomNumber( getWidth() );
             int y = Greenfoot.getRandomNumber( getHeight() );
             addObject(new dark_asteroid1(), x, y);
        }
    }
}
If you need any additional information, let me know. Thank you for taking your time to read this.
davmac davmac

2014/5/3

#
The problem seems to be the act() method in your 2nd level:
    public void act()  
    {  
        started();  
        if (countAsteroids < 55)  
        {  
            addAsteroid();  
        }  
        else  
        stopped();  
        Greenfoot.setWorld(new asteroidField(myShip.getX(), myShip.getY()));  
    }  
I think you mean this:
    public void act()  
    {  
        started();  
        if (countAsteroids < 55)  
        {  
            addAsteroid();  
        }  
        else  {
            stopped();  
            Greenfoot.setWorld(new asteroidField(myShip.getX(), myShip.getY()));  
        }
    }  
If you had indented your code properly, this problem would have been more obvious ;)
Firedudeet Firedudeet

2014/5/3

#
Ah, thank you for the reply! Overlooking something as obvious as that... feel a bit embarrassed; thought the problem was something else. -.-'
You need to login to post a reply.