【问题标题】:Changing value on bullet leaving screen更改子弹离开屏幕上的值
【发布时间】:2021-05-24 17:11:47
【问题描述】:

我在处理 3.5.3 中有一堆写得很糟糕的代码。 当“子弹”离开屏幕时,我希望“无人机”再次射击,但它开始出现故障。 任何想法,可能出了什么问题,或者如何改进屏幕留下检测或类似的东西。 我在这里复制了整个代码,因此您可以尝试一下,因为它还没有那么复杂

int charx;
int chary;
void setup() {
  charx = width/2;
  chary = height - height/10;
  fullScreen();
  background(0);
}
void keyPressed(){
  if(key=='w'){if(!(chary<30))chary-=15;}}
  if(key=='s'){if(!(chary>height-60)){chary+=15;}}
  if(key=='a'){charx-=15;if(charx<30){charx=width-30;}}
  if(key=='d'){charx+=15;if(charx>width-30){charx=30;}}
}
int bullet(int x, int y) {
  if ( y > height - 30){return(0);}
  fill(175, 0, 0);
  triangle(x, y, x-8, y-16, x+8, y-16);
  fill(255);
  return(1);
}
int launch = 0;
int starterx = 0;
int drone1(float startx, float xm, int y, int i) {
  int x = ceil(startx) + ceil(40 * sin(xm));
  if (i == 0) {
    starterx = ceil(startx);
  } else {
    if (launch == 0) {
      starterx = x;
      launch = 1;
      return(0);
    }}
  fill(0, 200, 50);
  rect(x, y, 30, 30);
  fill(255);
  if (launch == 1) {
    launch = bullet(ceil(asin(x)) + starterx + 15, y + 46 + i * 3);
  }
  return(1);}
void player(int x, int y) {
  fill(255);
  rect(x, y, 10, 10);
  fill(51, 51, 204);
  rect(x+10, y, 10, 10);
  rect(x-10, y, 10, 10);
  fill(255, 215, 0);
  rect(x, y-10, 10, 10);
  fill(255, 0, 0);
  rect(x+10, y+10, 10, 10);
  rect(x-10, y+10, 10, 10);
  fill(255);
}
int i = 0; 
int bulletmover = 0;
void draw() {
  background(0);
  player(charx, chary);
  int bultr = 1;
  if (bultr == 1) {
    bultr = drone1(width/2, 0.1 * i, i, bulletmover);
  } else {
    bulletmover = 0;
    bultr = 1;
  }
  bulletmover += 1;
  i += 1;
}

【问题讨论】:

    标签: java processing


    【解决方案1】:

    您的draw 循环中有一些死代码(永远不会运行的代码)。当你写

    if (bultr == 1) {
      bultr = drone1(width/2, 0.1 * i, i, bulletmover);
    } else {
      bulletmover = 0;
      bultr = 1;
    }
    

    计算机会这样做:

    1. 执行以下操作之一。如果bultr 为 1,则执行 (a),否则执行 (b)。
      • (a) 执行 drone1(...),并将 bultr 设置为该输出。
      • (b) 将 bulletmover 设置为 0,将 bultr 设置为 1。
    2. 继续执行if...else 语句之后的代码。

    因此,如果您将int bultr = 1 直接放在其前面,计算机将总是看到bultr 为1,所以它总是(a)而不是(b)。我没有仔细阅读你的代码,但我认为你想要做的是:

    1. 如果bultr 为1,则执行drone1(...),并将bultr 设置为该输出。
    2. 如果bultr 不为1,则将bulletmover 设置为0,将bultr 设置为1。
    3. 继续执行if...else 语句之后的代码。

    在代码中,它看起来像这样:

    if (bultr == 1) {
      bultr = drone1(width/2, 0.1 * i, i, bulletmover);
    }
    if (bultr != 1) {
      bulletmover = 0;
      bultr = 1;
    }
    

    【讨论】:

    • 非常感谢:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多