尝试制作矩形循环时如何解决 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 块将始终执行
这段代码有什么问题?
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 块将始终执行