在 Box2D 中制作漩涡

2023-12-13

我试图通过施加力在 C++/Objective C 上的 Box2D 中制作螺旋涡流。 我想实现的是一个将物体从一个点推开或吸引它们的漩涡。 我想我必须施加不止一种力量。

我解决这个问题的切入点是:

我想我必须施加三种力量: - 吸引或排斥身体中心的冲动。 - 想要让它沿螺旋线横向移动的冲动,但是……怎么做? - 如果冲动不适合我,则旋转身体本身的扭矩。


我曾经通过制作一个圆形传感器来制作一个旋转平台,该传感器将圆形矢量场给定的切向速度变化应用于物体。我使用的圆形矢量场是这样的:

V = (y, -x)

可以在此处找到该向量场的直观表示:

y 和 x 是身体与传感器中心的相对位置,因此您可以执行以下操作:

Vector getTangentVector(Vector relativePosition, bool invert)
{
    Vector vec;
    if(invert) //if it's cw or ccw
    {
        vec.setY(relativePosition.x());
        vec.setX(-relativePosition.y());
    }
    else
    {
        vec.setY(-relativePosition.x());
        vec.setX(relativePosition.y());
    }
    return vec;
}

然后在我的程序的更新方法上我做了这样的事情:

for (b2ContactEdge* ce = platformBody->GetContactList(); ce; ce = ce->next)
{

    b2Contact* c = ce->contact;

    if(c->IsTouching())
    {
        const b2Body* bodyA = c->GetFixtureA()->GetBody();
        const b2Body* bodyB = c->GetFixtureB()->GetBody();

        const b2Body* targetBody = (bodyA == platformBody)?bodyB:bodyA;

        Vector speed = getTangentImpulse(
                          getRelativePosition(platformBody, targetBody),
                          true);


        speed *= CONSTANT; // CONSTANT = 1.8, 
                           // this is to account for the targetBody attrition, 
                           // so it doesn't slip on the platform

        Vector currentSpeed;
        currentSpeed.setX(targetBody->GetLinearVelocity().x);
        currentSpeed.setY(targetBody->GetLinearVelocity().y);



        Vector diff = speed - currentSpeed;
        diff *= 0.01; //should depend on time, but this worked nicely. It makes the
                      //body change its linear velocity to be the same as "speed" at a 
                      //0.01 change rate.

        currentSpeed += diff;
        targetBody->SetLinearVelocity(
                               b2Vec2(currentSpeed.x(), 
                               currentSpeed.y()));

    }

}

这个解决方案有很多解决方法,例如,我不使用脉冲并手动更改速度,它对我来说效果更好。另外,我使用一个常数来解释损耗。

它仍然产生了我需要的效果,所以我希望它对你有用。对于漩涡,我想你只需要连接一个关节,比如鼠标关节,连接到中心并抓住身体。如果仅使用关节,则很难使其强度足以抓住身体,但又不足以使其绕中心旋转。与我的代码一起,通过使用常量可能更容易实现这一点。

我希望这有帮助。

编辑:我刚刚记得,使用平台代码还可以确保旋转方向,而仅使用关节是不可能的。

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

