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

2024/11/20

Stuck in: "The world is being constructed"

youngdisciple07 youngdisciple07

2024/11/20

#
Hey, I have been stuck with a screen saying that the world is being constructed... I tried closing the program and reopening it and restarting my pc but to no avail... Here is my Background class:
import lang.stride.*;
import java.util.*;
import greenfoot.*;

/**
 * 
 */
public class Background extends World
{
    private Counter counter;
    
    /**
     * Constructor for objects of class Background.
     */
    public Background()
    {
        super(848, 600, 1);
        prepare();
    }

    /**
     * Prepare the world for the start of the program.
     * That is: create the initial objects and add them to the world.
     */
    private void prepare()
    {

        GoldBar goldBar = new GoldBar();
        addObject(goldBar,60,36);
        //Counter counter = new Counter();
        //addObject(counter,155,53);

        //add the counter to the world
        counter = new Counter("Gold: ");
        addObject(counter, 155, 53);

        RecruitSkellyButton button1 =  new  RecruitSkellyButton(counter);
        addObject(button1, 414, 530);

        addObject(new SmallGoldBar(), 300, 300);        
        SmallGoldBar smallGoldBar2 = new SmallGoldBar();
        addObject(smallGoldBar2,297,400);
        SmallGoldBar smallGoldBar3 = new SmallGoldBar();
        addObject(smallGoldBar3,424,296);
        SmallGoldBar smallGoldBar4 = new SmallGoldBar();
        addObject(smallGoldBar4,422,401);
        SmallGoldBar smallGoldBar5 = new SmallGoldBar();
        addObject(smallGoldBar5,563,291);
        SmallGoldBar smallGoldBar6 = new SmallGoldBar();
        addObject(smallGoldBar6,562,401);
    }
    
    public Counter getCounter() {
        return counter;
    }
}
here is my counter class:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Counter here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Counter extends Actor
{
    //private static final Color transparent = new Color(0,0,0,0);
    private GreenfootImage background;
    private int value;
    //private int target;
    private String prefix;
    public Counter(String prefix)
    {
        background = new GreenfootImage("Counter.png");
        background.scale(120,29);
        value = 0;
        this.prefix = prefix;
        updateImage();
        
    }
    
    
    
    /**
     * Animate the display to count up (or down) to the current target value.
     */
    /* public void act() {
        
    } */
    
    public void add (int amount) {
        value += amount;
        updateImage();
    }
    
    public int getValue() {
        return value;
    }
    
    public void updateImage() {
        GreenfootImage image = new GreenfootImage(background.getWidth(), background.getHeight());
        
        // Draw the actual background image
        image.drawImage(background, 0, 0); 

        // Create the text to display
        GreenfootImage text = new GreenfootImage(prefix + value + "g", 24, Color.BLACK, new Color(0, 0, 0, 0));

        // Draw the text on top of the background image
        image.drawImage(text, (image.getWidth() - text.getWidth()) / 2, 4); // Position the text above the counter image

        setImage(image); // Set the actor's image to the new composite image
    }
}
here is my RecruitSkellyButton: import lang.stride.*; import java.util.*; import greenfoot.*; /** * */ public class RecruitSkellyButton extends Buttons { GreenfootImage button = new GreenfootImage("RecruitSkellyButton1.png"); GreenfootImage buttonHighlighted = new GreenfootImage("RecruitSkellyButton1Highlighted.png"); GreenfootImage buttonGrayed = new GreenfootImage("RecruitSkellyButton1BlackandWhite.png"); private Counter counter; public RecruitSkellyButton(Counter counter){ this.counter = counter; button.scale(150,109); buttonHighlighted.scale(150,109); buttonGrayed.scale(150,109); setImage(button); } /** * Act - do whatever the Option1_Button wants to do. This method is called whenever the 'Act' or 'Run' button gets pressed in the environment. PLACEHOLDER FOR RECRUIT SKELLY BUTTON */ public void act() { Background world = (Background) getWorld(); Counter counter = world.getCounter(); if (counter.getValue() < 5) { //check if the counter has enough gold setImage(buttonGrayed); } else if (counter.getValue() >= 5) { RecruitSkelly skelly1 = new RecruitSkelly(); setImage(button); if (Greenfoot.mouseMoved(this)) { setImage(buttonHighlighted); } if (Greenfoot.mouseClicked(this)) { Arrow arrow1 = new Arrow(); getWorld().addObject(arrow1, 163, 277); Arrow arrow2 = new Arrow(); getWorld().addObject(arrow2, 163, 125); } } } } Note: I get greeted with this terminal message whenever I open greenfoot: 2024-11-18 20:55:35.543 java +: chose IMKClient_Legacy 2024-11-18 20:55:35.544 java +: chose IMKInputSession_LegacyException in thread "AWT-EventQueue-0" java.lang.NegativeArraySizeException: -4 Any help would be appreciated!!
F7R_Beast F7R_Beast

2024/11/23

#
Mr Mohand is useful go ask him! (Chat GPT is always an option if Mohand doesn't know)
Spock47 Spock47

2024/11/23

#
This seems to be an Apple bug: https://github.com/k-pet-group/BlueJ-Greenfoot/issues/2398
You need to login to post a reply.