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

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(使用前将#替换为@)

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

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 可以在 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 的方法 然而 手册中指出运动控