尝试制作矩形循环时如何解决 while 循环(处理)中的问题

How can I fix the problem in while loop (processing) while trying to make rectangle loop

这段代码有什么问题?

 Boolean counter2, counter1, counter3, counter4; 

这是计数器变量

switch(key) {
    case 'x': 
        counter3 = true;
        break; 
}

切换按键功能

while(counter3 == true)
{
      int bullet = 355;
      rect(bullet, jump1, 10, 20); 
      bullet++;
}

虽然函数它一直在按下"x"

时停止

完整代码

 int wm1 =355;

    int a=355;
    boolean counter2,counter1,counter3,counter4;
    int movement1=280,movement2=850;
      int jump1=380,jump2=380;
    int x,y,z;

    void setup(){
    background(200);
    }



    void settings(){

    size(600,600);

    }
    void draw(){
      background(0);
      fill(200);
    textSize(70);

    text("2p shooter game",10,150);
    textSize(60);
    fill(42);
    rect(250,300,120,60);
    fill(x,y,z);
    text("Play",250,350);
    textSize(20);
    fill(249,249,0);
    text("made by: mostafa mahmoud sayed",149,500);
    text("version:beta",250,560);
    x=x+1;
    y=y+2;
    z=z+3;

    if(mouseX<370&&mouseX>250&&mouseY<360&&mouseY>300&&mousePressed){
    delay(150);

     class SecondApplet extends PApplet {

      public void settings() {
        size(1200, 600);
      }
      public void draw() {
    background(200);
        fill(0,255,0);
        rect(50,500,500,50);
        rect(650,500,500,50);
            rect(50,220,500,50);
        rect(650,220,500,50);
        //  ground terrian //
        fill(255,0,0);
        rect(movement1,jump1,70,120);
        rect(movement1,jump1,70,50);
        //p1//
        fill(0,0,255);
        rect(movement2,jump2,70,120);
        rect(movement2,jump2,70,50);
        //p2//


            rect(wm1,jump1,10,40);

        rect(wm1,jump1,50,25);

        switch(key){
        case 'w' :  

        fill(0,0,0);
    jump1=100;
    break;
    case 'i':

    jump2=100;
    break;
    case 'd':

    counter1=true;
     break;   
     case 'a':

    counter1=false;
     break;  
      case 'l':

    counter2=true;
     break;  
      case 'j':

    counter2=false;
     break;   
     case 'k':

    jump2=380;
     break;  
      case 's':

    jump1=380;
     break;  
    case'x':counter3=true;
    break;

        }
   while(counter3==true){int bullet = 355;rect(bullet,jump1,10,20); bullet++;}
    if(counter1==true){
    movement1++;
    wm1++;
    }
    else if(counter1==false){movement1--;wm1--;}

    if(counter2==true){
    movement2++;
    }
    else if(counter2==false){movement2--;}



      }}



      String[] args = {"TwoFrameTest"};
      SecondApplet sa = new SecondApplet();
      PApplet.runSketch(args, sa);

    }
    }

在处理过程中在 draw 方法中使用大量循环不是一个好主意,因为 draw() 会在每一帧自动调用。此外,在您的代码中,计数器 3 永远不会在 while 循环内更改,因此您的代码会进入无限循环。

将 while 更改为 if,它应该不会再冻结。

if(counter3==true) {
    int bullet = 355;
    rect(bullet,jump1,10,20);
    bullet++;
}

确保根据您的程序逻辑在某处更改计数器 3,否则它将始终为真并且 if 块将始终执行