greenfoot
Class Actor

java.lang.Object
  extended by greenfoot.Actor

public abstract class Actor
extends java.lang.Object

在Greenfoot世界中,每一个物体(对象 Object)都称为一个 Actor。每个Actor都拥有一个相对于世界的坐标,和一个用于显示的外观(也就是:一个图标)。

Actor 本身通常不会被实例化,而是作为其他各种各样Actor子类的共同超类(父类 Superclass)而存在。任何想要存在和显示于Greenfoot世界中的对象,都必须继承自Actor类。然后各个子类,便可以重新定义它们自己的外观和行为。

这个类最为核心的“灵魂”便是 act 方法。这个方法会在Greenfoot界面中的“Act”按钮被按下,或者“Run”按钮被激活的情况下,被Greenfoot框架自动调用。Actor类本身的act方法是留空的,各个子类通常会重写此方法来定义自己的行动方式。

Version:
2.5
Author:
Poul Henriksen
译者:
Eric Pan(Upupzealot)

翻译有误请联系:hzxjhspxn@163.com


Constructor Summary
Actor()
          创建一个Actor。
 
Method Summary
 void act()
          每个actor的act方法都会被Greenfoot框架在每一个动作步(逻辑帧)中按指定的顺序依次调用,从而使得actor对象能够执行act方法所描述的动作行为。
protected  void addedToWorld(World world)
          Greenfoot框架会在本actor被添加到对应的world后,立即调用此方法。
 GreenfootImage getImage()
          返回用于显示本actor外观的图片。
protected  java.util.List getIntersectingObjects(java.lang.Class cls)
          返回所有与本对象相交的指定类型的其他对象。
protected  java.util.List getNeighbours(int distance, boolean diagonal, java.lang.Class cls)
          返回本对象周围指定距离内指定类型的其他对象。
protected  java.util.List getObjectsAtOffset(int dx, int dy, java.lang.Class cls)
          返回所有与所给坐标格中心相交的指定类型的对象(坐标相对于本对象而言)。
protected  java.util.List getObjectsInRange(int radius, java.lang.Class cls)
          返回本对象周围指定半径内指定类型的其他对象。
protected  Actor getOneIntersectingObject(java.lang.Class cls)
          返回一个与本对象相交的指定类型的其他对象。
protected  Actor getOneObjectAtOffset(int dx, int dy, java.lang.Class cls)
          返回一个坐落于指定坐标的actor对象(坐标相对于本对象而言)。
 int getRotation()
          返回本对象当前的角度
 World getWorld()
          返回本对象所处的世界。
 int getX()
          返回本对象的x坐标。
 int getY()
          返回本对象的y坐标。
protected  boolean intersects(Actor other)
          检测本对象与所给对象是否相交。
protected  boolean isTouching(java.lang.Class cls)
          检测本对象是否与任何所给类型的其他对象相接触。
 void move(int distance)
          沿着目前的朝向将本对象移动指定的距离。
protected  void removeTouching(java.lang.Class cls)
          移除一个与本对象接触的所给类型的对象(如果存在的话)。
 void setImage(GreenfootImage image)
          设定指定的图片作为本actor的外观。
 void setImage(java.lang.String filename)
          设置指定的图片文件作为本actor的外观。
 void setLocation(int x, int y)
          为本对象设定一个新的坐标。
 void setRotation(int rotation)
          设定本对象的角度(朝向)。
 void turn(int amount)
          将本对象旋转指定的角度 (以°为单位)。
 void turnTowards(int x, int y)
          令本对象面朝指定的坐标格。
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Actor

public Actor()
创建一个 Actor。 该对象会拥有一个默认的图标外观。

Method Detail

act

public void act()
每个actor的act方法都会被Greenfoot框架在每一个动作步(逻辑帧)中按指定的顺序依次调用,从而使得actor对象能够执行act方法所描述的动作行为。

默认的act方法什么也不会做。该方法应当在各个Actor类的子类中重写,从而定义各子类对象的动作行为。

(译者注:“指定的顺序”原文为“in unspecified order”。事实上各类actor的act顺序可在world中通过setActOrder方法规定,同类actor的act顺序由加入world的先后顺序决定。故此处翻译为“按指定的顺序”。)

(译者注:act方法是各Actor子类的核心方法。在每一个act循环(或称“主循环”“逻辑帧”“动作步”)中,Greenfoot会率先调用world的act方法,然后按照world类中setActOrder方法所规定的顺序依次调用当前world中每一个actor的act方法。在每一个act循环中,world的act方法、每个actor的act方法均被调用一次。)


getX

public int getX()
         throws java.lang.IllegalStateException
返回本对象的x坐标。所返回的值为本actor在world中所处坐标格的水平索引值。

(译者注:Greenfoot世界的坐标系统时基于“cell”即“坐标格”的。一个坐标格的尺寸可以不是1*1像素的。例如当坐标格的尺寸为3*3时,位于像素坐标(1,4)的actor的坐标被认为是(0,1)。你可以在你的world类的super(int, int, int)或super(int, int, int, boolean)行中调整第三个参数来指定坐标格的像素尺寸。)

返回:
本对象的x坐标
抛出:
java.lang.IllegalStateException - 倘若本actor尚未被添加到一个world中。

getY

public int getY()
返回本对象的y坐标。所返回的值为本actor在world中所处坐标格的竖直索引值。

(译者注:Greenfoot世界的坐标系统时基于“cell”即“坐标格”的。一个坐标格的尺寸可以不是1*1像素的。例如当坐标格的尺寸为3*3时,位于像素坐标(1,4)的actor的坐标被认为是(0,1)。你可以在你的world类的super(int, int, int)或super(int, int, int, boolean)行中调整第三个参数来指定坐标格的像素尺寸。)

返回:
本对象的y坐标
抛出:
java.lang.IllegalStateException - 倘若本actor尚未被添加到一个world中。

getRotation

public int getRotation()
返回本对象目前的旋转角度。旋转角是一个角度(°)值,取值范围在(0~359)之间。0°表示朝向东面(世界的右手侧),角度沿顺时针方向增大。

返回:
旋转角的度数
参见:
setRotation(int)

setRotation

public void setRotation(int rotation)
设置本对象的旋转角度。旋转角是一个角度(°)值,取值范围在(0~359)之间。0°表示朝向东面(世界的右手侧),角度沿顺时针方向增大。

参数:
rotation - 旋转角的度数
参见:
turn(int)

turnTowards

public void turnTowards(int x,
                        int y)
使得本actor对象面朝指定坐标。

参数:
x - 要面向的坐标格的x坐标
y - 要面向的坐标格的y坐标

setLocation

public void setLocation(int x,
                        int y)
为本对象设定一个新的坐标。 将本actor移动到所指定的位置。该位置指代world中的一个坐标格所处的位置。

若此方法在子类中被重写,请务必以"super.setLocation(x,y)"调用父类方法,以免引起无限递归。

参数:
x - 指定位置的x轴坐标
y - 指定位置的y轴坐标
参见:
move(int)

move

public void move(int distance)
M沿着目前的朝向将本对象移动指定的距离。

朝向即旋转角,可由setRotation(int) 方法设定。

参数:
distance - 移动的距离(以坐标格为单位);负的距离值将引起反方向的移动。
参见:
setLocation(int, int)

turn

public void turn(int amount)
将本对象旋转指定的角度 (以°为单位)。

参数:
amount - 旋转的角度; 正的旋转角值将引起顺时针向的转动。
参见:
setRotation(int)

getWorld

public World getWorld()
返回本actor对象所处的世界。

返回:
所处的世界

addedToWorld

protected void addedToWorld(World world)
Greenfoot框架会在本actor被添加到对应的world后,立即调用此方法。 本方法可以被重写,用于定制本actor被添加到对应world之后即刻采取的动作行为。

该方法默认什么也不做。

(译者注:在本方法被调用前,调用getX()或getY()方法是不允许的,否则会抛出异常;可以setLocation(),但不会生效;可以正确地使用getImage和setImage方法。在对应的world调用addObject方法之后,Greenfoot首先会调用setLocation方法设定addObject方法中指定的位置,然后立即调用本方法。)

参数:
world - 本对象被添加进入的世界

getImage

public GreenfootImage getImage()
返回用于显示本actor外观的图片。对该图片进行修改会引起本actor的外观变化。

返回:
对象的外观图片

setImage

public void setImage(java.lang.String filename)
              throws java.lang.IllegalArgumentException
设置指定的图片文件作为本actor的外观。支持jpeg、gif和png格式。图片文件应被正确地放置在工程目录下。

(译者注:仅支持静态gif图片,无法显示动画效果。)

(译者注:图片文件应统一放在“工程目录/images/”路径下。)

参数:
filename - 图片文件的文件名(译者注:应包含后缀,后缀区分大小写。可以是基于images目录的相对路径。)
抛出:
java.lang.IllegalArgumentException - 倘若无法加载指定的图片。(译者注:如该文件不存在或错误的文件名。)

setImage

public void setImage(GreenfootImage image)
设定指定的图片作为本actor的外观。

参数:
image - 外观图片
参见:
setImage(String)

intersects

protected boolean intersects(Actor other)
检测本对象与指定的对象是否相交。

返回:
倘若相交返回true,否则false。

getNeighbours

protected java.util.List getNeighbours(int distance,
                                       boolean diagonal,
                                       java.lang.Class cls)
返回本对象周围指定距离内指定类型的其他对象。本方法只考虑逻辑意义上的坐标点,忽略图片尺寸所带来的伸展部分。因故,它通常在那些所有对象都可以被包含在单个坐标格中的游戏案例中被使用。

所有可以在“distance”参数所规定的“步”数内可达的坐标格都会被纳入考虑的范围。'diagonal'参数决定了,每一“步”是只能迈向主要的四个方向,还是包含对角线方向在内的八个方向。因故,若distance/diagonal参数的取值为(1,false),该方法会计算四个格子;若取值为(1,false)则会计算八个格子。

参数:
distance - 搜索临近对象的步数距离(以坐标格为单位)。
diagonal - 若为true,则包含对角线方向
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)
返回:
一个包含了所有满足条件的周围对象的List

getObjectsAtOffset

protected java.util.List getObjectsAtOffset(int dx,
                                            int dy,
                                            java.lang.Class cls)
返回所有与所给坐标格中心相交的指定类型的对象(坐标相对于本对象而言)。

参数:
dx - x坐标,相对于本对象而言
dy - y坐标,相对于本对象而言
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)
返回:
一个包含了便宜位置处所有满足条件的对象的List。若偏移值为0,这个List也将包含自身。

getOneObjectAtOffset

protected Actor getOneObjectAtOffset(int dx,
                                     int dy,
                                     java.lang.Class cls)
返回一个与所给坐标格中心相交的指定类型的对象(坐标相对于本对象而言)。所找到的对象的类型被限制在“cls”参数所指定的类型,或者是该类的子类。若在该坐标处找到了不止一个满足要求的对象,只返回它们中的一个。

参数:
dx - x坐标,相对于本对象而言
dy - y坐标,相对于本对象而言
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)
返回:
一个处于指定位置的满足条件的对象;若一个都没有找到,则返回

getObjectsInRange

protected java.util.List getObjectsInRange(int radius,
                                           java.lang.Class cls)
返回本对象周围指定半径内指定类型的其他对象。半径范围内的对象指那些自身中心点到本对象中心点的距离小于或等于“radius”参数值的对象。

参数:
radius - 搜索范围的半径(以坐标格为单位)
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)

getIntersectingObjects

protected java.util.List getIntersectingObjects(java.lang.Class cls)
返回所有与本对象相交的指定类型的其他对象。该方法会考虑图片尺寸所带来的伸展。

参数:
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)

getOneIntersectingObject

protected Actor getOneIntersectingObject(java.lang.Class cls)
返回一个与本对象相交的指定类型的其他对象。该方法会考虑图片尺寸所带来的伸展。

参数:
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)

isTouching

protected boolean isTouching(java.lang.Class cls)
检测本对象是否与任何指定类型的其他对象相接触。

参数:
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)

removeTouching

protected void removeTouching(java.lang.Class cls)
移除一个与本对象接触的指定类型的对象(如果存在的话)。

参数:
cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)


Greenfoot homepage