0

大家好,我希望你能帮助我。我尝试编写游戏代码,但在碰撞中失败。我搜索了很多,发现边界框方法(在精灵周围创建一个不可见的矩形)对我来说是最好的解决方案。但是 intersect 方法对我不起作用。我有两个碰撞的位图精灵,但在 LogCat 中没有碰撞......

雪碧 1 级

public Sprite(GameView theGameView, Bitmap bmp) {
    this.theGameView = theGameView;
    this.bmp = bmp;
    this.width = bmp.getWidth();
    this.height = bmp.getHeight();
    ySpeed = 0;
    xSpeed = 1;
}


 public Rect bounds() {         
        return (new Rect(x,y,width,height));
    }


public void onDraw(Canvas canvas) {
    canvas.drawBitmap(bmp, x, y, null);
}

雪碧 2 级

public FourthSprite(GameView theGameView, Bitmap bmp) {
    this.theGameView = theGameView;
    this.bmp = bmp;
    this.width = bmp.getWidth();
    this.height = bmp.getHeight();
    ySpeed =  0;
    xSpeed = -1;
}


public Rect bounds() {
    // TODO Auto-generated method stub
    return (new Rect(x,y,width,height));
}

public void onDraw(Canvas canvas) {
         canvas.drawBitmap(bmp, x, y, null);
}

}

游戏视图类

公共无效碰撞(){

   Rect r1 = theSprite.bounds();  // Sprite on left side
       Rect r4 = theSprite4.bounds(); // Sprite on right side

  if (r1.intersect(r4)){

       collision = true;
       Log.v("Log Tag", "COLLISION :D :D :D :D :D :D :D");
   }

  else       {
       collision = false;
       Log.v("Log Tag", "NO COLLISION");
  }
    }

如果有帮助,我还可以上传视频。

编辑:http: //youtu.be/wYxZ7nKsmdw 我发现,当一个精灵不移动并且x,y坐标为0时,碰撞正在起作用。可能是什么问题?

4

2 回答 2

1

根据您输出到 LogCat 的视频和数据,移动功能似乎有问题(您的问题中没有列出)。

矩形的坐标left正在改变,但right坐标不变。一段时间后left,一个矩形的坐标变得大于right坐标,这导致intersects函数返回 false。

附带说明一下,您应该考虑以不同的方式构建代码,尝试使用继承而不是许多非常相似的类。

于 2012-12-08T12:19:20.047 回答
0

我不确定您使用什么库来获取 Rect(标准库有 Rectangle,但没有 Rect)。

我的建议是首先通过在应该发生碰撞时打印出矩形的边界来进行一些错误检查,看看它们是否确实相交。如果这行得通,如果你使用的那个不起作用,也许制作你自己的交集函数是要走的路。这很简单,一个快速的谷歌在 c/javascript 中给了我这个,但在 Java 中很容易重做。

快速矩形到矩形相交

于 2012-12-08T12:20:28.047 回答