Processing控制机械臂旋转时右键无响应,如何实现向上旋转?
问题原因及修复方案
核心bug
你代码的右键功能失效是判断逻辑嵌套错误导致的:if(mouseButton == RIGHT) 整个代码块被写在了 if(mouseButton == LEFT) 的内部,只有按住左键时才会触发右键判断,逻辑上永远不可能成立,因此右键没有任何响应。
另外你现有代码的边界控制逻辑也存在错误:
- 左键分支的角度超出范围后直接固定为
QUARTER_PI,没有反转方向,会导致角度到顶后卡住 - 左右键当前使用相同的角度增量逻辑,无法实现上下分别旋转的效果
修复后代码
float angle=0; float angleDirection=1; float speed=0.005; void setup(){ size(800,600); } void draw(){ background(255,255,255); stroke(20,20,255); translate(400,300); rotate(angle); strokeWeight(18); line(0,0,140,0); pushMatrix(); translate(140,0); rotate(angle*2.0); strokeWeight(14); line(0,0,100,0); translate(100,0); rotate(angle*2.5); strokeWeight(10); line(0,0,60,0); popMatrix(); rotate(-angle*2.0); strokeWeight(18); line(0,0,-140,0); translate(-140,0); rotate(-angle*2.0); strokeWeight(14); line(0,0,-100,0); translate(-100,0); rotate(-angle*2.5); strokeWeight(10); line(0,0,-60,0); if(mousePressed){ // 左键控制正向旋转 if(mouseButton==LEFT){ angle += speed * angleDirection; // 超出边界反转方向 if(angle > QUARTER_PI || angle < 0){ angleDirection = -angleDirection; // 把角度拉回合法范围 angle = angle > QUARTER_PI ? QUARTER_PI : 0; } } // 右键控制反向旋转,和左键平级,不要嵌套到左键判断里 if(mouseButton==RIGHT){ angle -= speed * angleDirection; // 超出边界反转方向 if(angle > QUARTER_PI || angle < 0){ angleDirection = -angleDirection; angle = angle > QUARTER_PI ? QUARTER_PI : 0; } } } }
修复说明
- 把右键判断逻辑从左键判断块中移出,和左键判断平级,两个分支可以独立触发
- 修正了边界控制逻辑,角度超出范围后会自动反转方向,不会出现卡死的情况
- 区分了左右键的旋转方向,左键向上旋转、右键向下旋转,符合常规操作逻辑
内容的提问来源于stack exchange,提问作者Jiho Kim
相关产品推荐
相关产品推荐

