java比较两个矩形,java swing - 如何确定两个矩形之间碰撞的一面

我正在使用java swing构建一个自上而下的2D滚动条,其游戏玩法与经典游戏Bomberman非常相似,玩家可以在所有4个主要方向上移动角色 .

所有游戏对象都有实例变量,包含它们在JPanel上渲染的位置的(x,y)坐标,它们还有前一个(x,y)坐标的实例变量,它们在最后一帧中被渲染 . 我的碰撞检测算法基本上检查每次刷新屏幕时玩家对象是否与网格中存在的一个墙相交 - 这可以在下面的代码中看到:

if (playerRectangle.intersects(wallRectangle)) {

player.restorePreviousPosition();

}

restorePreviousPosition()方法将播放器的(x,y)坐标设置为碰撞发生前的坐标 . 这种方法工作正常,它可以防止玩家通过对象 . 然而,控件似乎非常锯齿状,因为如果玩家在与墙壁接触时试图向左和向上移动,则角色保持静止 . 换句话说,角色不能触及墙壁并仍然平行于墙壁移动 . 为了解决这个问题,我创建了四个在玩家对象顶部绘制的矩形,用于确定与另一个对象碰撞的一侧,这样我可以恢复x或y,而不是恢复(x,y)坐标 . 在哪一方碰撞 . 例如,如果我知道顶部与某些东西发生碰撞,那么我可以恢复y位置并允许x自由变化 . 下面你可以看到播放器对象的图片,上面画着矩形:

K0RDQ.png

这种想法非常不可靠,特别是在难以确定碰撞来自哪一侧的角落 . 那么,我的问题是, how can I reliably determine which side of a rectangle is colliding with another rectangle in java using swing? 或者,您是否有更好的替代方法来检测碰撞?

请注意,玩家移动是完全免费的,我的实现不会将角色从一个拼贴到另一个拼贴 . 并且瓷砖之间的距离为32x32像素,播放器为30x30像素 .

感谢您的帮助 . 如果您对我的实施有任何其他疑问,请告诉我 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值