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

新年打年兽地图、猛吃辣椒酱地图里面
都有的随机移动的怪物
代码究竟是怎么实现的呢?
想想你的答案
然后看代码
👇👇👇👇👇
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;
}
}
});
});
上面的代码
你能读懂哪几句?
来评论解读

凌_墨水上线解读!
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
评论