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

碰撞2矩形不工作(边界框方法)

骆利
2023-03-14

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

雪碧一级

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时,碰撞是有效的。有什么问题吗?

共有2个答案

傅志文
2023-03-14

我不确定您使用哪个库来获取矩形(标准库具有矩形,但没有矩形)。

我的建议是首先做一些错误检查,当发生碰撞时打印出矩形的边界,看看它们是否真的相交。如果成功了,如果你用的那个不成功,也许你可以自己做一个交集函数。非常简单,谷歌用c/javascript快速给了我这个,但用Java很容易重做。

矩形到矩形的快速相交

应嘉容
2023-03-14

根据视频和您正在输出到LogCat的数据,move函数似乎有问题(您的问题中没有列出)。

矩形的< code >左坐标正在改变,但是< code >右坐标没有改变。一段时间后,一个矩形的< code >左坐标变得大于< code >右坐标,这导致< code>intersects函数返回false。

顺便提一下,您应该考虑用不同的方式构造代码,尝试使用继承,而不是许多非常相似的类。

 类似资料:
  • 我正在为我的播放器和bullet类创建一些围绕精灵的矩形,以使用LibGDX的Intersector类中的重叠方法检测碰撞。 我有一个问题: 当我实例化Player和Bullet时,我使用sprite.getBoundingRectangle()在精灵周围创建一个边界框,它返回一个Rectangle对象。我在主类的其他地方更新这些的移动。 当我更新子弹/玩家精灵的移动时,我是否也需要更新子弹/玩家

  • 我一直在尝试在Libgdx中找到/创建矩形的碰撞检测,但似乎什么都做不到。我有一个叫bucket的矩形,宽度和高度为64,还有一个叫wall的矩形,宽度和高度为64。我试着让玩家不穿过矩形,可以在粘墙的同时继续移动,而不需要通过相位或随机传送。我的方法在有1个块的情况下有效,但当有多个块的时候,它就会中断,不起作用。 我知道这种方法很难看但这只是实验 如果有人能给我指出正确的方向或分享一些对我有帮

  • 所以我试图用pygame制作一个我们之间的游戏。我刚刚开始,所以我没有太多东西,现在正在制作地图。然而,我正在努力解决的一件事是碰撞逻辑。地图目前有一个细长的八边形形状,但是我想不管是什么形状,我都会使用类似pygame多边形的东西。当我运行我现在的代码时,它会检查我的玩家(pygame矩形)和墙壁(pygame多边形)之间的碰撞,它说: 我发现这是因为pygame多边形返回了一个矩形,但在碰撞检

  • 问题内容: 我遇到一个问题,即一个矩形与另一个矩形发生碰撞。所以我的问题是,如何获取相交方法以检查碰撞?还是在这种情况下还有其他方法可以处理碰撞? 我正在创建一个回合制战斗游戏(类似于《最终幻想》或《龙骑传奇》),其中玩家的角色在屏幕的右侧,而敌人在屏幕的左侧。玩家和敌人轮流进攻。因此,当玩家攻击时,子画面动画会从右到左在屏幕上移动,直到停在敌人面前,进行攻击并返回到其起始坐标。玩家和敌人周围都有

  • 我有一个问题,碰撞检测一个圆和一个矩形。我曾尝试用勾股定理来解决这个问题。但所有查询都不起作用。矩形与圆的矩形包围盒发生碰撞。

  • 我遇到了一个问题,显示一个矩形与另一个矩形发生了碰撞。所以我的问题是,如何让Intersect方法检查碰撞?或者在这种情况下有其他方法来处理碰撞吗? 我正在制作一个回合制战斗游戏(类似于《最终幻想》或《龙骑兵传说》),其中玩家的角色位于屏幕的右侧,敌人位于屏幕左侧。玩家和敌人轮流攻击。因此,当玩家攻击时,精灵动画会在屏幕上从右向左移动,直到它停在敌人面前,攻击并返回到其起始坐标。玩家和敌人都有一个