使用p5.play设置Sprite旋转角度异常的问题求助
解决p5.play中Sprite rotation设置后无法完整旋转的问题
嘿,这个问题我之前也踩过坑!核心原因很简单——你搞混了角度和弧度的单位!
p5.play的Sprite.rotation属性(包括rotate()、rotateTo()这些方法)都是用弧度制来计算旋转的,不是我们日常说的角度制。当你写sprite.rotation = 90时,程序会把它当成90弧度来处理,换算成角度的话大概是5156度,相当于绕了14圈多后剩下的小角度,自然看起来只是轻微倾斜了。
快速解决方案
把你想要的角度转换成弧度就行,有两种简单的方式:
- 用p5.js内置的
radians()函数做转换:
function setup() { createCanvas(400, 400); sprite = new Sprite(200, 200, 100, 100); // 把90度转换成弧度 sprite.rotation = radians(90); }
- 直接用弧度常量(π弧度=180度):
function setup() { createCanvas(400, 400); sprite = new Sprite(200, 200, 100, 100); // 90度对应的弧度是PI/2 sprite.rotation = PI/2; }
关于rotate()和rotateTo()的问题
你说调用这两个方法后Sprite会跳回错误角度,也是同样的原因——你传入的角度值被当成了弧度。正确用法是先转成弧度:
// 旋转到绝对90度 sprite.rotateTo(radians(90)); // 相对当前角度再转90度 sprite.rotate(radians(90));
为什么rotationSpeed能正常工作?
因为rotationSpeed的单位是弧度/帧,你设置的数值刚好是较小的弧度值,所以看起来是正常持续旋转,但本质上还是遵循弧度制的规则。
排除集成问题
不用怀疑p5.editor的集成方式,这个问题和环境无关,纯粹是p5.play基于物理引擎(Planck.js)设计时,统一采用了弧度作为旋转单位导致的。
内容的提问来源于stack exchange,提问作者Sir_Ploople
相关产品推荐
相关产品推荐

