diff --git a/sqr/User/Object/Object/BaseObject.nut b/sqr/User/Object/Object/BaseObject.nut index 5c7e53c..2ffc658 100644 --- a/sqr/User/Object/Object/BaseObject.nut +++ b/sqr/User/Object/Object/BaseObject.nut @@ -6,6 +6,9 @@ */ class BaseObject extends Actor { + //所在地图 + MySelfMap = null; + //方向 Direction = 1; @@ -73,24 +76,41 @@ class BaseObject extends Actor { Z = vargv[1]; base.MoveTo(Value, vargv[0] - vargv[1]); } - - + SetZOrder(Y); } //传入坐标 xyz 的table 或者 单独传 xyz function MoveBy(Value, ...) { if (vargv.len() == 0) { - X += Value.x; - Y += Value.y; + //如果在地图中 判断是否可行 + if (MySelfMap) { + local pos = MySelfMap.CheckMovableArea(X, Value.x, Y, Value.y); + X += pos.x; + Y += pos.y; + base.MoveBy(pos.x, pos.y - Value.z); + } else { + X += Value.x; + Y += Value.y; + Value.y = Value.y - Value.z; + base.MoveBy(Value); + } Z += Value.z; - Value.y = Value.y - Value.z; - base.MoveBy(Value); } else if (vargv.len() == 2) { - X += Value; - Y += vargv[0]; + //如果在地图中 判断是否可行 + if (MySelfMap) { + local pos = MySelfMap.CheckMovableArea(X, Value, Y, vargv[0]); + X += pos.x; + Y += pos.y; + base.MoveBy(pos.x, pos.y - vargv[1]); + } else { + X += Value; + Y += vargv[0]; + base.MoveBy(Value, vargv[0] - vargv[1]); + } Z += vargv[1]; - base.MoveBy(Value, vargv[0] - vargv[1]); } + SetZOrder(Y); + MySelfMap.CheckMovableAreaTransmit(this, X, Y); } //设置方向