Processing按键控制移动物体及发射小方块问题咨询
代码修改实现方案
核心问题说明
现有代码的两个核心问题:
updown变量无触发逻辑,始终为false,方块移动代码根本不会执行,导致看起来移动卡顿/速度极慢- 上下边界判断误用
width变量,逻辑上应该匹配垂直方向的画布高度height
功能实现代码
完整修改后代码如下,已实现按键控制方块上下移动、空格发射小方块的效果:
boolean moveUp = false; boolean moveDown = false; int squareX = 20; int squareY = 20; // 调整speed数值即可控制移动速度,数值越大速度越快 int speed = 5; int circleX = 150; // 存储所有发射的小方块 ArrayList<PVector> smallSquares = new ArrayList<PVector>(); int smallSquareSpeed = 8; void setup () { size (700,700); // 调整帧率也可以控制整体速度,默认60帧 frameRate(60); } void draw () { background (0); // 原有移动的大圆逻辑保留 fill(100); ellipse (circleX,140,150,150); circleX -=2; if (circleX < - 20) { circleX = 550; } // 大方块移动逻辑 fill (225); rect (squareX, squareY, 70, 70); if (moveUp) { squareY -= speed; } if (moveDown) { squareY += speed; } // 边界限制,不让方块移出画布 if (squareY < 0) { squareY = 0; } if (squareY + 70 > height) { squareY = height -70; } // 小方块发射逻辑 fill(255,0,0); for(int i = smallSquares.size()-1; i >=0; i--){ PVector s = smallSquares.get(i); s.x += smallSquareSpeed; rect(s.x, s.y, 20,20); // 超出画布就移除小方块,避免内存占用过高 if(s.x > width){ smallSquares.remove(i); } } } // 按键按下触发 void keyPressed(){ if(keyCode == UP || key == 'w' || key == 'W'){ moveUp = true; } if(keyCode == DOWN || key == 's' || key == 'S'){ moveDown = true; } // 按空格发射小方块,从大方块右侧中间位置发射 if(key == ' '){ smallSquares.add(new PVector(squareX +70, squareY + 25)); } } // 按键松开停止移动 void keyReleased(){ if(keyCode == UP || key == 'w' || key == 'W'){ moveUp = false; } if(keyCode == DOWN || key == 's' || key == 'S'){ moveDown = false; } }
参数调整说明
- 修改
speed的数值可以调整大方块上下移动的速度,数值越大速度越快 - 修改
smallSquareSpeed的数值可以调整发射的小方块的飞行速度 - 修改
frameRate的参数可以调整全局的画面刷新速率,降低数值会整体减慢所有元素的移动速度
内容的提问来源于stack exchange,提问作者user14368147
相关产品推荐
相关产品推荐

