我有一个由一个子类定义的“生命条”,并在另一个子类中调用它,但由于某种原因,我和我的老师都无法让它更新......为什么会这样?
这是名为 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();
}
}
}