forked from Rowland/EG
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
移动脚本 - 让对象在指定方向上来回移动
|
|
"""
|
|
|
|
from core.script_system import ScriptBase
|
|
import math
|
|
|
|
class MoverScript(ScriptBase):
|
|
"""移动脚本类"""
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
# 移动参数
|
|
self.move_distance = 5.0 # 移动距离
|
|
self.move_speed = 2.0 # 移动速度 (单位/秒)
|
|
self.move_axis = "x" # 移动轴: "x", "y", "z"
|
|
|
|
# 内部变量
|
|
self.start_position = None # 起始位置
|
|
self.current_direction = 1 # 当前移动方向: 1或-1
|
|
self.current_distance = 0.0 # 当前移动距离
|
|
self.is_moving = True # 是否正在移动
|
|
|
|
def start(self):
|
|
"""脚本开始时调用"""
|
|
self.log("移动脚本启动!")
|
|
self.log(f"移动参数: 距离={self.move_distance}, 速度={self.move_speed}, 轴={self.move_axis}")
|
|
|
|
# 记录起始位置
|
|
self.start_position = self.gameObject.getPos()
|
|
self.log(f"起始位置: {self.start_position}")
|
|
|
|
def update(self, dt):
|
|
"""每帧更新"""
|
|
if not self.is_moving or self.start_position is None:
|
|
return
|
|
|
|
# 计算移动增量
|
|
move_delta = self.move_speed * dt * self.current_direction
|
|
self.current_distance += abs(move_delta)
|
|
|
|
# 检查是否需要改变方向
|
|
if self.current_distance >= self.move_distance:
|
|
self.current_direction *= -1
|
|
self.current_distance = 0.0
|
|
|
|
# 应用移动
|
|
current_pos = self.gameObject.getPos()
|
|
new_pos = [current_pos.getX(), current_pos.getY(), current_pos.getZ()]
|
|
|
|
if self.move_axis == "x":
|
|
new_pos[0] += move_delta
|
|
elif self.move_axis == "y":
|
|
new_pos[1] += move_delta
|
|
elif self.move_axis == "z":
|
|
new_pos[2] += move_delta
|
|
|
|
self.gameObject.setPos(new_pos[0], new_pos[1], new_pos[2])
|
|
|
|
def set_move_parameters(self, distance=None, speed=None, axis=None):
|
|
"""设置移动参数"""
|
|
if distance is not None:
|
|
self.move_distance = distance
|
|
if speed is not None:
|
|
self.move_speed = speed
|
|
if axis is not None and axis in ["x", "y", "z"]:
|
|
self.move_axis = axis
|
|
|
|
self.log(f"移动参数更新: 距离={self.move_distance}, 速度={self.move_speed}, 轴={self.move_axis}")
|
|
|
|
def toggle_movement(self):
|
|
"""切换移动状态"""
|
|
self.is_moving = not self.is_moving
|
|
status = "恢复" if self.is_moving else "暂停"
|
|
self.log(f"移动{status}")
|
|
|
|
def reset_position(self):
|
|
"""重置到起始位置"""
|
|
if self.start_position:
|
|
self.gameObject.setPos(self.start_position)
|
|
self.current_distance = 0.0
|
|
self.current_direction = 1
|
|
self.log("位置已重置到起始点")
|
|
|
|
def on_destroy(self):
|
|
"""脚本销毁时调用"""
|
|
self.log("移动脚本停止") |