Appearance
@jtopo/extensions / TopoRobot
Class: TopoRobot
一个抽象的'机器人',行为贴合人类直觉。
机器人可以移动、前进、左转、右转、朝向、放下物体等操作。
可以携带一个或多个物体, 被携带的物体坐标和旋转角度会始终和机器人保持一致。
适合模拟一些会移动的物体,如:机器人、车辆、搬运工等。
js
// 创建一个机器人
const robot = new TopoRobot(stage);
// 创建一个物体,作为机器人可视化的实体,否则就是个完全隐形的
const body = new Node(stage, 0, 0);
layer.addChild(body);
robot.setBody(body);
// 创建一个物体
const object = new Node(stage, 100, 100);
layer.addChild(object);
robot.faceTo(object) // 面向物体
.moveTo(object) // 移动到物体位置
.carry(object) // 拿起物体
.faceTo({x: 100, y: 200}) // 面向目标点
.forward(100) // 前进100
.turnLeft() // 左转
.forward(100) // 前进100
.putDown(object); // 放下物体
// 上面一系列动作将会在一瞬间完成
// 如果需要分步骤执行,可以使用动画
// 结合await语法甚至可以方便的在for循环内执行各种异步动画
// 使用机器人动画器行动
let animator = robot.animator;
for(let i=0; i<10; i++) {
await animator.faceTo(object); // 面向物体, 默认会有1秒转动的动画
await animator.moveTo(object, {duration: 1000}); // 1秒的时间移动到物体位置
await animator.carry(object) // 携带物体
await animator.turnLeft(Math.PI / 2); // 左转90度
// 0.3秒的时间把物体扔向前方100的距离
let angle = 0; // 0度,表示正前方, -90度表示左手方向, 90度表示右手方向
let distance = 100;
await animator.throw(object,angle, distance, {duration: 300});
}
// 需要瞬间完成的,直接使用robot对象
// 需要动画的,使用animator对象
Hierarchy
TopoBase
↳
TopoRobot
Table of contents
Constructors
Properties
Accessors
Methods
- addEventListener
- addMarks
- back
- carry
- dispatchEvent
- faceTo
- forward
- getMark
- getMarks
- hasListener
- hasMark
- mark
- moveTo
- moveToMark
- putDown
- removeAllMarks
- removeEventListener
- removeMark
- reset
- restoreToMark
- setBody
- throw
- throwTo
- turn
- turnLeft
- turnRight
- turnTo
Constructors
constructor
new TopoRobot(stage
)
Parameters
Name | Type |
---|---|
stage | Stage |
Overrides
TopoBase.constructor
Properties
animator
animator: TopoRobotAnimator
动画控制器
body
Optional
body: Node
机器人的身体
carriedObjects
carriedObjects: Node
[] = []
被拿起的物体列表
Accessors
direction
get
direction(): number
Returns
number
Inherited from
TopoBase.direction
set
direction(value
): void
Parameters
Name | Type |
---|---|
value | number |
Returns
void
Inherited from
TopoBase.direction
x
get
x(): number
Returns
number
Inherited from
TopoBase.x
set
x(value
): void
Parameters
Name | Type |
---|---|
value | number |
Returns
void
Inherited from
TopoBase.x
y
get
y(): number
Returns
number
Inherited from
TopoBase.y
set
y(value
): void
Parameters
Name | Type |
---|---|
value | number |
Returns
void
Inherited from
TopoBase.y
Methods
addEventListener
addEventListener(type
, callback
): void
增加事件监听
Parameters
Name | Type | Description |
---|---|---|
type | string | 事件类型 |
callback | Function |
Returns
void
Inherited from
TopoBase.addEventListener
addMarks
addMarks(marks
): void
添加一些标记
如果标记名称已存在,则覆盖
Parameters
Name | Type | Description |
---|---|---|
marks | Record <string , TopoMark > | 标记 |
Returns
void
Inherited from
TopoBase.addMarks
back
back(distance
): void
后退指定距离
- 基于当前方向
- 位置改变
- 方向不变
Parameters
Name | Type | Description |
---|---|---|
distance | number | 距离 |
Returns
void
Inherited from
TopoBase.back
carry
carry(obj
): TopoRobot
携带物体 (携带后对象的位置和方向将和机器人保持一致)
Parameters
Name | Type |
---|---|
obj | Node | Node [] |
Returns
dispatchEvent
dispatchEvent(event
): void
分发事件
Parameters
Name | Type |
---|---|
event | Event | EventBase |
Returns
void
Inherited from
TopoBase.dispatchEvent
faceTo
faceTo(p
): any
面向某点 (方向改变,位置不变)
Parameters
Name | Type |
---|---|
p | PointLike |
Returns
any
Inherited from
TopoBase.faceTo
faceTo(x
, y
): any
面向某点 (方向改变,位置不变)
Parameters
Name | Type |
---|---|
x | number |
y | number |
Returns
any
Inherited from
TopoBase.faceTo
forward
forward(distance
): TopoRobot
前进指定距离
- 基于当前方向
- 位置改变
- 方向不变
Parameters
Name | Type | Description |
---|---|---|
distance | number | 距离 |
Returns
Inherited from
TopoBase.forward
getMark
getMark(name
): TopoMark
获取标记信息
Parameters
Name | Type | Description |
---|---|---|
name | string | 标记名称, 如果不存在,则抛出错误 |
Returns
TopoMark
Inherited from
TopoBase.getMark
getMarks
getMarks(): Record
<string
, TopoMark
>
获取所有标记
Returns
Record
<string
, TopoMark
>
Inherited from
TopoBase.getMarks
hasListener
hasListener(type
): boolean
是否有该类型的监听
Parameters
Name | Type |
---|---|
type | string |
Returns
boolean
Inherited from
TopoBase.hasListener
hasMark
hasMark(name
): boolean
判断是否存在标记
Parameters
Name | Type | Description |
---|---|---|
name | string | 标记名称 |
Returns
boolean
Inherited from
TopoBase.hasMark
mark
mark(name
): TopoRobot
把当前位置打上标记, 如果标记名称已存在,则覆盖
Parameters
Name | Type | Description |
---|---|---|
name | string | 标记名称 |
Returns
Inherited from
TopoBase.mark
moveTo
moveTo(x
, y
): TopoRobot
移动到某点,方向不变
Parameters
Name | Type | Description |
---|---|---|
x | number | 点的x坐标 |
y | number | 点的y坐标 |
Returns
Inherited from
TopoBase.moveTo
moveTo(p
): TopoRobot
移动到某点对象(有x,y坐标的对象都可以),方向不变
Parameters
Name | Type | Description |
---|---|---|
p | PointLike | PointLike |
Returns
Inherited from
TopoBase.moveTo
moveToMark
moveToMark(name
): TopoRobot
移动到标记位置, 方向不变
Parameters
Name | Type | Description |
---|---|---|
name | string | 标记名称, 如果不存在,则抛出错误 |
Returns
Inherited from
TopoBase.moveToMark
putDown
putDown(obj
): TopoRobot
放在当前位置(脚下)
Parameters
Name | Type |
---|---|
obj | Node |
Returns
removeAllMarks
removeAllMarks(): void
移除所有标记
Returns
void
Inherited from
TopoBase.removeAllMarks
removeEventListener
removeEventListener(type
, callback
): any
移除一个事件监听
Parameters
Name | Type |
---|---|
type | string |
callback | Function |
Returns
any
Inherited from
TopoBase.removeEventListener
removeMark
removeMark(name
): boolean
移除指定的标记
Parameters
Name | Type | Description |
---|---|---|
name | string | 标记名称 |
Returns
boolean
Inherited from
TopoBase.removeMark
reset
reset(): TopoRobot
Returns
Overrides
TopoBase.reset
restoreToMark
restoreToMark(name
): TopoRobot
位置和方向恢复到标记时的状态
Parameters
Name | Type | Description |
---|---|---|
name | string | 标记名称, 如果不存在,则抛出错误 |
Returns
Inherited from
TopoBase.restoreToMark
setBody
setBody(node
): TopoRobot
设置机器人的身体
Parameters
Name | Type |
---|---|
node | Node |
Returns
throw
throw(obj
, angle?
, distance?
): TopoRobot
扔出物体 (朝指定方向扔出指定距离)
Parameters
Name | Type | Default value | Description |
---|---|---|---|
obj | Node | undefined | |
angle | number | 0 | 相对当前朝向的角度, 0度表示正前方, -90度表示左手方向, 90度表示右手方向 |
distance | number | 0 | 扔出的距离 |
Returns
throwTo
throwTo(obj
, p
): any
将物体抛向指定坐标
Parameters
Name | Type | Description |
---|---|---|
obj | Node | 要抛出的物体 |
p | PointLike | 目标坐标 |
Returns
any
throwTo(obj
, x
, y
): any
将物体抛向指定坐标
Parameters
Name | Type | Description |
---|---|---|
obj | Node | 要抛出的物体 |
x | number | 目标x坐标 |
y | number | 目标y坐标 |
Returns
any
turn
turn(angle
): TopoRobot
转向 (增量:基于当前方向)
- 在当前已经转向的基础上,再转向指定角度
- 负数为逆时针(向左),正数为顺时针(向右)
Parameters
Name | Type | Description |
---|---|---|
angle | number | 角度(弧度制) 2*PI为一周 |
Returns
Inherited from
TopoBase.turn
turnLeft
turnLeft(angle?
): TopoRobot
左转(逆时针), 基于当前方向
Parameters
Name | Type | Description |
---|---|---|
angle | number | 角度(弧度制) 2*PI为一周 |
Returns
Inherited from
TopoBase.turnLeft
turnRight
turnRight(angle?
): TopoRobot
右转(顺时针), 基于当前方向
Parameters
Name | Type | Description |
---|---|---|
angle | number | 角度(弧度制) 2*PI为一周 |
Returns
Inherited from
TopoBase.turnRight
turnTo
turnTo(angle
): TopoRobot
转向到指定角度(绝对角度,无论之前转向了多少)
Parameters
Name | Type | Description |
---|---|---|
angle | number | 角度(弧度制) 2*PI为一周 |
Returns
Inherited from
TopoBase.turnTo