So I have this very strange problem with a button that should take me back to the main title screen of my game. In my SettingsScreen, if I have a button that takes me back to the TitleScreen, the world turns grey forever. After a while, it gives me a StackOverflow error with a whole bunch of red lines that slowed down my entire pc significantly. I tried to restart Greenfoot, but then it keeps saying "The world is being constructed...". What's even weirder is that when I change TitleScreen to Playground, the world where the game can be played, the code works flawlessly.
Can anyone help me?
The lines that indicate errors are:
at Playground.<init>(Playground.java:36)
at TitleScreen.<init>(TitleScreen.java:7)
The following errors keep stacking:
at SettingsScreen.prepare(SettingsScreen.java:38)
at SettingsScreen.<init>(SettingsScreen.java:11)
at TitleScreen.prepare(TitleScreen.java:39)
at TitleScreen.<init>(TitleScreen.java:12)
at SettingsScreen.prepare(SettingsScreen.java:38)
And so forth...
Here's World TitleScreen:
And World SettingsScreen:
import greenfoot.*;
public class TitleScreen extends World
{
GreenfootSound titleMusic = new GreenfootSound("TitleMusic.wav");
Button startButton = new Button("PlayBtn.png", new Playground());
public TitleScreen()
{
super(600, 600, 1);
prepare(); //error
}
public void act()
{
handleMusic();
}
public void handleMusic()
{
if (!titleMusic.isPlaying())
{
titleMusic.play();
}
if (Greenfoot.mouseClicked(startButton))
{
titleMusic.stop();
}
}
private void prepare()
{
TitleLabel titleLabel = new TitleLabel();
addObject(titleLabel,280,90);
addObject(startButton, 300, 250);
Button settingsButton = new Button("SettingsBtn.png", new SettingsScreen()); //error
addObject(settingsButton, 300, 380);
Button guideButton = new Button("ControlsBtn.png", null);
addObject(guideButton, 300, 510);
}
}import greenfoot.*;
public class SettingsScreen extends World
{
ToggleButton musicButton = new ToggleButton(true);
SettingsLabel musicText = new SettingsLabel("Music (on)");
public SettingsScreen()
{
super(600, 600, 1);
prepare(); //error
}
public void act()
{
}
public void changeText(boolean state)
{
if (state == true)
{
SettingsLabel.textString = "Music (on)";
}
else
{
SettingsLabel.textString = "Music (off)";
}
}
private void prepare()
{
addObject(musicButton, 300, 250);
addObject(musicText, 220, 242);
Button backBtn2 = new Button("BackBtn2.png", new TitleScreen()); //error, changing to Playground() makes code work
addObject(backBtn2, 300, 510);
}
}
