Помощь по проекту - Greenfoot/javascript

У меня есть "полоса жизни", определенная одним подклассом, и я называю ее другим, но по какой-то причине мой учитель или я не могли получить ее для обновления... какая-либо причина, почему это так?

Вот метод "бар жизни", названный счет:

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.*;
/**
 * Write a description of class Score here.
 * 
 * @author James Brown
 * @version 1.0
 */
public class Score extends Actor
{
    Font font = new Font("Dialog", Font.BOLD, 20);
    Color darkGreen = new Color(255, 51, 0);
    Color green = new Color(255, 0, 0, 150);
    GreenfootImage image = new GreenfootImage(100,30);
    private int score = 3;
    /**
     * Score - sets up the score object
     */
    public Score()
    {
        image.setFont(font);
        setText();
        setImage(image);
    }
    /**
     * setText - sets the text of the score
     */
    private void setText()
    {
        image.clear();
        image.setColor(green);

        image.drawString("Life:" + score, ShiftSouth(1,2), ShiftEast(15,2));
        image.setColor(darkGreen);

        image.drawString("Life:" + score, 1, 15);
    }
    /**
     * updateScore - adds score then runs setText
     */
    public void updateScore()
    {
        score--;
        setText();
        setImage(image);
    }
    /**
     * ShiftSouth - shifts the coordinates down by the distance handed to it
     * @param int p
     * @param int distance
     */
    public int ShiftSouth(int p, int distance){
        return(p+distance);
    }
    /**
     * ShiftEast - shifts the coordinates right by the distance handed to it
     * @param int p
     * @param int distance
     */
    public int ShiftEast(int p, int distance){
        return(p+distance);
    }
    public void setSpeed()
    {
        if(score>20)
        {
            Greenfoot.setSpeed(30);
        }
    }    
}

и вот класс, пытающийся вызвать некоторые из методов "lifebar":

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class MachoMan here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class MachoMan extends  Actor
{
    public int life = 3;
    Score score = new Score();

    /**
     * Act - do whatever the MachoMan wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        moveAround();
        eat();
        eatHulk();
    } 
    public void moveAround()
    {

        move(2);
        if (Greenfoot.getRandomNumber(100) <10)
        {
           turn(Greenfoot.getRandomNumber(90) -45);
        }
        if (getX() <=5 || getX() >= getWorld().getWidth()-5 )
        {
            turn(180);
        }
        if (getY() <=5 || getY() >= getWorld().getHeight()-5 )
        {
            turn(180);
        }

    }    
    public void eat()
    {
        Actor belt;
        belt = getOneObjectAtOffset(0, 0, Belt.class);
        if( belt != null)
        {
            World world;
            world= getWorld();
            world.removeObject(belt);
            world.addObject(belt,Greenfoot.getRandomNumber(600), Greenfoot.getRandomNumber(400));
            Greenfoot.playSound("Macho.wav");
            life = life - 1;
            score.updateScore();
        }

    }   
    public void eatHulk()
    {
        Actor hulk;
        hulk = getOneObjectAtOffset(0, 0, Hulkamania.class);
        if( hulk != null  && life < 1)
        {
            World world;
            world = getWorld();
            world.removeObject(hulk);
            Greenfoot.playSound("Macho.wav");
            world.addObject(new GameOver(),300, 200);
            Greenfoot.stop();
        }
    }
}

1 ответ

В MachoMan вы создаете объект Score, но не добавляете его в мир. Если у вас есть другой объект Score в мире, он не совпадает с этим, поэтому он не будет обновляться. Вот несколько решений:

  • Позвольте MachoMan создать счет, но добавьте его в мир, используя getWorld().addObject(...)в addedToWorld(World world) метод
  • Заставьте MachoMan получить счет, используя getWorld().getObjects(Score.class).get(0) в addedToWorld(World world) метод
  • Если вы создаете MachoMan и счет в мире, то сначала вы можете создать счет и передать его в качестве параметра конструктору MachoMan.
Другие вопросы по тегам