更改子弹离开屏幕上的值

问题描述

我在处理 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);
  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,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,10,10);
  fill(51,51,204);
  rect(x+10,10);
  rect(x-10,10);
  fill(255,215,0);
  rect(x,y-10,0);
  rect(x+10,y+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;
}

解决方法

您的 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,bulletmover);
}
if (bultr != 1) {
  bulletmover = 0;
  bultr = 1;
}