项目帮助 - Greenfoot/javascript.



我有一个由一个子类定义的"生命栏",并在另一个子类中调用它,但由于某种原因,我和我的老师都无法更新它......有什么原因吗?

这是"生命条"方法,命名为 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();
        }
    }
}

在 MachoMan 中,您可以创建一个 Score 对象,但不将其添加到世界中。 如果世界上有另一个 Score 对象,它不在同一对象中,因此它不会更新。 以下是一些解决方案:

  • 让MachoMan创建乐谱,但使用getWorld().addObject(...)将其添加到世界中,以addedToWorld(World world)方法
  • 让大男子主义获取分数,在addedToWorld(World world)方法中使用getWorld().getObjects(Score.class).get(0)
  • 如果你正在世界上创建 MachoMan 和分数,那么你可以先创建分数并将分数作为参数传递给 MachoMan的构造函数。

最新更新