大家好,我希望你能帮助我。我尝试编写游戏代码,但碰撞失败。我搜索了很多,发现边界框方法(在精灵周围创建一个不可见的矩形)对我来说是最好的选择。但是交叉方法对我不起作用。我有两个碰撞的位图精灵,但在LogCat中没有碰撞......
Sprite No. 1 Class
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);
}
Sprite No. 2 Class
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);
}
}
GameView Class
public void collision(){
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时,碰撞正在发挥作用。可能是什么问题?
答案 0 :(得分:1)
根据你输入LogCat的视频和数据,移动功能似乎有问题(你的问题中没有列出)。
矩形的left
坐标正在变化,但right
坐标不是。一段时间后,一个矩形的left
坐标变得大于right
坐标,这导致intersects
函数返回false。
另外,您应该考虑以不同方式构建代码,尝试使用继承而不是许多非常相似的类。
答案 1 :(得分:0)
我不确定你用什么库来获取Rect(标准库有Rectangle,但不是Rect)。
我的建议是首先通过在发生碰撞时打印出矩形的边界来进行一些错误检查,看看它们是否确实相交。如果能够解决问题,那么如果你使用的那个不起作用,或许你可以自己设置交叉点。这很简单,快速谷歌用c / javascript给我这个,但它很容易用Java重做。