raycast (射线检测)

raycast(colliders, origin, direction, max_distance=None)

实时发射一条射线,检测射线发射方向上,与射线碰撞的物体。返回碰撞的物体实例。可用来获取机器人运动方向上的其他物体。

参数
  • colliders (list[Sprite]) – 被检测的目标物体列表

  • origin – 射线发出的原点坐标,如 (100, 50)

  • direction (float) – 射线发出的方向,以弧度计算。屏幕正右方为 0 度,逆时针旋转时弧度逐渐增大

  • max_distance (float) – 射线发射的范围,需为正数。默认 None, 设置范围为最大长度

返回

返回被射线穿越的物体列表

返回类型

list[Sprite]

实际案例

>>> # 从(0, 0)沿 0 弧度方向发射一条 100 单位的射线,检查在 enemy_tanks 中被射线穿越的机器人
>>> opt.raycast(colliders=opt.enemy_tanks(), origin=(0, 0), direction=0, max_distance=100)
[tank1, ...]  # 返回被射线穿越的星体
>>> # 从我的坐标,沿着我的运动方向,发射一条射线,检测球是否被射线穿越
>>> opt.raycast(
>>>     colliders=[opt.BALL],  # 待检测的星体
>>>     origin=(opt.TANK.x, opt.TANK.y),  # 射线发出点
>>>     direction=opt.TANK.radian, # 射线发出方向
>>>     max_distance=None,           # 最大距离
>>> )
[]  # 返回空则正前方没有球
[ball,]  # 返回球的实例,则球在正前方