猫史档案馆


代码岛首个(?)功能完整的动画地铁

用户:GZ006GZ006查看:8 回复:18 评论:8 创建时间:2022-02-06T18:41:03


效果:地铁将经过3个站,每到1个站就会开关1次车门,到第3个站后会返程,一直重复下去,不会出现偏移

效果因人而异(划掉)

在食用本代码前,请挖好隧道、摆好模型(如果没有强迫症的话可以不用摆)并设置好名字:

               车尾

车窗-3               车窗-2

车门-1               车门-3

          车顶 车底

车门-2               车门-4

车窗-1               车窗-4

             车头

world.querySelectorAll('.dt').forEach((metro) => {//地铁整体移动代码
    metro.fixed = true//不受外力影响
    metro.collides = true//允许碰撞
    metro.startPos = []
    metro.middlePos = []
    metro.endPos = []

    if (metro.id == '车头') {
        metro.startPos = [243.3, 2.6, 37.5]
        metro.middlePos = [129.0, 2.6, 37.5]
        metro.endPos = [14.7, 2.6, 37.5]
    } else if (metro.id == '车尾') {
        metro.startPos = [250.9, 2.6, 37.5]
        metro.middlePos = [136.6, 2.6, 37.5]
        metro.endPos = [22.3, 2.6, 37.5]
    } else if (metro.id == '车底') {
        metro.startPos = [247.1, 1.0, 37.5]
        metro.middlePos = [132.8, 1.0, 37.5]
        metro.endPos = [18.5, 1.0, 37.5]
    }else if(metro.id == '车顶'){
        metro.startPos = [247.1, 4.1, 37.5]
        metro.middlePos = [132.8, 4.1, 37.5]
        metro.endPos = [18.5, 4.1, 37.5]
    }else if (metro.id == '车窗-1') {
        metro.startPos = [244.7, 2.6, 36.2]
        metro.middlePos = [130.4, 2.6, 36.2]
        metro.endPos = [16.1, 2.6, 36.2]
    }else if (metro.id == '车窗-2') {
        metro.startPos = [249.5, 2.6, 38.8]
        metro.middlePos = [135.2, 2.6, 38.8]
        metro.endPos = [20.9, 2.6, 38.8]
    }else if (metro.id == '车窗-3') {
        metro.startPos = [249.5, 2.6, 36.2]
        metro.middlePos = [135.2, 2.6, 36.2]
        metro.endPos = [20.9, 2.6, 36.2]
    }else if (metro.id == '车窗-4') {
        metro.startPos = [244.7, 2.6, 38.8]
        metro.middlePos = [130.4, 2.6, 38.8]
        metro.endPos = [16.1, 2.6, 38.8]
    }
    metro.ani = metro.animate([
        { position: metro.startPos, duration: 2 },//地铁呆在起点
        { position: metro.startPos, duration: 5 },//地铁开往第2站
        { position: metro.middlePos, duration: 2 },//地铁呆在第2站
        { position: metro.middlePos, duration: 5 },//地铁开往终点
        { position: metro.endPos, duration: 2 },//地铁呆在终点
        { position: metro.endPos, duration: 5 },//地铁开往第2站
        { position: metro.middlePos, duration: 2 },//地铁呆在第2站
        { position: metro.middlePos, duration: 5 },//地铁开往起点

    ], {
        duration: 16 * 67.72/1.5, //播放一个循环共用时67.72秒(11.93*4)+5*4,
        iterations: Infinity,//动画无限次循环播放
        direction: Box3AnimationDirection.WRAP,//让动画实体从终点回到起点
    })
})

