Processo中设置随机y值后敌方车辆无法重置的技术求助
问题解决:Processo中敌方车辆重置失败的问题
问题核心
开发类Crossy Road游戏时,敌方车辆用固定值重置时正常,但用random()设置随机y坐标后,车辆无法重置,持续向下移动。
错误原因
代码中判断车辆是否需要重置的条件是baddie1 == 400,但:
random()生成的是浮点型数值(比如-234.7)- 每次车辆y坐标增加5,很难刚好等于400这个整数,导致重置条件永远无法触发,车辆会一直向下移动
修复方案
把判断条件从等于屏幕高度改成大于屏幕高度,只要车辆完全移出屏幕下方就触发重置,不管当前y坐标是整数还是浮点数。
修复后的Processo代码
size (300, 400); double baddie1 = -100; double baddie2 = -300; double baddie3 = -600; void player() { noStroke(); fill(rgb(0, 255, 0)); rect(mouseX-50, 320, 80, 80); } void enemy1() { fill(rgb(255, 0, 0)); rect(10, baddie1, 80, 80); } void enemy2() { rect(110, baddie2, 80, 80); } void enemy3() { rect(210, baddie3, 80, 80); } void draw() { background(rgb(226, 225, 225)); // 改为判断是否超过屏幕高度 if(baddie1 > 400) { baddie1 = random(-600, -100); } else { baddie1 += 5; } if(baddie2 > 400) { baddie2 = random(-600, -100); } else { baddie2 += 5; } if(baddie3 > 400) { baddie3 = random(-600, -100); } else { baddie3 += 5; } player(); enemy1(); enemy2(); enemy3(); }
修复后的Processing兼容版本
double baddie1 = -100; double baddie2 = -300; double baddie3 = -600; void setup(){ size (300, 400); } void player() { noStroke(); fill(rgb(0, 255, 0)); rect(mouseX-50, 320, 80, 80); } void enemy1() { fill(rgb(255, 0, 0)); rect(10, baddie1, 80, 80); } void enemy2() { rect(110, baddie2, 80, 80); } void enemy3() { rect(210, baddie3, 80, 80); } void draw() { background(rgb(226, 225, 225)); // 改为判断是否超过屏幕高度 if(baddie1 > height) { baddie1 = random(-600, -100); } else { baddie1 += 5; } if(baddie2 > height) { baddie2 = random(-600, -100); } else { baddie2 += 5; } if(baddie3 > height) { baddie3 = random(-600, -100); } else { baddie3 += 5; } player(); enemy1(); enemy2(); enemy3(); } color rgb(int r, int g, int b){ return color(r, g, b); } void rect(double x, double y, double w, double h){ rect((float)x, (float)y, (float)w, (float)h); }
额外优化建议
- 用
height代替硬编码的400,代码更灵活,修改窗口大小时无需手动调整数值 - 如果想进一步避免车辆重置后间距过近,可以在随机生成y坐标时,确保和其他车辆的y坐标保持最小距离(比如至少150像素)
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

