新增地图摄像机类
This commit is contained in:
parent
1b9696bd5d
commit
123f00c426
|
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
文件名:MapCamera.nut
|
||||||
|
路径:User/Object/Map/MapCamera.nut
|
||||||
|
创建日期:2024-12-22 21:56
|
||||||
|
文件用途:
|
||||||
|
*/
|
||||||
|
class MapCamera {
|
||||||
|
//摄像机坐标
|
||||||
|
X = 0;
|
||||||
|
Y = 0;
|
||||||
|
Z = 0;
|
||||||
|
|
||||||
|
NextX = 0;
|
||||||
|
|
||||||
|
//镜头可行坐标
|
||||||
|
MovableAreaX = 0;
|
||||||
|
MovableAreaY = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//背景偏移量
|
||||||
|
BackgroundOffset = 0;
|
||||||
|
//背景层移动速率
|
||||||
|
BackgroundMoveSpeed = 1.0;
|
||||||
|
//人物中线长度
|
||||||
|
CharacterLineLength = 0;
|
||||||
|
|
||||||
|
//地图对象
|
||||||
|
MyMapParent = null;
|
||||||
|
//跟随对象
|
||||||
|
MyFromParent = null;
|
||||||
|
//摄像机朝向
|
||||||
|
Direction = 1;
|
||||||
|
//摄像机朝向时间
|
||||||
|
DirectionTime = 1;
|
||||||
|
|
||||||
|
//缩放比率
|
||||||
|
CameraRate = 1.0;
|
||||||
|
|
||||||
|
constructor(gMap) {
|
||||||
|
MyMapParent = gMap.weakref();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @函数作用:设置跟随对象
|
||||||
|
*/
|
||||||
|
function SetFromParent(FromParent) {
|
||||||
|
MyFromParent = FromParent.weakref();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @函数作用:
|
||||||
|
*/
|
||||||
|
function SetPosition(gx, gy, gz) {
|
||||||
|
X = gx * CameraRate;
|
||||||
|
Y = gy * CameraRate;
|
||||||
|
Z = gz * CameraRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @函数作用: 增加坐标偏移
|
||||||
|
*/
|
||||||
|
function AddPosition(Type, Value) {
|
||||||
|
switch (Type) {
|
||||||
|
case 0: //X
|
||||||
|
X += Value;
|
||||||
|
break;
|
||||||
|
case 1: //Y
|
||||||
|
Y += Value;
|
||||||
|
break;
|
||||||
|
case 2: //Z
|
||||||
|
Z += Value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @函数作用: 通过父对象同步自身坐标
|
||||||
|
*/
|
||||||
|
function SyncPosByFromParent(MillisecondsDuration) {
|
||||||
|
if (MyFromParent) {
|
||||||
|
local R_X, R_Y, R_Z;
|
||||||
|
|
||||||
|
// //X轴移动特殊判断
|
||||||
|
// R_X = MyFromParent.X;
|
||||||
|
// //为超出中线长度时摄像机不会改变位置
|
||||||
|
// if (R_X <= (X + CharacterLineLength) && R_X >= (X - CharacterLineLength)) R_X = X;
|
||||||
|
// //超出以后 补足位置
|
||||||
|
// else if (R_X > (X + CharacterLineLength)) R_X = R_X - CharacterLineLength;
|
||||||
|
// else if (R_X<(X - CharacterLineLength)) R_X = R_X + CharacterLineLength;
|
||||||
|
|
||||||
|
|
||||||
|
//判断是否超出可行区域
|
||||||
|
R_X = Math.Min(Math.Max(MyFromParent.X, 533), MovableAreaX - 533);
|
||||||
|
R_Y = Math.Min(Math.Max(MyFromParent.Y, 300), MovableAreaY - 300);
|
||||||
|
R_Z = MyFromParent.Z;
|
||||||
|
|
||||||
|
SetPosition(R_X, R_Y, R_Z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @函数作用:Update
|
||||||
|
*/
|
||||||
|
function OnUpdate(Dt) {
|
||||||
|
//同步自身与跟随对象的坐标
|
||||||
|
SyncPosByFromParent(Dt);
|
||||||
|
|
||||||
|
//刷新地图图层的坐标
|
||||||
|
foreach(Name, Layer in MyMapParent.LayerObject) {
|
||||||
|
//X屏幕宽度一般 Y屏幕宽度一半 +Z轴运算 在加统一120的偏移 在家background的偏移
|
||||||
|
if (Name == "distantback") {
|
||||||
|
Layer.SetPosition((-X + 533) * BackgroundMoveSpeed, -Y + Z + 300 + 120 + BackgroundOffset);
|
||||||
|
} else {
|
||||||
|
Layer.SetPosition((-X + 533), -Y + Z + 300 + 120 + BackgroundOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue