猫史档案馆


【代码岛3.0】忽然曝光的年兽随机移动代码

用户:神岛吉吉喵神岛吉吉喵查看:92 回复:131 评论:92 创建时间:2020-08-05T21:10:59


center_image

新年打年兽地图、猛吃辣椒酱地图里面

都有的随机移动的怪物

代码究竟是怎么实现的呢?

想想你的答案

然后看代码

👇👇👇👇👇

const lions = world.querySelectorAll('#狮子-1');//小年兽的模型名称叫做'狮子-1'
lions[0].collides = true; // 开启碰撞
lions[0].gravity = true; // 开启重力
lions[0].friction = 0; // 关闭摩擦力

// 创建一堆相同的实体并push到lions中
for (let i = 0; i < 20; i++) {
    const e = world.createEntity(lions[0]);
    e.position.y += Math.random() * 50; // 随机高度, 防止弹飞
    lions.push(e);
}

// onTick中处理实体的运动
world.onTick(() => {
    // 处理每个实体
    lions.forEach((e) => {
        // 计算X和Z轴方向的速度的和
        const sdxz = Math.abs(e.velocity.x) + Math.abs(e.velocity.z);
        if (sdxz > 0.1) {
            // sdxz大于一, 判定为运动中
            // 计算当前方向
            const angle = Math.floor(Math.atan2(e.velocity.z, e.velocity.x) / (2. * Math.PI) * 256) * 2. * Math.PI / 256;
            // 设置朝向, 如果朝向不对, 可自行在后面添加相应的rotateX/rotateY/rotateZ
            const orientation = new Box3Quaternion(0, 0, 0, 1).rotateY(angle).rotateY(Math.PI);
            e.meshOrientation.copy(orientation);
        } else {
            // 随机角度
            const randTheta = Math.random() * Math.PI * 2;
            // 随机速度大小
            const mag = Math.random() + Math.random();
            // 设置速度
            e.velocity.x = mag * Math.sin(randTheta);
            e.velocity.z = mag * Math.cos(randTheta);
            // 跳一下
            if (e.velocity.y < 1) {
                e.velocity.y += 0.5;
            }
        }
    });
});

上面的代码

你能读懂哪几句?

来评论解读

emotion_编程猫_嗨起来


回复

上一页1 页 / 共 5下一页
屑辰屑辰

沙发是我的啊啊啊啊

点赞1


评论


BSS梅者如西BSS梅者如西

板凳

点赞0


评论


文件传输助脚文件传输助脚

第三名

点赞0


评论


魔以侵心魔以侵心

吉吉喵真好

点赞0


评论


神岛吉吉喵神岛吉吉喵

不好,由于屏蔽词,代码有些损坏

emotion_编程猫_紧张

点赞0


评论


ZCH_ProZCH_Pro

地板

点赞0


评论


你猜你猜你猜你猜你猜你猜你猜你猜

前排

点赞0


评论


传闻中的五音璃音传闻中的五音璃音

(偷瞄)

啊代码我不行溜了

点赞0


评论


1232RvE1232RvE

前排!

点赞0


评论


魔以侵心魔以侵心

为什么不行呀

点赞0


评论


阳光的流熔怪Uyt5阳光的流熔怪Uyt5

后排(哈哈哈我!居!然!看!得!懂!)

点赞0


评论


查理九世1查理九世1

我的模型!!!!!!!!!!!(doge)(doge)(doge)(doge)(doge)(doge)(doge)(doge)(doge)(doge)

点赞0


评论


一笑置之_一笑置之_

不会用

点赞0


评论


汪宰牛奶汪宰牛奶

前排

点赞0


评论


我是谁..我是谁..

前排

点赞0


评论


草窝里der斑鸠草窝里der斑鸠

前排

点赞0


评论


草窝里der斑鸠草窝里der斑鸠

我就画个货架的功夫都没抢到沙发

点赞0


评论


Beck_seaBeck_sea

一句没看懂awa

点赞0


评论


会python的狸忍会python的狸忍

前排

点赞0


评论


猫悟淡猫悟淡

一句都没读懂哈哈哈哈

点赞0


评论


未命名用户015734未命名用户015734

ohhhhhhhhhhhhhh真正的干货

点赞1


评论


SCS_user_eee2detYg0SCS_user_eee2detYg0

现在郑重的说一句,吉吉喵太棒啦!

点赞0


评论


QAQ一只崽子QAQ一只崽子

前排

点赞0


评论


芜湖咸鱼芜湖咸鱼

但是这样跑起来也太乱了...

点赞0


评论


ZNS_RemytowerJimmyZNS_RemytowerJimmy

前排

点赞0


评论


打酱油的企鹅呀打酱油的企鹅呀

吉吉喵!你忘发货架的帖子啦!

点赞0


评论


时_代眼泪_卡西米尔骑士时_代眼泪_卡西米尔骑士

前排

点赞0


评论


Weeb_ETOWeeb_ETO

BB

点赞0


评论


凌_墨水凌_墨水

上线解读!

const lions = world.querySelectorAll('#狮子-1');//小年兽的模型名称叫做'狮子-1'
lions[0].collides = true; // 开启碰撞
lions[0].gravity = true; // 开启重力
lions[0].friction = 0; // 关闭摩擦力

// 创建一堆相同的实体并push到lions中
for (let i = 0; i < 20; i++) {//重复执行20次
    const e = world.createEntity(lions[0]);//创建小年兽(克隆体)
    e.position.y += Math.random() * 50; //传送到需要的位置 随机y轴高度, 防止弹飞
    lions.push(e);
}

// onTick中处理实体的运动
world.onTick(() => {
    // 处理每个实体
    lions.forEach((e) => {
        // 计算X和Z轴方向的速度的和  创建一个叫sdxz(速度旋转)的恒变量
        const sdxz = Math.abs(e.velocity.x) + Math.abs(e.velocity.z);//sdxz的值是实体的运动……运动……运动啥?
        if (sdxz > 0.1) {
            // sdxz大于一, 判定为运动中
            // 计算当前方向
            const angle = Math.floor(Math.atan2(e.velocity.z, e.velocity.x) / (2. * Math.PI) * 256) * 2. * Math.PI / 256;//创建一个叫angle(角度)的恒变量,他的值为……呃……为这个算法
            // 设置朝向, 如果朝向不对, 可自行在后面添加相应的rotateX/rotateY/rotateZ
            const orientation = new Box3Quaternion(0, 0, 0, 1).rotateY(angle).rotateY(Math.PI);//创建一个叫orientation的恒变量,值由他的面向决定,面向又由angle搭配#¥%&……算法决定
            e.meshOrientation.copy(orientation);//实体的面向就从上面的恒变量copy过来
        } else {//不然就……
            // 随机角度
            const randTheta = Math.random() * Math.PI * 2;//Math.random()就是所谓的随机,用法是 最低数值+Math.random*最高值
            // 随机速度大小
            const mag = Math.random() + Math.random();
            // 设置速度
            e.velocity.x = mag * Math.sin(randTheta);
            e.velocity.z = mag * Math.cos(randTheta);
            // 跳一下
            if (e.velocity.y < 1) {//当实体的y轴加速度小于1
                e.velocity.y += 0.5;//实体的y轴就加速度0.5
            }//万能框架
        }//万能框架
    });//万能框架
});//万能框架

点赞0


评论


PTG_Little_冷杀PTG_Little_冷杀

前排

点赞0


评论