用户:
一只双鱼座a查看:17 回复:5 评论:17 创建时间:2023-07-17T10:51:52
hello,大家好,我是一条喜欢摸自己同类的鱼
众所周知,我们在神岛编程的时候总会遇到一些绕某个东西绕一点旋转的问题
(如,一个护盾绕玩家圆周旋转之类的)
这时候一些萌新(就比如我?)就比较头疼,因为他们(还是包括我)不知道每次旋转时实体应该在哪个位置上,冥思苦想最后还是放弃圆周用另外一种方式代替
为了解决这个 问题 我就去搜索查询...
然后我就会了(大雾
首先我们需要用到向量的旋转公式:(这里可以上网查一查,有三角基础的就能懂)
x: x*cosA-y*sinA y: x*sinA+y*cosA 它的意义简单来说是 一条线(向量)绕着一点旋转A°,线(向量)末端的位置 我们再解决一个度数上的问题(这个问题折磨我太久了,一直让我这个小学的没弄明白神岛的旋转意义,也可能是我太菜了) 1°的值怎么求? 我们知道神岛的Math.sin(1)不等于数学上的sin 1°,它等于一个怪的数字(0.1145141919810 doge 那我们就将目光放到n°的取值上:n°=n*PI/180 (没用的输入法打不出来PI) 于是乎,1°=1*PI/180=PI/180 我们试验一下得知:Math.sin(PI/180)=sin 1° 很明显了 明显过后就是code:async function spin(entity,time,distx,distz) { //分别是:实体 旋转一周时间
let x=distx, z=distz; //这里按照实际情况而定
const c = 180;
for(let i=1;;i+=1) {
entity.position.set(
128+(x*Math.cos(i*Math.PI/c)-z*Math.sin(i*Math.PI/c)), //128是地图中心(我的地图是256*256)
entity.position.y,
128-(x*Math.sin(i*Math.PI/c)+z*Math.cos(i*Math.PI/c)) //
)
await sleep(time * 1000 / 360) //一圈360°,所以要除以360
}
}//绕地图中心转圈
需要注意的是如果你的time太大会产生 很大的延迟,你的dist太大会产生 瞬移。你可以将i加的值除以n,将360*n
这样问题就完美解决了
想说的话:
我本人是一个FW,因为还是小学生,所以无法给出准确定义,我只能打比方作比较之类的让大家看得懂,如果定义有误大佬一定要提出来!)))
当然还是我太菜了