FPS 游戏中的碰撞检测使用三个.js
Collision Detection in FPS Game using three.js
我最近一直在尝试修复我的第一人称射击游戏三.js游戏中的碰撞检测,但还有一些问题我什至不知道如何解决......
- 摄像机可以查看墙壁内部
- 碰撞会定期将玩家推离地图
我这里有一个jsfiddle:http://jsfiddle.net/sxv5fwL4/95/
而且我也收到了关于帖子下的三个.js subreddit的一些建议......
"Use of the "stemkoski" collision detection?"
我提前感谢您的时间,并感谢/u/stovenn 在我的 reddit 帖子中提供的帮助。
我认为 /u/stovenn 谈到了这个 git http://stemkoski.github.io/Three.js/
根据线程 如何在三个.js中检测碰撞? 在 stemkoski git 中是三个碰撞检测的工作示例.js
这个jsfiddle0(更新版本见答案末尾)是所引用版本的黑客版本。 地图存在一个问题,我已经通过将其阅读为[u][v]并映射编辑:(u-->z和v-->x)来解决。 现在,代码中地图的布局与模拟中地图的布局相同。
我使用了一个非常简单的"边界框中的(2D)点"碰撞测试。 它基于测试玩家在每个动画步骤中建议的新位置是否位于墙立方体的 x 范围和 z 范围内。 如果是这样,则建议的位置将被拒绝,并且玩家先前的(存储)位置将重新恢复。
这是核心代码:-
if ( tile_x_min <= player_pos_x && player_pos_x <= tile_x_max
&& tile_z_min <= player_pos_z && player_pos_z <= tile_z_max )
{
collision_flag = true;
player.velocity.x = 0;
player.velocity.z = 0;
Message = "IN Wall Cell [" + x + "," + z + "]" +
"(x:" + tile_pos_x + ", z:" + tile_pos_z + ")";
}
我在玩家位置使用了一个小的辅助立方体("eddie"),并将相机向后移动了一点以使其可见。 这对排除故障有很大帮助。
无论如何,如果您愿意,请尝试一下,并让我知道它是怎么回事。
编辑(1) jsfiddle1 添加播放器/摄像机的简单旋转。 使用键numpad_7和numpad_9左右旋转。
编辑 (2) jsfiddle2 响应同时按下的多个键。 此外,使用 eddie.visible = false 隐藏了 eddie cube。
编辑(3) jsfiddle3 添加了独立的相机旋转:向上-居中-向下(使用小键盘键 2,5,8)。 播放器+相机水平旋转是通过小键盘键4,6。
我正在使用Ammo.js,这是伟大的子弹物理库的插件端口。这是一个专业的开源集合检测库。
这是我创建的示例:physics.autodesk.io
可能对某人有用。
- 灯光问题(使用三个.js)
- 在三个.js中创建球体(例如地球)的磁力线
- 三个js键盘旋转
- 加载模型与三个.js
- 如何在导入的 Collada 模型上使用 EdgesHelper 在三个.js.
- 三个JS框几何体,渲染警告:渲染计数或素数为0
- 我需要三个.js的来源
- 可点击的三个JS凸对象(点击一次即可显示图像)
- 带有三个.js的透明背景
- 使用三个js加载三维模型示例
- 在桌面上向下滚动三个js动画,而不是在手机上
- 将一行的长度限制在三个js中
- 如何在三个js上更新Trackball控件
- 由于相机位置的原因,无法在场景中显示三个.js元素
- 三个js阴影
- EffectComposer和具有三个.js的alpha通道
- 如何点击并滑入三个js立方体
- 三个js立方体是黑色的..不是红色
- 有三个.js的简单太阳系
- 将三个.js示例的webgl_loader_obj_mtl.html集成到 WebForm ASP.NET(mtlLoa