怎样才能正确地移动到对角线碰撞盒中进行对角移动?

时间:2016-03-26 07:01:43

标签: java slick2d

首先,为长标题道歉;我想不出能够充分解决我的问题的方法,还能进一步压缩它。

我正在用Java创建一个2D游戏,屏幕中央有一个角色。我的角色有一个碰撞盒,我在地图上有图像(从上面看)也有碰撞盒。 但是,我希望能够有一个"幻灯片"如果碰撞发生在与我的方向不垂直的一侧的情况。

例如,如果我的角色向东移动,并且他的东边有一堵墙向西南方向移动到东北方向,而不仅仅是注意到东方有一个物体而没有移动,我不知道像我的角色一样能够滑动"沿着墙壁,向东北方向移动,以实现东方未遂运动。

有没有简单的方法可以做到这一点?

如果它有任何帮助,我使用Java Slick2D,并将角色的碰撞框作为他站立的矩形,并将其他对象的碰撞框作为多边形。

提前感谢您的回复!

2 个答案:

答案 0 :(得分:1)

当您解决了识别碰撞何时发生的问题时,可以通过计算垂直于墙壁的运动分量并从运动矢量中减去该运动来实现滑动。 假设你有一个运动矢量v =(v_x,v_y)和墙的法线n =(n_x,n_y)。法向量应为长度1。 然后你的新运动矢量应该是 v_new = v - (v * n)* n。 分别在X和Y中 v_new_x = v_x - (v_x * n_x + v_y * n_y)* n_y, 和Y

的方式相同

答案 1 :(得分:0)

班级java.awt.geom.Area有一个方法intersects( Area a ),可用于确定影响的“点”,称之为 P 。如果角色的碰撞盒是一个矩形,并且障碍物受到任意多边形的限制,则必须确定

  1. 参与碰撞的矩形的点或侧面
  2. 参与碰撞的多边形的点或侧面
  3. 如果侧面与侧面相交(它们应该是平行的),则电流不能在当前方向上移动;不应该出现幻灯片。同样,如果矩形边与多边形点相交,则移动被阻挡。

    如果一个点遇到一个点,你可以解决这个问题(任意?)选择多边形的一个边并根据它来处理这个情况。

    最后,如果一个矩形角遇到斜面,你将不得不分析这边的几何形状。 (如果向北或向东(向南或向西),则确认右上角(左下角)是否满足10到4侧,或者左上角满足7对1侧(右下角) )向北或向西(南或东)时的手角。然后你可以确定沿倾斜侧的强制路径​​。

    虽然这听起来相对简单,但如果对象的碰撞盒 - 多边形 - 可能有凹面部分,则可能会有更复杂的情况潜伏在拐角处。