在 Box2D 中制作漩涡 的相关文章

  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • Glib 在 iPhone 应用程序中的使用

    我想基于现有的开源 Objective C 框架开发一个 iPhone 应用程序 但是该框架广泛使用了 glib 库 我找不到一种方法来构建和包含 iPhone 应用程序的 glib 库 非越狱 有什么办法可以做到这一点 或者有没有推荐的方
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • Python:如何将元组值的字典写入 csv 文件?

    如何将以下词典打印到 csv 文件中 maxDict test1 alpha 2 test2 gamma 2 因此 输出 CSV 如下所示 test1 alpha 2 test2 gamma 2 import csv with open d
  • 在 WebGL 上访问图像/纹理数据(纹素)

    我在 WebGL 上有以下代码片段 var texture gl createTexture texture image new Image texture image onload function I want to read the
  • 使用java反射获取包名称

    我想从一个单独的 Java 项目中获取所有包名称 在 Java 中如何最好使用反射来实现此操作 我已将项目导入到我的构建路径中 并尝试使用下面的代码来获取包名称 Package pack Package getPackages 编辑 我没有
  • 使用 Blogger API 获取的帖子数量限制(错误 400)

    我正在尝试使用 Blogger API 从博客中获取所有帖子 由于某些未知原因 要获取的最大帖子数似乎被限制为 20 个 如果我尝试这个网址 我收到以下回复 按预期列出最后 20 个帖子标题 items title El Caballero
  • 为什么 Bootstrap CSS 没有在其他项目中使用相同的代码覆盖?

    我有这样的问题 我正在处理项目 但是当我从服务器复制相同的文件时 它看起来有所不同 某些 Bootstrap 样式未被覆盖 这是工作站点标题的屏幕截图 以及在我的计算机上打开同一项目时看到的内容 我查看了 Firebug 发现该活动链接使用
  • UIPageViewController:pageViewController:spineLocationForInterfaceOrientation:未调用

    我的spineLocationFor InterfaceOrientation方法没有被调用 因此 脊柱总是在左边 但我想把它放在中间 我做错了什么 if UIPageViewController class self pageViewCo
  • 在CodeIgniter中检查update_batch()是否成功

    我正在 CodeIgniter 中的表上运行 update batch 我想检查它是否成功 我尝试过使用affected rows 但这只计算已修改的表单字段的数量 因此并不能完全减少它 this gt db gt update batch
  • 防止其他类实例化类

    我正在使用域 视图和控制器 每个都包含自己的类 该域包含许多不应在域外的类中实例化的类 我的印象是默认访问修饰符会对我有所帮助 使我的域类的构造函数包可见 事实证明 在导入正确的 package class 文件后 任何类仍然可以使用构造函
  • 如何让多边形填满屏幕宽度的 80%?

    我有一个简单的正方形 多边形 我希望它填充 80 屏幕宽度 换句话说 我想将正方形放置在 屏幕中央 但宽度为总宽度的80 屏幕的 我该怎么做 我找不到关于此的示例 教程 thanks 这是我的广场的代码 public class Squar
  • Fortran MPI 代码中的标准输出

    我有一个并行的 fortran 代码 其中我只希望rank 0进程能够写入标准输出 但我不想在代码中乱七八糟 if rank 0 write 所以我想知道这样做是否是一个好主意 或者是否有更好的方法 program test use mpi
  • 如何诊断 .NET Core 5 中的 CORS 问题?

    我遇到了 CORS 问题 如果我允许任何方法 任何来源和任何标头 一切都会正常工作 但当我限制其中任何一个时 浏览器控制台会立即变成红色 我已经解决了我的问题 这是由于环境变量不好 但这是一个相当乏味的试错过程 有没有办法诊断 NET Co
  • 如何使用第一个下拉列表中选定的值填充第二个下拉列表?

    假设我有两个下拉菜单 它们在我的 jsp 加载时填充
  • Java 文件下载挂起

    我有一个用于下载文件的网络界面 当请求到来时 我的 glassfish 服务器从 Web 服务流式传输文件 然后将内容写入输出流 我的代码工作正常 除非文件大小变得非常大 例如超过 200 MB 它会挂起 在浏览器中显示 0 下载 并且文件
  • 为什么在我的例子中字符串不相等?

    I have currencyFormatter那是与se SV locale var currencyFormatter NumberFormatter let formatter NumberFormatter formatter cu
  • 使用 webpack 和 bootstrap-loader 时 $(...).modal is not a function(...) 错误

    我在打开模态时遇到问题 modal id modal show 功能 在缩小问题范围后 我相信这与 webpack 加载我的依赖项或特别是 jQuery 依赖项有关 以下是我的 webpack 配置的必要部分 entry js bootst
  • Kafka Streams:如何使用 persistenceKeyValueStore 从磁盘重新加载现有消息?

    我的代码当前使用 InMemoryKeyValueStore 这避免了对磁盘或 kafka 的任何持久化 我想使用rocksdb Stores persistentKeyValueStore 以便应用程序将从磁盘重新加载状态 我正在尝试实现
  • 如何纠正 Damerau-Levenshtein 实施中的错误?

    我带着另一个较长的问题回来了 尝试过许多基于 Python 的 Damerau Levenshtein 编辑距离实现 我终于找到了下面列出的那个 as editdistance reference 它 似乎提供了正确的结果并且似乎有一个有效
  • 如何使用guard语句来检测赋值后的nil?

    我正在尝试使用 Guard 语句来检查是否为零 我很困惑为什么以下内容让它漏掉并生成 BAD EXEC 错误 guard let event Event eventsImagesLoading removeValueForKey locat
  • PDO_OCI - 进入 clob 字段

    我想在 Oracle DB 中插入一些 base64 编码的数据 每个字段最多 500 000 个字符 因为在我开始使用 PDO 并将字段设置为 CLOB 之前 我没有将 Oracle 与 PHP 一起使用 我的代码的简短版本 Db 类扩展
  • 在 Box2D 中制作漩涡

    我试图通过施加力在 C Objective C 上的 Box2D 中制作螺旋涡流 我想实现的是一个将物体从一个点推开或吸引它们的漩涡 我想我必须施加不止一种力量 我解决这个问题的切入点是 我想我必须施加三种力量 吸引或排斥身体中心的冲动 想