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

标签 java slick2d

首先,对长标题表示歉意;我想不出一种方法来充分解决我的问题,同时又进一步压缩它。

我正在用 Java 创建一个 2D 游戏,角色位于屏幕中央。我的角色有一个碰撞盒,并且我在 map 上有图像(从上面看),这些图像也有碰撞盒。 但是,如果碰撞发生在不垂直于我的方向的一侧,我希望能够出现“滑动”情况。

例如,如果我的角色正在向东移动,并且他的东边有一堵墙,从西南到东北方向移动,而不是仅仅注意到东边有一个物体并且没有移动,我希望我的角色角色能够沿着墙壁“滑动”,向东北移动以实现尝试向东移动。

有什么简单的方法可以做到这一点吗?

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

预先感谢您的回复!

最佳答案

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

关于java - 怎样才能正确地移动到对角线碰撞盒中并进行对角线移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232613/

相关文章:

java - MVC模型中AbstractAction的实现

android - LibGDX 从 base64 PNG ByteArrayInputStream 创建纹理

java - Slick2D 音乐问题

java - 为什么这没有返回 true?

java - 在不使用具有长参数列表的构造函数的情况下构建大的、不可变的对象

java - 程序错误地打印到控制台

java - jsp页面只显示字符串中的一个单词

java - Freemarker 通过 Java 设置 checkTemplateLocation

java - 一个 BufferedImage 上的多个渐变

java - Slick2d 错误