Java Processing可调速风扇开发求助:实现转速增减与显示
Processing 风扇程序实现方案
需求
- 按下
+键提升风扇转速 - 按下
-键降低风扇转速 - 实时显示当前转速
原代码问题
btton()函数存在语法错误(未闭合代码块)- 风扇叶片旋转逻辑未整合到主绘制流程,无法正常旋转
- 缺少键盘事件处理,无法实现按键调速
- 没有转速显示功能
- 叶片布局逻辑错误,仅单个叶片且未围绕中心旋转
修复并优化后的完整代码
final int coverSize = 250; final int centralDiskSize = 30; final int bladeCount = 3; // 风扇叶片数量 final float bladeWidth = 15; final float bladeLength = coverSize / 2 - 20; float angle = 0; float speed = 0.05; // 初始转速 float minSpeed = 0; // 最小转速(防止停转后反转) float maxSpeed = 0.3; // 最大转速上限 void setup() { size(500, 500); textAlign(CENTER, CENTER); textSize(20); } void draw() { background(200); // 绘制风扇外罩 drawFanCover(); // 绘制旋转的叶片 rotateBlades(); // 显示当前转速 displaySpeed(); } void drawFanCover() { strokeWeight(2); noFill(); // 循环绘制多层外罩圆环 for (int i = 0; i < 5; i++) { float diameter = coverSize - i * 45; ellipse(width/2, height/2, diameter, diameter); } // 中心圆盘 fill(0); ellipse(width/2, height/2, centralDiskSize, centralDiskSize); noFill(); } void rotateBlades() { pushMatrix(); translate(width/2, height/2); // 将坐标原点移到风扇中心 rotate(angle); // 整体旋转角度 fill(100); stroke(0); // 绘制3个均匀分布的叶片 for (int i = 0; i < bladeCount; i++) { rotate(TWO_PI / bladeCount); // 每个叶片间隔120度 rect(-bladeWidth/2, -bladeLength, bladeWidth, bladeLength); } popMatrix(); angle += speed; // 更新旋转角度,实现动画 } void displaySpeed() { fill(0); // 将转速转换为更直观的整数显示 int displayValue = (int)(speed * 100); text("当前转速: " + displayValue, width/2, height - 30); } void keyPressed() { if (key == '+') { // 提升转速,不超过最大值 speed = min(speed + 0.01, maxSpeed); } else if (key == '-') { // 降低转速,不低于最小值 speed = max(speed - 0.01, minSpeed); } }
关键说明
- 转速控制:通过
speed变量控制旋转速度,keyPressed()监听按键事件调整转速,同时限制范围避免异常 - 叶片旋转:使用矩阵变换
pushMatrix()/popMatrix()确保叶片围绕中心旋转,循环绘制多个叶片实现真实风扇效果 - 模块化设计:拆分功能到独立函数,代码结构清晰,便于后续修改扩展
- 转速显示:用
text()在屏幕底部显示转速,将浮点型的speed转换为整数,更易读
内容的提问来源于stack exchange,提问作者Jrishi_del14
相关产品推荐
相关产品推荐

