跳到主要内容

detect 探测目标角色,将符合条件的角色添加到目标列表中

detect

类型: MethodDeclaration

所属类: TargetManager

定义位置: actor.ts

描述

探测目标角色,将符合条件的角色添加到目标列表中

参数 distance: 探测距离(单位:图块)

参数 selector: 目标角色选择器

参数 inSight: 是否判断目标角色在视野中可见

返回值:是否已经存在目标

参数

参数名类型描述默认值
distancenumber--
selectorActorSelector--
inSightboolean-false

返回值

类型: boolean

是否已经存在目标

源代码

位置: 第 5128 行

public detect(distance: number, selector: ActorSelector, inSight: boolean = false): boolean {
const inspector = Actor.inspectors[selector]
const owner = this.actor
const ox = owner.x
const oy = owner.y
// 获取探测范围所在的角色区间列表
const cells = Scene.actor.partition.get(
ox - distance,
oy - distance,
ox + distance,
oy + distance,
)
const square = distance ** 2
const count = cells.count
// 查找所有角色区间
for (let i = 0; i < count; i++) {
const actors = cells[i]!
const length = actors.length
// 查找区间中的所有角色
for (let i = 0; i < length; i++) {
const actor = actors[i] as Actor
// 如果角色已激活,距离小于等于探测距离,且符合条件,则把该角色添加到目标列表中
if (actor.active && (ox - actor.x) ** 2 + (oy - actor.y) ** 2 <= square &&
inspector(owner, actor) && (inSight === false ||
actor.parent!.scene.isInLineOfSight(ox, oy, actor.x, actor.y))) {
this.append(actor)
}
}
}
return this.exists()
}

文档生成时间:2025/7/7 12:07:06