跳到主要内容

场景点

点表示XY平面上的位置。引擎内部不会修改一个已有点的位置(建议也不要自己去修改),所有会返回点的API都会返回一个创建出来的点。例如将点向某个方向移动,实际上是创建了一个新的点,而不是修改了传入的点。与服务器使用的点不同,客户端使用的点包含 高度 ,但在对2个点之间求长度或角度时,依然只计算XY平面。

创建

  • 参数
    • x (number) - X坐标
    • y (number) - Y坐标
    • z (number) - 高度
  • 返回
    • point (point) - 点
local point = base.point(x, y)

angle

求角度

  • 参数
    • target (point) - 目标点
  • 返回
    • angle (number) - pointtarget的方向

返回值范围为(-180, 180]。作为一个常用操作,我们提供了一个语法糖point / target(该语法糖即将被废弃)

local angle = point1:angle(point2)
local angle = point1 / point2 -- 除法操作符版本即将被废弃

copy

复制

  • 返回
    • new_point (point) - 复制出来的点
local new_point = point:copy()

distance

求距离

  • 参数
    • target (point) - 目标点
  • 返回
    • distance (number) - pointtarget的距离

作为一个常用操作,我们提供了一个语法糖point * target(该语法糖即将被废弃)

local distance = point1:distance(point2)
local distance = point1 * point2 -- 乘号的语法糖即将被废弃

get_height

获取高度

  • 返回
    • height (number) - 高度
local height = point:get_height()

get_point

获取点

  • 返回
    • point (point) - 自己

这个方法不会创建一个新的点,返回的点就是对象自己。

local point = point:get_point()

get_position

获取位置

  • 返回
    • position (position) - 画面位置

获取点对应的画面位置。

local position = point:get_position()

get_xy

获取坐标

  • 返回
    • x (number) - X坐标
    • y (number) - Y坐标
local x, y = point:get_xy()

is_block

当前坐标在当前场景下是否是碰撞

  • 返回
    • flag (boolean) - 是否是碰撞(有任意非通行bit都算碰撞)。如果返回nil则表示客户端Collision.dat读取有问题
local flag = point:is_block()

移动

  • 参数
    • angle (number) - 方向
    • distance (number) - 距离
  • 返回
    • new_point (point) - 新的点

作为一个常用操作,我们提供了一个语法糖point - {angle, distance}(该语法糖即将被废弃)

local new_point = point - {anlge, distance}   -- 使用减号操作符的版本即将被废弃
local new_point = point:polar_to{angle, distance}

取反

  • 返回
    • new_point (point) - 新的点, 这个点的x,y,z = -x,-y,-z
local new_point = -point  -- 点被反转了

相加

  • 参数
    • point2 (point)
  • 返回
    • new_point (point) 新的点

[new_x, new_y, new_z] = [self.x + point2.x, self.y + point2.y, self.z + point2.z]

local new_point = point + point2

坐标系映射

  • 参数 origin (point) 目标坐标系的原点 facing (number) 目标坐标系在z轴旋转的角度
  • 返回
    • new_point (point) 相对于目标坐标系的位置

self的当前坐标系是: origin: base.point(0, 0), 0), facing: 0 将self从当前坐标系映射到坐标系(origin, facing)后, 返回self在该坐标系里的位置

local origin = {300, 300}
local facing = 45
local new_point = point:to_coordinate(origin, facing)