地铁系统

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);

 

posted @   WLZN  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示