类碰撞。处理

时间:2017-03-05 21:47:52

标签: java processing

我有一个动态图像作为背景

PImage background;
int x=0; //global variable background location
boolean up;
boolean down;
Rocket myRocket;
Alien alien1,alien2;

void setup(){
 size(800,400);
 background = loadImage("spaceBackground.jpg");
 background.resize(width,height);
 myRocket = new Rocket();
 alien1 = new Alien(800,200,4,-3);
 alien2 = new Alien(800,200,5,2);
}

void draw ()
{
 image(background, x, 0); //draw background twice adjacent
 image(background, x+background.width, 0);
 x -=4;
 if(x == -background.width)
 x=0; //wrap background
 myRocket.run();
 alien1.run();
 alien2.run();

}

void keyPressed(){
  if(keyCode == UP)
  {
   up = true;
  }
  if(keyCode == DOWN)
  {
   down = true;
  }
}

void keyReleased(){
  if(keyCode == UP)
  {
   up = false;
  }
  if(keyCode == DOWN)
  {
   down = false;
  }
}   

头等舱。外星人向火箭上下移动。

class Alien { 
 int x;
 int y;
 int speedX,speedY;

 Alien(int x,int y,int dx,int dy){
   this.x = x;
   this.y = y;
   this.speedX = dx;
   this.speedY = dy;
 }

void run(){
  alien();
  restrict();
}

void alien(){
 fill(0,255,0);
 ellipse(x,y,30,30);
 fill(50,100,0);
 ellipse(x,y,50,15);
 x = x - speedX;
 y = y + speedY;
}

void restrict(){
 if (y < 15 || y > 380 ){
    speedY = speedY * -1;
  }
 if (x == 0){
     x = 800; 
 }
}
}

第二课。你可以控制火箭上下移动

class Rocket {
  int x;
  int y;
  int speedy;

 Rocket(){
   x = 40;
   y = 200;
   speedy = 3;

 }

void run(){
 defender();
 move();
 restrict();
}

void defender(){
 fill(255,0,0);
 rect(x,y,50,20);
 triangle(x+50,y,x+50,y+20,x+60,y+10);
 fill(0,0,255);
 rect(x,y-10,20,10);
}

void move() {
 if(up)
 {
  y = y - speedy;
 }
 if(down)
 {
  y = y + speedy;
 }
} 

void restrict(){
 if (y < 10) {
    y = y + speedy;
  }
  if (y > 380) {
    y = y - speedy;
  }
}

boolean IsShot(Rocket myRocket){
 if (alien1.x == 40)
  {
   if(alien1.y>=y && alien1.y<=(y+50))
    {
      return true;
    }
   return false;
}
}
}

当其中一个外星人击中火箭时我希望比赛停止。在boolean IsShot(Rocket myRocket)我不断收到错误“该方法必须返回结果类型boolean”。

1 个答案:

答案 0 :(得分:1)

尝试将问题缩小到MCVE,然后再发帖提问。与另一个矩形碰撞的简单矩形将是显示此错误所需的所有代码。

另外,请养成使用正确编码约定的习惯。函数应以小写字母开头,代码应缩进。这有助于您了解此功能的问题:

boolean isShot(Rocket myRocket) {
  if (alien1.x == 40)
  {
    if (alien1.y>=y && alien1.y<=(y+50))
    {
      return true;
    }
    return false;
  }
}

在这里,您要检查alien1.x是否等于40,然后您在{{1}内返回truefalse声明。但如果if 等于alien1.x,会发生什么?然后永远不会输入40语句,并且此函数不会返回任何内容。这违反了处理规则,这就是您收到错误的原因。即使未输入if语句,此函数也需要返回一些内容。

即使你解决了这个问题,我也很怀疑你在这里做的检查。您真的只想检查if是否正好alien1.x?没有MCVE,很难帮助你,但我的猜测是,这将给你带来麻烦。