0

我有一个由一个子类定义的“生命条”,并在另一个子类中调用它,但由于某种原因,我和我的老师都无法让它更新......为什么会这样?

这是名为 score 的“生命条”方法:

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();
        }
    }
}
4

1 回答 1

0

在 MachoMan 中,您创建了一个 Score 对象,但您没有将它添加到世界中。如果世界上有另一个 Score 对象,它不在同一个对象中,因此它不会更新。这里有几个解决方案:

  • 让 MachoMan 创建乐谱,但在方法中使用getWorld().addObject(...),将其添加到世界中addedToWorld(World world)
  • getWorld().getObjects(Score.class).get(0)使用addedToWorld(World world)方法让 MachoMan 获取分数
  • 如果您在世界上创建 MachoMan 和分数,那么您可以先创建分数并将分数作为参数传递给 MachoMan 的构造函数。
于 2016-05-21T12:05:06.107 回答