122 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名: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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |