使用 Box2D 制作角色动画的最佳方法是什么?

2024-02-11

我正在为 Android 开发一款 2D 水下动作角色扮演游戏,使用 Box2D 作为物理引擎,主要用于碰撞检测、碰撞响应以及游戏角色在由墙壁、岩石和其他生物组成的环境中的移动。

我尝试了两种不同的方法来使用 Box2D 实现角色动画,但都发现了问题。由于我是 Box2D 和物理引擎的新手,因此我希望获得关于如何最好地完成这些事情的建议。

我尝试做的动画示例如下:

一条鱼想要攻击另一条鱼,也会这样做:
1)以一定速度向目标移动
2) 咬掉目标生物
3)转身逃跑,回到攻击开始的地方
4) 转身面对目标,准备再次攻击

我尝试过的两种方法是:

A)对攻击者施加力量(使用body.applyForce())将其移向目标,然后在碰撞后用另一个力将其再次移回
问题:
* 攻击者经常击中目标并弹开,然后以极快的速度猛冲回来,并在各处的墙壁上弹回。速度是相当随机的,取决于它撞击目标的位置、目标的质量等。它破坏了动画并且看起来很糟糕。
* 很难弄清楚应该向攻击者施加什么力以及何时模拟物理世界中的特定动画,使其看起来逼真

B)直接设置攻击者的位置(使用body.setTransform())将攻击者移动到正确的位置,每一步向前移动,然后再次向后移动。
问题:
* 直接设置位置可以让攻击者忽略与墙壁和其他生物的碰撞,因此卡在墙壁中是很常见的
* 如果玩家正在攻击,我会在玩家移动时更新世界原点,以使玩家保持在屏幕中间。这工作得很好,除了当我开始动画时,因为我不希望屏幕跟随动画,而只是现有速度的运动分量,我不知道,因为我正在覆盖 Box2D 力/当我设置位置时的速度。我确信这是可能的,但是很困难 - 也许我错过了一些明显的东西。

我应该监控碰撞吗?覆盖碰撞响应?还有别的事吗?

那么,您建议我如何解决这个问题?


我只习惯使用 Farseer,但 Farseer 是 Box2D 的直接移植,所以我希望这个答案仍然有帮助。

除了施加力和传送之外,您还可以设置身体的线性移动速度。这样你就可以在不施加力的情况下让鱼向玩家移动。您应该从鱼身上捕获碰撞事件,并在每个事件中比较鱼是否击中了玩家,然后在与玩家的碰撞事件中设置 false/NoCollision,以便它不会反弹。现在将鱼的身体设置为忽略与玩家身体的任何碰撞,并使用固定关节将鱼粘在玩家身上。您现在可以播放咬合动画。

在咬合动画之后,您想要脱离鱼。开始你的逃跑动画,移除关节并将鱼传送到玩家身体的边缘(这样它就不会与之碰撞)。之后,重新启用鱼和玩家身体之间的碰撞,并将鱼远离玩家(通过再次设置线性移动速度,或者通过力获得良好的弹跳效果。

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

使用 Box2D 制作角色动画的最佳方法是什么? 的相关文章

随机推荐

  • 连接语句省略条目

    使用 Unix 2 6 18 194 el5 我遇到一个问题 该连接语句省略了匹配中的值 索引 我发现这些值在 11 90 之间 大约 350 万个条目 并且我尝试查找外来字符 但我可能忽略了某些内容 尝试使用 cat v 来查看隐藏字符
  • 雾化T的.Net Collection?

    我正在寻找是否有一个预先存在的 Net 哈希集类型 实现适合原子化一般类型 T 我们有大量相同的对象用于序列化源 需要原子化以节省内存 A Dictionary
  • union '双关语'结构带有“公共初始序列”:为什么 C (99+) 而不是 C++ 规定了“联合类型的可见声明”?

    背景 通过以下方式讨论类型双关的大多数非或实现定义的性质union通常引用以下位 此处通过 ecatmur https stackoverflow com a 31557852 2757035 https stackoverflow com
  • Angular 2 - 警告/提示的表单验证

    我正在尝试添加不会使表单无效的表单验证 验证应仅显示为警告 例如 年龄验证 年龄大于 90 表示警告 年龄大于 120 表示错误 我已经尝试过在表单上使用两个 FormGroup 并在输入字段上使用两个 formControl 仅使用第一个
  • 正确管理addObserverForName:object:queue:usingBlock:

    我对 Objective C 中的块仍然很陌生 想知道我的伪代码是否正确 我不确定仅删除观察者是否足够 或者是否必须调用removeObserver name object void scan Scanner scanner Scanner
  • 使用 Powershell 将 EBS 卷附加到 Windows EC2 [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我看到很多关于在 Linux 上添加 EBS 卷的问题得到了解答 但在 Windows 上却没有 假设您发现磁盘空间不足 可能通过 C
  • 带通配符的 spring

    我想从多个位置加载键值对 我的第一个猜测是
  • 仅使用 JavaScript 的递归 HTML 表格树

    我开发了单击父节点来显示其子行 我只需要启用单击子数据即可将其子子行作为递归树或表树打开 有人可以添加你的逻辑来帮助我理解并帮助其他人吗 document getElementById products addEventListener c
  • 气流日志文件不存在:

    Airflow 在几周内工作正常 但突然开始出现几天错误 Dags 会因此错误而随机失败 日志文件不存在 airflow path 1 log获取自 http 8793 airflow path 1 log 无法从工作人员获取日志文件 对
  • Patentsview API Python 3.4

    我是Python的初学者 目前正在使用Python开发一个小项目 我想为 Patentsview org 的专利研究构建一个动态脚本 这是我的代码 import urllib parse import urllib request http
  • Android:带有链接链接的可点击 TextView

    我的布局中有一个 TextView 它在 XML 中设置了一个属性 clickable true 这是为了让它表现得像一个带有文本和图标的按钮 现在 我通过调用 HTML fromHtml 添加到 TextView HTML 文本 然后应用
  • 支持样式标签的 HTML Sanitizer for .NET

    我正在寻找一个好的 HTML 清理程序以在 ASP NET 项目中使用 问题是清理程序必须支持样式属性 这些属性可能包含 CSS 属性 这些属性也必须被清理 到目前为止我还没有找到一个好的产品可以使用 在我硬着头皮写自己的消毒剂之前 我想我
  • 在不能抛出的地方抛出NullPointerException

    我在一段无法抛出 NullPointerException 的代码中得到一个 NullPointerException 我开始认为在 JRE 中发现了一个错误 我使用javac 1 8 0 51作为编译器 问题出现在jre 1 8 0 45
  • 在 Electron process.stderr 中未定义

    我正在尝试在我的 Electron 应用程序中使用 sqlite3 nodejs 插件 我在加载 sqlite3 模块时遇到错误 查看崩溃的堆栈跟踪 我发现 sqlite3 有多个依赖项 其中之一是日志库 npmlog 该库尝试从以下位置初
  • Google Glass:执行“点击”事件或类似的事件

    请看下面的代码
  • 在 ES6 中如何调用我的类的父类的父类的构造函数?

    我正在使用 ES6 类 我的类 A 扩展了类 B 类 B 扩展了类 C A 如何扩展一个方法 然后调用该方法的 C 版本 class C constructor console log class c class B extends C c
  • 如何在 SQL Server Express 表中保存 QTime 并读取它?

    我在 SQL Server Express 中有一个包含字段的表name varchar 10 and timeVar time我想保存 a 的值QTime变量在time field 这是我尝试过的 QTime time QTime cur
  • 无法按名称激活工作表

    我试图在打开电子表格时根据当前月份激活每月工作表 问题出在脚本末尾 无法选择工作表 看起来getSheetByName gets a null值 不被接受setActiveSheet function selectmonth var now
  • 搜索大量大文本的最快方法

    我有一个用 C 编写的 Windows 应用程序 需要从数据库加载 250 000 行 并提供 键入时搜索 功能 这意味着只要用户在文本框中键入内容 应用程序就需要搜索所有 250 000 条记录 其中顺便说一句 单列 每行 1000 个字
  • 使用 Box2D 制作角色动画的最佳方法是什么?

    我正在为 Android 开发一款 2D 水下动作角色扮演游戏 使用 Box2D 作为物理引擎 主要用于碰撞检测 碰撞响应以及游戏角色在由墙壁 岩石和其他生物组成的环境中的移动 我尝试了两种不同的方法来使用 Box2D 实现角色动画 但都发