如何在《子弹物理》中控制玩家角色?

2024-01-12

我不知道你应该如何控制子弹中的玩家角色。我读到的方法是使用提供的 btKinematicCharacterController。我还从演示中看到了使用 btDynamicCharacterController 的方法。然而,手册中指出运动控制器有几个突出的问题。这仍然是首选路径吗?如果是这样,有这方面的教程或文档吗?我发现的只是演示中的代码片段,以及 Ogre 控制器的使用,但我不使用它。

如果这不是应该走的路,那么有人会向我指出正确的解决方案。我是Bullet新手,想要一个简单、简单的解决方案。我目前拥有的是将 btKinematicCharacterController 的各个部分拼凑在一起。

这是我用来设置控制器的代码:

playerShape = new btCapsuleShape(0.25, 1);
ghostObject= new btPairCachingGhostObject();
ghostObject->setWorldTransform(btTransform(btQuaternion(0,0,0,1),btVector3(0,20,0)));
physics.getWorld()->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
ghostObject->setCollisionShape(playerShape);
ghostObject->setCollisionFlags(btCollisionObject::CF_CHARACTER_OBJECT);
controller = new btKinematicCharacterController(ghostObject,playerShape,0.5);
physics.getWorld()->addCollisionObject(ghostObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter);
physics.getWorld()->addAction(controller);

这是我用来访问控制器位置的代码:

trans = controller->getGhostObject()->getWorldTransform();
camPosition.z = trans.getOrigin().z();
camPosition.y = trans.getOrigin().y()+0.5;
camPosition.x = trans.getOrigin().x();

我控制它的方式是通过setWalkDirection()和jump()(如果canJump()为true)。

现在的问题是,角色有点兴奋,然后从静态地板上掉下来。显然这不是有意的。这是因为缺乏刚体吗?如何整合它?

事实上,现在它只是按其应有的方式掉落,但随后慢慢地沉入地板。

我已将这条线移至动态世界创建后的位置

physics.getWorld()->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());

现在是这样的:

broadphase->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());

我还使用从搅拌机导入的 .bullet 文件(如果相关的话)。

问题出在子弹文件上,该文件现已修复(碰撞盒不起作用)。但还是会出现心慌、时不时爬不上去、从高处瞬间跳下来等问题。


我在这里对这个问题的回答告诉你什么对我有效,显然也对提出问题的人有效。

避免与 Bullet 发生地面碰撞 https://stackoverflow.com/questions/25605659/avoid-ground-collision-with-bullet/25725502#25725502

不幸的是,子弹中的角色控制器实现非常“基本”。 为了获得好的角色控制器,您需要投入这么多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在《子弹物理》中控制玩家角色? 的相关文章

