地铁系统

发布时间 2023-03-30 22:14:19作者: WLZN

let metroTask = {
interval: 50,
// 每五十秒执行一次
action: (data) = >{ // 即上文所提回调函数
// 判断当时传进来的节点是否为地铁列车节点
if (data === currentMetro) {
// 获取地铁此时的 X 轴位置以及行进的方向
let currentX = data.getX(),
direction = data.a('direction');
// 根据当前的 X 轴位置获取当前的列车速度
let speed = this.getSpeedByX(currentX);
// 根据当前的 X 轴位置获取当前的列车透明度
let opacity = this.getOpacityByX(currentX);
// 判断此时 X 轴位置是否超过某个值 即地铁是在某个范围内移动
if (Math.abs(currentX) <= 5000) {
// 设置当前的透明度
opacity !== 1 ? currentMetro.s({
'shape3d.transparent': true,
'shape3d.opacity': opacity
}) : currentMetro.s({
'shape3d.transparent': false
});
// 设置当前的 X 轴位置
data.setX(currentX + direction * speed);
// 判断此时地铁的速度为 0,所以此时应该执行开门的动画
if (speed === 0) this.doorAnimation(currentMetro, direction);
}
// 右方向地铁开到头,进行复位
if (currentX > 5000 && direction === 1) {
currentMetro = leftMetro;
currentMetro.setX(5000);
}
// 左方向地铁开到头,进行复位
if (currentX < -5000 && direction === -1) {
currentMetro = rightMetro;
currentMetro.setX( - 5000);
}
}
}
};
dm3d.addScheduleTask(metroTask);