当前位置: 首页 > 知识库问答 >
问题:

类碰撞。处理

华景明
2023-03-14
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个答案

彭琛
2023-03-14

请尝试缩小您的问题到一个MCVE之前,你张贴的问题。一个简单的矩形与另一个矩形冲突将是显示此错误所需的全部代码。

另外,请养成使用适当编码约定的习惯。函数应该以小写字母开头,代码应该缩进。这将帮助您了解此函数的问题:

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

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

 类似资料:
  • 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 上个教程的最后,我们得到了一种有效的碰撞检测方案。但是球对检测到的碰撞不会有反作用;它仅仅是径直穿过所有的砖块。我们希望球会从撞击到的砖块反弹。此教程将讨论如何使用AABB-圆碰撞方案实现这项称为碰撞处理(Collision Resolution)的功能。 当碰撞发生时,我

  • 你是否看到过车祸?是否跟什么物体相撞过?就像车的相撞一样,刚体对象也可以互相碰撞,当它们互相接触的时候,就认为发生了碰撞。当碰撞发生时,会触发一系列事件,它可以被完全忽略。 碰撞筛选 碰撞筛选允许你启用或者阻止形状之间碰撞的发生,引擎支持使用类型,组位掩码来进行碰撞筛选。 Cocos2d-x 有 32 个支持的碰撞类型,对于每个形状都可以指定其所属的类型。还可以指定有哪些类型可以与这个形状进行碰撞

  • 我正在尝试做一个平台游戏,其中没有斜坡。我正在尝试将碰撞检测降下来,但是我在pygame中找不到一种方法来获得哪一边与另一个Sprite发生了碰撞。有没有人能给我一个好的方法来做到这一点,那不是太庞大,但也能很好地工作在我的情况? 下面是我的玩家类: 我已经将它添加到我的player类中,每次播放器更新时我都运行它,并且它工作...差一点。 在平台顶部的碰撞起作用,在侧面的碰撞几乎总是起作用,除非

  • 我已经寻找并找到了单个碰撞的答案,但我正在寻找一种检测多种类型的碰撞的方法。我正在制作一个游戏,其中有3个我想要的碰撞。用户飞机与敌方子弹相撞,用户子弹与敌机相撞(我已经工作过),敌方子弹与用户子弹相撞。我已经设置并更正了所有类别BitMask和contactTestBitMask。这是我的委托方法。

  • 这是我的碰撞/移动代码 这是PixelPerfectTest函数(不是我的) 编辑:这就是我如何让它工作,以防将来有人需要帮助

  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect