如何制作双向平台box2d主体?

2024-01-03

我使用 box2d 创建了平台。我想要 box2d 身体检测而不是动态检测。

Box2d 形状将执行以下操作

  1. 在某些条件下检测碰撞
  2. 在某些情况下不检测碰撞

两种条件都适用于同一 box2d 对象中的不同条件。

任何想法都会有很大帮助。提前致谢。


有多种方法可以控制 Box2d 中发生碰撞时发生的情况。首先要做的是阅读这篇文章 http://www.iforce2d.net/b2dtut/collision-filtering并决定您想要以何种方式控制它。

这为您提供了多种选择。以下是我在上一款游戏中所做的重要工作:

  1. 游戏中的每个角色(太空飞船、子弹等)都有一个与其关联的特定 C++ 类(称之为“控制器") 这使我能够将 Box2d 主体的逻辑和容器结合在一起。
  2. 当我创建 Box2d 主体时,我使用用户标签来保存指向控制器的指针。
  3. 当发生碰撞时,我可以查看两个碰撞的物体并当场决定该怎么做。

要确定“碰撞何时发生”,请使用接触过滤:

/// Implement this class to provide collision filtering. In other words, you can implement
/// this class if you want finer control over contact creation.
class b2ContactFilter
{
public:
    virtual ~b2ContactFilter() {}

    /// Return true if contact calculations should be performed between these two shapes.
    /// @warning for performance reasons this is only called when the AABBs begin to overlap.
    virtual bool ShouldCollide(b2Fixture* fixtureA, b2Fixture* fixtureB);
};

使用上面的类作为您自己的联系人类的基类,并使用如下内容重写 ShouldCollide(...) 方法:

virtual bool ShouldCollide(b2Fixture* fixtureA, b2Fixture* fixtureB)
{
bool result = true;
Controller* controllerA = fixtureA->->GetBody()->GetUserData();
Controller* controllerB = fixtureA->->GetBody()->GetUserData();

**Either write code here directly or invoke other function to use controllerA and controllerB to decide if a collision should occur.  This can be as simple or complicated as needed.  You need to set the value of "result".

return result;

}

当您创建主体时,调用

fixture->SetFilterData(filter);

在连接到要“过滤”的主体的每个固定装置上。过滤器必须“存在”在堆栈之外的其他位置(可能作为控制器本身的静态成员,以便您可以自定义它)。

这个有帮助吗?

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

如何制作双向平台box2d主体? 的相关文章

  • gnuplot:传感器故障有时读数为 0.00 - 如何将它们转换为缺失?

    我有一个 RPi Arduino 组合 可以从多个 DHT 22 湿度 温度传感器获取读数 其中一个传感器的电线松动 并且连续 10 20 分钟偶尔给出 0 00 的温度读数 由于同时收集了其他数据 我实际上无法选择删除整行数据 就像它是唯
  • Cocos2D-x 3.0 中图元和精灵的 Z 索引不一致?

    我有两层 每个图层都有一个使用 OpenGL 进行的原始绘图 如下所示 void Layer1 drawPolygon glLineWidth 1 DrawPrimitives setDrawColor4B 255 255 255 255
  • 将多个精灵作为一个旋转(围绕同一原点)

    我有形成 T 形状的精灵数组 我想围绕同一原点旋转它们 在我的例子中是 box2D 主体原点 如下所示 我的形状在矩阵中定义如下 int array 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
  • 如何在Cocos2d-X中交换CCSprite对象中的精灵

    我有一个从 CCSprite 继承的对象 我想从这个对象内部改变图像 如何在 Cocos2d X 中更改图像 精灵 而不创建新的 CCSprite 对象 谢谢 阿德里安 mySprite gt setTexture CCTextureCac
  • 注入 screen_on 事件以使传感器在屏幕关闭时工作

    我试图让传感器在屏幕关闭时工作 这是众所周知的错误 所有手机上都没有任何解决方案 我假设如果我发送 注入 screen on 事件 而实际上屏幕将关闭 我可以欺骗内核 您有什么想法如何检查我的假设并注入此类事件 你为什么不开始一个后台服务
  • 像 CCSprite 对象一样移动 Box2d 实体

    在cocos2d中 您可以轻松使用CCSprites并以各种方式移动它们 最重要的是 他们可以缓入 缓出 对于大多数游戏来说 这对于平滑移动等是可取的 id action CCMoveTo actionWithDuration dur po
  • Android SensorManager 中的 getSensorList() 与 getDefaultSensor()

    我正在为 Android 编写一个游戏 希望能够使用加速度计进行输入 我看到有两种获取传感器的方法 一种方法是使用第一个元素SensorManager getSensorList Sensor TYPE ACCELEROMETER 另一个是
  • Android 重力传感器(TYPE_GRAVITY)2.1

    我有为 2 3 3 设计的软件 其中使用重力传感器 下面的代码 private SensorManager sman SensorManager getContext getSystemService Context SENSOR SERV
  • 嵌入式 cocos2d-js 应用程序可以回调 C++ 吗?

    我正在研究通过将 cocos2d js 作为视图嵌入现有 iOS 应用程序中来使用它的可能性 为了完成这项工作 我需要在 cocos2d 和周围的应用程序之间进行双向通信 经过一些初步调查 我确定可以致电in到 cocos 使用Script
  • Emscripten 绑定:如何从 Javascript 创建可访问的 C/C++ 数组?

    我在用box2d https github com kripken box2d js 并尝试创建一个链条形状 为了创建链形状或多边形形状 我必须传递向量数组才能指定几何形状 我没有看到任何文档可以帮助我完成此任务 也没有看到有关绑定的注释h
  • 如何在 Box2D 中设置形状/夹具/主体的中心

    嘿 我正在尝试集成 SFML 和 Box2D SFML 使精灵 形状等的设置中心变得非常容易 另一方面 Box2D 我遇到了麻烦 因为我不知道如何设置甚至找到形状或夹具的中心 在我看来 当手动添加顶点到 b2 PolygonShape 时
  • Cocos2d-x:可以使用HTML(UIWebView)吗?

    我正在尝试cocos2d x现在我可以为 Android 构建 Javascript 示例并在浏览器中运行它们 现在我想创建自己的游戏 但由于有 HTML 背景 我宁愿使用 HTML 标签和 CSS 也不愿使用 Javascript 来设置
  • 将cpp文件添加到cocos2d-x项目android项目中

    我已按照本教程进行操作http www raywenderlich com 33750 cocos2d x tutorial for ios and android getting started http www raywenderlic
  • Corona/Box2D 检测与非移动静态物体的碰撞

    出于发帖原因 这是我正在尝试做的事情的简单版本 在屏幕上我有一个简单的圆形对象 它是静态的并且不会移动 然后用户可以拖放一条直线 如果该线穿过该圆圈 我希望触发碰撞事件 看来除非其中一个物体正在移动 否则永远不会检测到碰撞 绘制线条时能否检
  • 实现移动运动体

    Project 我正在制作一个简单的项目 其中我希望能够制作一个运动体并将其从 x 点移动到 y 点 创建运动体 似乎没有太多直接内容 我一直在关注一些关于实现运动体的不同教程 因为我找不到指定如何正确执行此操作的教程 Problem 这似
  • Xcode C++ 和 Objective-C 重构

    有没有办法refactorXcode 中的混合 C Objective C 代码 我正在使用 Cocos2D 和 Box2D 编写游戏 而 Box2D 是用 C 编写的 因此我编写的每个类都应该具有 mm 扩展名 因此当我尝试例如重命名变量
  • 致命信号11(和引擎项目)

    我正在创建由 andengine 框架提供支持的 android 游戏 box2d 扩展我收到 致命信号 11 这似乎是突然发生的 我想你可以随机称呼它 没有任何线索 至少 我不知道有任何线索可以帮助我解决这个问题 我的猜测是 1 我正在使
  • CMake 错误:CMake 无法找到与“MinGW Makefiles”对应的构建程序

    我正在尝试使用 cmake 为 c 构建 Box2D 库 当我运行 cmake gui 时出现错误 CMake Error CMake was unable to find a build program corresponding to
  • 在 Android 中通过摇动打开/关闭屏幕

    我正在制作一个应用程序 需要在用户摇动手机时打开 关闭屏幕 到目前为止 我已经有了一个 SensorEventListener 它可以按照答案中的建议监听震动这个问题 https stackoverflow com questions 23
  • 屏幕关闭时接近传感器不起作用?

    Hy 我有一个与接近传感器相关的问题 当我将手指放在上面时 我想关闭屏幕 当我拿开手指时 我想打开屏幕 我成功地完成了关闭部分 但是当我将手指从传感器上移开时 它似乎没有执行 onSensorChanged 方法 这是它的代码 public

随机推荐

  • 具有动态尺寸的全圆形按钮

    我正在尝试在 CSS 中创建圆形按钮 我用border radius 100 使按钮看起来像一个圆圈 但只有当我明确设置元素的宽度和高度时它才有效 但如果我这样做 按钮将不会调整以修复较大的文本 这是我到目前为止所尝试过的 round bu
  • 使用C代码查找文件的inode号

    我有程序 名称为 GiverootAccess 该程序可以接收当前目录 giverootAccess 所在目录 中的文件名作为命令行参数 然后该文件将获得 root 访问权限 该文件可以是可执行文件或 shell 脚本 现在的问题是 黑客可
  • Resources.getIdentifier(),deftype 参数的可能值?

    我正在尝试了解一个对投资组合执行计算的 Android 应用程序 投资组合存储在res values portfolio xml 当按下应用程序中的按钮时 将按如下方式检索投资组合数据 String portfolioName TextVi
  • 从 Angular 工厂中的 HTTP 返回响应数据

    factory Api function http var API http 127 0 0 1 4567 return get function method return http get API method success func
  • 如何在 WPF 中将控件标记为“私有”?

    对于 WinForms 程序 我已经习惯将控件的 Modifiers 属性标记为 私有 以防止外部类和其他任何您能够看到和弄乱它们的东西 由于 WPF 还很陌生 我在 WPF 中看不到明显的等效项 因此外部类无法看到我放到表单或另一个用户控
  • RegisterStartupScript和执行顺序

    我在用ScriptManager RegisterStartupScript注册对大量JS函数的调用 ScriptManager RegisterStartupScript this this GetType Script1 SomeScr
  • 字符串文字的地址长度

    我发现在带有 GCC 的 Linux 系统上 字符串文字的地址似乎比其他变量小得多 例如 以下代码生成下面所示的 o p include
  • 我可以在 Swift 代码中运行 JavaScript 吗?

    我需要在 Swift 代码中包含 JavaScript 代码才能调用 signalR 聊天 这可能吗 如果没有的话我可以转换吗 sendmessage是一个按钮 function Declare a proxy to reference t
  • 德沃夏克打字机,你们如何处理像 Ctrl-C 这样的快捷键?

    您是否将操作系统中的键绑定更改为 Ctrl Q 你能把左手伸到C键上吗 您是否使用右手 ctrl 并用右手按快捷键 When I switched to Dvorak I was using primarily Ctrl Ins and S
  • 无法使用统一初始化复制 std::vector> 。它是否正确?

    以下代码无法在 GCC 4 7 2 或 Clang 3 2 中编译 include
  • htaccess - 禁止直接访问除登录用户之外的所有文件 (PHP)

    使用 htacess 拒绝所有 是否可以只允许登录我的系统的用户直接访问文件 如果有什么区别的话 我的网站是用 Drupal PHP 构建的 如果这是可能的 那么理想情况下我也想检查用户的角色 你不能这样做 htaccess独自的 你需要做
  • Visual Studio 2013隐藏构建进度窗口

    在 Visual Studio 2013 社区中 每次构建时 都会出现一个构建进度窗口 并在构建完成后消失 是否有一个选项可以隐藏而不显示该窗口 谢谢 该窗口是由 CodeMaid 扩展生成的 要禁用它 请打开 Codemaid 的配置 然
  • 如何根据动态改变背景颜色来动态改变文本颜色

    我正在建立一个新网站 需要我的文本根据不断变化的背景颜色改变颜色以保持对比度 我在网上搜索了不涉及 Sass 的答案 但没有一个有效 我尝试过一些 JavaScript 但它们仅在背景是您手动更改的固定颜色时才起作用 我当前的文件 http
  • ASP.NET 2.0 中的 Gridview 列宽度

    如何控制 ASP NET 2 0 中 gridview 控件的列宽 您可以使用 HeaderStyle Width ItemStyle Width 或 FooterStyle Width 属性 这些可以应用于所有列或每列
  • Typescript Jest 说我想要模拟的类型上不存在模拟或模拟返回值

    这是我想测试的一个类 Request js import axios AxiosInstance from axios import config from config const axiosSingleton AxiosInstance
  • 在 d3 中通过退出转换保持元素顺序 (selection.order)

    我将切入正题fiddle http jsfiddle net K6Yrw http jsfiddle net K6Yrw 点击第二个按钮快速查看效果 我在用着selection order因为我需要 DOM 元素以与数据元素相同的顺序存在
  • 乘客遇到库未加载错误:liblzma.5.dylib

    我正在尝试与乘客一起运行轨道 我安装了 AWS SDK 1 和 2 gem gem aws sdk v1 gem aws sdk gt 2 当我使用AWS sdk运行时 s3 AWS S3 new 我遇到错误 LoadError dlope
  • 使用 .htaccess 创建绝对路径的子域

    嘿 我的主人真是太糟糕了 由于某些奇怪的原因 在 cPanel 中创建子域根本不起作用 而且他们的支持热线总是很忙 我想我可以通过使用 htaccess 来解决这个问题 我确信这并不难 但我对 mod rewrite 有点陌生 并且在过去
  • Excel VBA 重新计算选择

    我有一些 Excel 电子表格对数据库的影响非常大 对总账表进行了 100 多次查询 哎呀 仅刷新我所在的工作表 SHIFT F9 在某些电子表格中很有帮助 但我想要一种仅刷新所选单元格的方法 我想出了以下代码 并将其放置在 ThisWor
  • 如何制作双向平台box2d主体?

    我使用 box2d 创建了平台 我想要 box2d 身体检测而不是动态检测 Box2d 形状将执行以下操作 在某些条件下检测碰撞 在某些情况下不检测碰撞 两种条件都适用于同一 box2d 对象中的不同条件 任何想法都会有很大帮助 提前致谢