随机推荐

  • 可以在 Try/Except 中重试/循环吗?

    我试图了解是否可以在 Try Except 调用内部设置循环 或者是否需要重构以使用函数 长话短说 在花了几个小时学习 Python 和 BeautifulSoup 后 我设法将一些代码组合在一起来抓取 URL 列表 将数据提取到 CSV
  • 向元组添加元素的有效方法

    我想向元组添加元素 我找到了两种方法 This https stackoverflow com a 16730367 3337089 and this https stackoverflow com a 1380875 3337089答案说
  • 在 Numpy 中生成对称矩阵

    我正在尝试在 numpy 中生成对称矩阵 具体来说 这些矩阵具有随机位置的条目 并且每个条目中的内容可以是随机的 沿着主对角线 我们不关心其中有哪些条目 因此我也将它们随机化 我采取的方法是首先生成一个 nxn 全零矩阵 然后简单地循环矩阵
  • 正则表达式在引号外的特定字符上分割字符串

    如何在保留带引号的字符串的同时分割这一行 gt div a more style ui url in tray value 分割的字符在哪里 gt 产生 gt div a more style ui url in tray value 目前
  • 识别哪个文件包含某些特定的头文件

    有时 对于复杂的标头结构 可能会包含一些标头 但很难分辨出来自哪里 是否有某种工具 依赖项查看器 或一种方法如何查找 包含堆栈 哪个源 哪个标头 哪个标头 包含一个特定的头文件 如果头文件被多次包含 找到第一个包含就足够了 找到所有包含是一
  • 我可以在嵌入式交互式 Python 控制台中使用 IPython 吗?

    我使用以下代码片段将其放入 Python shell 程序中 这工作正常 但我只得到标准控制台 有没有办法做同样的事情但使用IPython http ipython scipy org shell import code class Emb
  • 虚拟Qt信号?

    在查看一些 Qt C 代码时 我遇到了这个 class Foo Q OBJECT signals virtual void someSignal const QString str int n Q UNUSED str Q UNUSED n
  • HTTP 基本身份验证和 Atlassian JIRA、Confluence 和 Bitbucket

    我在 Apache 反向代理后面的服务器上部署了 JIRA Confluence 和 Bitbucket 他们中的每一个都通过应用程序链接与其他人连接 现在 我想通过在此之前实现 HTTP 基本身份验证来添加额外的保护层 当我这样做时 我会
  • 如何将任意数量的值绑定到 mysqli 中的准备好的语句? [复制]

    这个问题在这里已经有答案了 我真的希望有人花一点时间来检查我的代码 我正在解析一些新闻内容 我可以将初始解析插入到我的数据库中 其中包含新闻 URL 和标题 我想进一步扩展它 传递每个文章链接并解析文章的内容并将其包含在我的数据库中 最初的
  • MongoDB嵌套数组交集查询

    并提前感谢您的帮助 我有一个 mongoDB 数据库 其结构如下 id objectID userID id movies movieID movieID rating rating 我的问题是 我想搜索具有 userID 3 的特定用户
  • 此应用暂时禁用使用 Google 登录的功能

    当我们尝试向 Google 进行身份验证时 我们会看到以下屏幕 我们尝试验证的应用程序用于内部开发 我们没有将其发布给我们的用户 知道为什么会发生这种情况吗 我们之前遇到过 未经验证的应用程序 屏幕 如下所示 但现在身份验证被禁用 OAut
  • NodeJS 无法读取 ubuntu 中的默认 CA

    在我们的测试环境中 我们使用我们公司签名的 SSL 连接到另一台服务器 每次建立连接时 nodejs 都会抛出异常UNABLE TO VERIFY LEAF SIGNATURE 我通过设置找到了解决方法拒绝未经授权 false 但这不适用于
  • 当没有更多引用时,如何从缓存中删除智能指针?

    我一直在尝试使用智能指针来升级现有的应用程序 并且我正在尝试克服一个难题 在我的应用程序中 我有一个对象缓存 例如 我们称它们为书籍 现在 书籍的缓存是通过 ID 请求的 如果它们在缓存中 则返回它们 如果不在缓存中 则从外部系统请求对象
  • 分类:如果一个类的数据量是另一类的 4 倍,会发生什么?

    我正在尝试调试我的分类器的问题 问题在于 尽管准确率接近 80 但它总是针对给定输入预测相同的类别 我训练 CNN 来检测两个类别之间的差异 A 类有 2575 个 jpeg B 类有 665 个 jpeg 这是否会导致我的 CNN 始终预
  • Tomcat 8、axis2 webservices aar、spring jndi 未绑定在上下文中

    我一直在解决在 axis2 Web 服务运行的上下文中找不到 JNDI 名称的问题 当我使用 spring 时 仅在 Tomcat 8 中出现此问题 一些细节 我将提供相关的元素 1 服务 xml
  • 通过 REST api (v2) 将文章发布到公司 LinkedIN 页面

    使用 LinkedIn REST API v2 我正在寻找一种将文章发布到我公司的 LinkedIn 页面的方法 我已经在这里注册了https business linkedin com marketing solutions market
  • Xcode 11 Beta 5 未显示 Swift 5.1

    我已经从苹果网站下载了 XCode 11 并且正在尝试将我的代码升级到 Swift 5 1 但 XCode 没有提供该选项 另外 我没有看到可用的 iOS 13 模拟器 我以前从未遇到过这个问题 所以我错过了什么 我的操作系统已更新为 Ma
  • 如何在没有任何值得计算的事情发生的情况下减少 XNA 游戏 CPU 使用率?

    新的 XNA 游戏项目应用程序在窗口处于活动状态时会消耗相当多的 CPU 百分比 在我的台式电脑上 它大约是 2 核处理器的 1 个核心的 30 当窗口失去焦点时 游戏将进入空闲模式并消耗约 1 的 CPU 在我最近使用 XNA 制作的图像
  • 为什么非 vi* 的模态编辑器如此之少? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Pretty much every other editor that isn t a vi descendant vim cream vi e
  • 如何在《子弹物理》中控制玩家角色?

    我不知道你应该如何控制子弹中的玩家角色 我读到的方法是使用提供的 btKinematicCharacterController 我还从演示中看到了使用 btDynamicCharacterController 的方法 然而 手册中指出运动控