world.querySelectorAll('.地铁门').forEach((metro) => {//开关车门动画
    metro.fixed = true//不受外力影响
    metro.collides = true//允许碰撞
    metro.startPos = []
    metro.middlePos = []
    metro.endPos = []
    metro.sp=[]
    metro.mp=[]
    metro.ep=[]
    if (metro.id == '车门-1') {
        metro.startPos = [247.67, 2.6, 36.2]
        metro.middlePos = [133.37, 2.6, 36.2]
        metro.endPos = [19.07, 2.6, 36.2]
        metro.sp = [248.67,2.6,36.2]
        metro.mp = [134.37, 2.6, 36.2]
        metro.ep = [20.07, 2.6, 36.2]
    }else if (metro.id == '车门-2') {
        metro.startPos = [246.63, 2.6, 36.2]
        metro.middlePos = [132.33, 2.6, 36.2]
        metro.endPos = [18.03, 2.6, 36.2]
        metro.sp = [245.63,2.6,36.2]
        metro.mp = [131.33, 2.6, 36.2]
        metro.ep = [17.03, 2.6, 36.2]
    }else if (metro.id == '车门-3') {
        metro.startPos = [247.67, 2.6, 38.8]
        metro.middlePos = [133.37, 2.6, 38.8]
        metro.endPos = [19.07, 2.6, 38.8]
        metro.sp = [248.67,2.6,38.8]
        metro.mp = [134.37, 2.6, 38.8]
        metro.ep = [20.07, 2.6, 38.8]
    }else if (metro.id == '车门-4') {
        metro.startPos = [246.63, 2.6, 38.8]
        metro.middlePos = [132.33, 2.6, 38.8]
        metro.endPos = [18.03, 2.6, 38.8]
        metro.sp = [245.63,2.6,38.8]
        metro.mp = [131.33, 2.6, 38.8]
        metro.ep = [17.03, 2.6, 38.8]
    }

    /*
    metro.sp = metro.startPos; metro.sp[0]++;
    metro.mp = metro.startPos; metro.mp[0]++;
    metro.ep = metro.startPos; metro.ep[0]++;
    world.say('名字叫做:'+ metro.id +'的实体的'+ `初始坐标为:${metro.startPos} 中间坐标为:${metro.middlePos} 终点坐标为:${metro.endPos}`)
    */

    metro.ani = metro.animate([
        { position: metro.startPos, duration: 0.1 },//车门开~
        { position: metro.sp, duration: 1.5 },//车门保持开启~
        { position: metro.sp, duration: 0.45 },//车门关~
        { position: metro.startPos, duration: 5.1 },//跑到第2站
        { position: metro.middlePos, duration: 0.1 },//车门开~
        { position: metro.mp, duration: 1.5 },//车门保持开启~
        { position: metro.mp, duration: 0.45},//车门关~
        { position: metro.middlePos, duration: 5.1 },//跑到终点~
        { position: metro.endPos, duration: 0.1 },//车门开~
        { position: metro.ep, duration: 1.5 },//车门保持开启~
        { position: metro.ep, duration: 0.45 },//车门关~
        { position: metro.endPos, duration: 5.1 },//跑到第2站
        { position: metro.middlePos, duration: 0.1 },//车门开~
        { position: metro.mp, duration: 1.5 },//车门保持开启~
        { position: metro.mp, duration: 0.45 },//车门关~
        { position: metro.middlePos, duration: 5.1 },//跑到起点

    ], {
        duration: 16 * 67.72/1.5, //播放一个循环共用时67.72秒(11.93*4)+5*4,
        iterations: Infinity,//动画无限次循环播放
        direction: Box3AnimationDirection.WRAP,//让动画实体从终点回到起点
    })
})

然后就阔以了~~~

或许我可以换掉Omega里面的地铁了)))


回复

上一页1 页 / 共 1下一页
GZ006GZ006

沙发拿来吧你

点赞0


评论


GZ006GZ006

注意:这个地铁是沿x轴移动的,需将x:1-253;y:1-5;z:36-38全部挖穿后方可乘坐地铁

点赞0


评论


暗影MCanying暗影MCanying

在食用本代码前

?????

点赞0


评论


GZ006GZ006

真冷

我感觉我自带冷贴效果

点赞0


评论


GZ006GZ006

啊。。。

点赞0


评论


IaeaIaea

喵喵

点赞0


评论


GZ006GZ006

点赞0


评论


GZ006GZ006

顶一下

点赞0


评论


面具狐狸云绾兮面具狐狸云绾兮

那看看我最新发的那些模型?()

点赞0


评论


一个STUB用户_14302596一个STUB用户_14302596

哇哦,好用,进书签吃灰吧你

点赞0


评论


GZ006GZ006

顶啊

点赞0


评论


小树同学小树同学

好!

点赞0


评论


编码喵编码喵

_name_很早就做过了

点赞0


评论


BSS梅者如西BSS梅者如西

喵d

点赞0


评论


名字鬼知道的小号酱名字鬼知道的小号酱

太棒了,是你自己编的么?不是抄的吧?

点赞0


评论


GZ006GZ006

啊啊

点赞0


评论


未名用户未名用户

,,

点赞0


评论


隐姓埋名的sui隐姓埋名的sui

@广东006 不行啊 没动静

点赞0


评论