Java 在尝试创建矩形循环时,如何解决while循环(处理)中的问题
这个代码有什么问题Java 在尝试创建矩形循环时,如何解决while循环(处理)中的问题,java,processing,Java,Processing,这个代码有什么问题 Boolean counter2, counter1, counter3, counter4; 这是计数器变量 switch(key) { case 'x': counter3 = true; break; } 开关键功能 while(counter3 == true) { int bullet = 355; rect(bullet, jump1, 10, 20); bullet++;
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);
}
}
intwm1=355;
INTA=355;
布尔计数器2,计数器1,计数器3,计数器4;
int movement1=280,movement2=850;
内部跳线1=380,跳线2=380;
int x,y,z;
无效设置(){
背景(200);
}
无效设置(){
尺寸(600600);
}
作废提款(){
背景(0);
填充(200);
文本大小(70);
文本(“2p射击游戏”,10150);
文本大小(60);
填充(42);
rect(250300120,60);
填充(x,y,z);
文本(“播放”,250350);
文本大小(20);
填充(249249,0);
文本(“作者:mostafa mahmoud sayed”,149500);
文本(“版本:beta”,250560);
x=x+1;
y=y+2;
z=z+3;
如果(鼠标250&&mouseY300&&mousePressed){
延迟(150);
类SecondApplet扩展了PApplet{
公共无效设置(){
大小(1200、600);
}
公众抽签(){
背景(200);
填充(0255,0);
rect(50500500,50);
rect(65050500,50);
rect(50220500,50);
rect(650220500,50);
//地面地形//
填充(255,0,0);
rect(移动1,跳线1,70120);
rect(移动1、跳跃1、70、50);
//p1//
填充(0,0255);
rect(移动2,跳线2,70120);
rect(移动2、跳跃2、70、50);
//p2//
rect(wm1,jump1,10,40);
rect(wm1,jump1,50,25);
开关(钥匙){
案例“w”:
填充(0,0,0);
跳线1=100;
打破
案例“i”:
跳线2=100;
打破
案例“d”:
计数器1=真;
打破
案例“a”:
计数器1=假;
打破
案例“l”:
计数器2=正确;
打破
案例“j”:
计数器2=假;
打破
案例“k”:
跳线2=380;
打破
案例s:
跳线1=380;
打破
案例“x”:counter3=true;
打破
}
while(counter3==true){int bullet=355;rect(bullet,jump1,10,20);bullet++}
if(counter1==true){
movement1++;
wm1++;
}
如果(counter1==false){movement1--;wm1--;}
if(counter2==true){
movement2++;
}
如果(counter2==false){movement2--;}
}}
字符串[]args={“TwoFrameTest”};
SecondApplet sa=新的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块您发布的不是a,但这看起来像一个无限循环。
while
循环的条件不会在循环体内部更新,因此循环体只会一次又一次地执行。while(counter3==true){int bullet=355;rect(bullet,jump1,10,20);bullet++;}
是一个无限循环,或者根本不会运行。你是说不要在循环中创建对象,而是在主体中创建对象,并在更改变量时使用它。我建议做几件事,让你的生活更轻松:1)正确设置代码格式,使其更具可读性2)在尝试使用之前先学习面向对象编程的基础知识制作一个游戏3)学会正确使用事件,如击键等-对键的处理看起来非常脆弱。谢谢大家的评论,我会以其他方式考虑制作多个矩形