Skip to content

@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

Constructors

constructor

new TopoRobot(stage)

Parameters

NameType
stageStage

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

NameType
valuenumber

Returns

void

Inherited from

TopoBase.direction


x

get x(): number

Returns

number

Inherited from

TopoBase.x

set x(value): void

Parameters

NameType
valuenumber

Returns

void

Inherited from

TopoBase.x


y

get y(): number

Returns

number

Inherited from

TopoBase.y

set y(value): void

Parameters

NameType
valuenumber

Returns

void

Inherited from

TopoBase.y

Methods

addEventListener

addEventListener(type, callback): void

增加事件监听

Parameters

NameTypeDescription
typestring事件类型
callbackFunction

Returns

void

Inherited from

TopoBase.addEventListener


addMarks

addMarks(marks): void

添加一些标记

如果标记名称已存在,则覆盖

Parameters

NameTypeDescription
marksRecord<string, TopoMark>标记

Returns

void

Inherited from

TopoBase.addMarks


back

back(distance): void

后退指定距离

  • 基于当前方向
  • 位置改变
  • 方向不变

Parameters

NameTypeDescription
distancenumber距离

Returns

void

Inherited from

TopoBase.back


carry

carry(obj): TopoRobot

携带物体 (携带后对象的位置和方向将和机器人保持一致)

Parameters

NameType
objNode | Node[]

Returns

TopoRobot


dispatchEvent

dispatchEvent(event): void

分发事件

Parameters

NameType
eventEvent | EventBase

Returns

void

Inherited from

TopoBase.dispatchEvent


faceTo

faceTo(p): any

面向某点 (方向改变,位置不变)

Parameters

NameType
pPointLike

Returns

any

Inherited from

TopoBase.faceTo

faceTo(x, y): any

面向某点 (方向改变,位置不变)

Parameters

NameType
xnumber
ynumber

Returns

any

Inherited from

TopoBase.faceTo


forward

forward(distance): TopoRobot

前进指定距离

  • 基于当前方向
  • 位置改变
  • 方向不变

Parameters

NameTypeDescription
distancenumber距离

Returns

TopoRobot

Inherited from

TopoBase.forward


getMark

getMark(name): TopoMark

获取标记信息

Parameters

NameTypeDescription
namestring标记名称, 如果不存在,则抛出错误

Returns

TopoMark

Inherited from

TopoBase.getMark


getMarks

getMarks(): Record<string, TopoMark>

获取所有标记

Returns

Record<string, TopoMark>

Inherited from

TopoBase.getMarks


hasListener

hasListener(type): boolean

是否有该类型的监听

Parameters

NameType
typestring

Returns

boolean

Inherited from

TopoBase.hasListener


hasMark

hasMark(name): boolean

判断是否存在标记

Parameters

NameTypeDescription
namestring标记名称

Returns

boolean

Inherited from

TopoBase.hasMark


mark

mark(name): TopoRobot

把当前位置打上标记, 如果标记名称已存在,则覆盖

Parameters

NameTypeDescription
namestring标记名称

Returns

TopoRobot

Inherited from

TopoBase.mark


moveTo

moveTo(x, y): TopoRobot

移动到某点,方向不变

Parameters

NameTypeDescription
xnumber点的x坐标
ynumber点的y坐标

Returns

TopoRobot

Inherited from

TopoBase.moveTo

moveTo(p): TopoRobot

移动到某点对象(有x,y坐标的对象都可以),方向不变

Parameters

NameTypeDescription
pPointLikePointLike

Returns

TopoRobot

Inherited from

TopoBase.moveTo


moveToMark

moveToMark(name): TopoRobot

移动到标记位置, 方向不变

Parameters

NameTypeDescription
namestring标记名称, 如果不存在,则抛出错误

Returns

TopoRobot

Inherited from

TopoBase.moveToMark


putDown

putDown(obj): TopoRobot

放在当前位置(脚下)

Parameters

NameType
objNode

Returns

TopoRobot


removeAllMarks

removeAllMarks(): void

移除所有标记

Returns

void

Inherited from

TopoBase.removeAllMarks


removeEventListener

removeEventListener(type, callback): any

移除一个事件监听

Parameters

NameType
typestring
callbackFunction

Returns

any

Inherited from

TopoBase.removeEventListener


removeMark

removeMark(name): boolean

移除指定的标记

Parameters

NameTypeDescription
namestring标记名称

Returns

boolean

Inherited from

TopoBase.removeMark


reset

reset(): TopoRobot

Returns

TopoRobot

Overrides

TopoBase.reset


restoreToMark

restoreToMark(name): TopoRobot

位置和方向恢复到标记时的状态

Parameters

NameTypeDescription
namestring标记名称, 如果不存在,则抛出错误

Returns

TopoRobot

Inherited from

TopoBase.restoreToMark


setBody

setBody(node): TopoRobot

设置机器人的身体

Parameters

NameType
nodeNode

Returns

TopoRobot


throw

throw(obj, angle?, distance?): TopoRobot

扔出物体 (朝指定方向扔出指定距离)

Parameters

NameTypeDefault valueDescription
objNodeundefined
anglenumber0相对当前朝向的角度, 0度表示正前方, -90度表示左手方向, 90度表示右手方向
distancenumber0扔出的距离

Returns

TopoRobot


throwTo

throwTo(obj, p): any

将物体抛向指定坐标

Parameters

NameTypeDescription
objNode要抛出的物体
pPointLike目标坐标

Returns

any

throwTo(obj, x, y): any

将物体抛向指定坐标

Parameters

NameTypeDescription
objNode要抛出的物体
xnumber目标x坐标
ynumber目标y坐标

Returns

any


turn

turn(angle): TopoRobot

转向 (增量:基于当前方向)

  1. 在当前已经转向的基础上,再转向指定角度
  2. 负数为逆时针(向左),正数为顺时针(向右)

Parameters

NameTypeDescription
anglenumber角度(弧度制) 2*PI为一周

Returns

TopoRobot

Inherited from

TopoBase.turn


turnLeft

turnLeft(angle?): TopoRobot

左转(逆时针), 基于当前方向

Parameters

NameTypeDescription
anglenumber角度(弧度制) 2*PI为一周

Returns

TopoRobot

Inherited from

TopoBase.turnLeft


turnRight

turnRight(angle?): TopoRobot

右转(顺时针), 基于当前方向

Parameters

NameTypeDescription
anglenumber角度(弧度制) 2*PI为一周

Returns

TopoRobot

Inherited from

TopoBase.turnRight


turnTo

turnTo(angle): TopoRobot

转向到指定角度(绝对角度,无论之前转向了多少)

Parameters

NameTypeDescription
anglenumber角度(弧度制) 2*PI为一周

Returns

TopoRobot

Inherited from

TopoBase.turnTo