2D 平台游戏两个轴的碰撞问题

2023-11-23

我正在使用 C++ 和 SDL 开发一个小型 2D 平台游戏/格斗游戏,但在碰撞检测方面遇到了很多麻烦。

这些关卡由一系列图块组成,我使用 for 循环来遍历每个图块(我知道这可能不是最好的方法,而且我可能也需要这方面的帮助)。对于角色的每一侧,我将其朝该方向移动一个像素并检查是否发生碰撞(我还检查角色是否朝该方向移动)。如果发生碰撞,我将速度设置为 0 并将玩家移动到图块的边缘。

我的问题是,如果我首先检查水平碰撞,并且玩家每帧垂直移动超过一个像素,它会处理水平碰撞并将角色移动到图块的一侧,即使图块位于下方(或上方)人物。如果我首先处理垂直碰撞,它会执行相同的操作,只是它针对水平轴执行此操作。

如何处理两个轴上的碰撞而不出现这些问题?有没有比我这样做更好的处理碰撞的方法?


XNA 的 2D 平台游戏示例也使用基于图块的碰撞。他们的处理方式非常简单,可能对您有用。这是其中内容的精简解释(删除了特定于他们的演示的内容):

  1. 应用移动后,它会检查碰撞。
  2. 它根据玩家的边界框确定玩家重叠的图块。
  3. It iterates through all of those tiles...
    1. 如果正在检查的图块不合格:
    2. 它确定玩家在 X 轴和 Y 轴上与不可通过的图块重叠的距离
    3. Collision is resolved only on the shallow axis:
      1. 如果Y是浅轴(abs(overlap.y)
      2. 边界框根据位置变化进行更新
    4. 转到下一个图块...

如果您获取代码并想了解它们具体执行的操作,则可以在 player.cs 的 HandleCollisions() 函数中找到该代码。

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

2D 平台游戏两个轴的碰撞问题 的相关文章

  • Python 的 pack("

    我不太了解 python 但从文档中可以看出代码 str AAAA str pack
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • BufferBlock 连续

    我想使用以下方式实现消费者 生产者模式BufferBlock
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 使用默认行为将模型绑定到接口

    我正在尝试将控制器操作绑定到接口 但仍保持默认的绑定行为 public class CoolClass ISomeInterface public DoSomething get set ISomeInterface public clas
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 如果我重新分配并且新大小为 0,会发生什么情况。这与释放等效吗?

    给出以下代码 int a NULL a calloc 1 sizeof a printf d n a a realloc a 0 printf d n a return 0 它返回 4078904 0 这个 realloc 相当于 free
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • “&”和“|”有什么区别在打字稿中

    从打字稿文档中 我知道 和 意味着 交叉类型 和 代表 联合类型 但我想知道与以下示例有什么区别 type Type1 number boolean type Type2 number boolean 来自官方 Typescript 文档
  • WebBrowser.DrawtoBitmap() 为少数网站持续生成空白图像

    我一直在在单独的 STA 线程中运行的 asp net 页面中使用 WebBrowser DrawtoBitmap 将网页捕获为图像 但我发现我一直在少数网站上获得空白图像 我知道该方法不受 官方 支持 但如果有人能为我提供任何原因或解决这
  • 动态库中的 libstdc++ 静态链接

    为了理解问题 我应该告诉您更多有关加载动态库的程序的信息 这是半条命专用服务器 它使用位于可执行文件旁边的旧 libstdc 为了避免出现问题 当使用新标准库中的功能时 我通常将我的项目静态链接到 libstdc 我的朋友告诉我 如果加载
  • XSD 验证错误:元素“{http://www.example.com}Scope”:该元素不是预期的元素。预期是(范围)

    我创建了以下 XSD 使用 Eclipse
  • 如何在sql server中在两个二进制类型之间进行按位异或?

    根据这个链接 按位运算符 Transact SQL 我们可以在二进制和 int smallint tinyint 之间进行按位运算 反之亦然 但是如何在 sql server 中在两个二进制类型之间进行按位异或呢 或者 如果这是不可能的 我
  • SCNPhysicsWorld错误

    我一直在摆弄 swift 并试图让物理世界正常工作 这是我得到的错误 i386 架构的未定义符号 OBJC CLASS SCNPhysicsWorld 引用自 GameViewController o 中的 TFC3sk218GameVie
  • 从控制台应用程序发送电子邮件时导致套接字异常的原因是什么?

    我正在尝试编写一个基本的控制台应用程序来发送电子邮件 问题是我不断收到 Socket 异常 尝试以访问权限禁止的方式访问套接字 xxx xxx x xxx 25 我关闭了 Windows 防火墙 但它没有改变任何东西 我尝试在指定或不指定凭
  • 比较 2 个自定义对象 - C#

    我需要在基类中编写一个通用方法 该方法接受 2 个对象作为参数并比较它们是否相等 Ex public abstract class BaseData public bool AreEqual object O1 object O2 Need
  • ARM 上的 x86 Docker 镜像

    我有一个由 x86 计算机构建并上传到 Amazon ECR 的 Docker 映像 我正在尝试在 ARM 机器上运行此映像 但是 我得到以下信息 sudo docker run 1b3ed34937e8 WARNING The reque
  • 决定在运行时序列化哪些属性

    假设我必须按级别序列化 Car 类的对象 例如内部和公共 公共级别中的某些属性不应序列化 因为它们是内部的 目前 我能想到的实现此目的的 最简单 方法是使用继承 class CarPublic public int PropX get se
  • 如何在 HTML“选项”标签上显示工具提示?

    无论是使用纯 HTML 还是 jQuery 辅助 JavaScript 如何在个人上显示工具提示
  • 使用 AVPlayer 和 AVAssetExportSession 进行缓存

    我想使用 AVPlayer 缓存渐进式下载视频 如何将 AVPlayer 的项目保存到磁盘 我正在尝试在播放器的 currentItem 已完全加载 上使用 AVAssetExportSession 这段代码给了我 AVAssetExpor
  • Post/Redirect/Get 上的整页重新加载忽略缓存控制

    我有一个加载大量图像 CSS 和 JavaScript 的页面 我添加了一个远期的 Expires 标头 并将这些外部依赖项上的 Cache Control 设置为 public 以便它们应该被缓存 但每次我执行 Post Redirect
  • 运行bash脚本时自动输入密码[重复]

    这个问题在这里已经有答案了 例如 假设我有一个脚本说 bin bash sudo setpci s 00 02 0 F4 B 00 如何将 root 密码放入脚本中 以便在读取和执行 sudo 行时接受它作为密码 这样我就不必手动输入 产卵
  • MySQL 中 UNIX_TIMESTAMP 和 NOW() 的区别

    我有一个博客 用户可以发表评论 我插入他们发表评论的时间NOW 然后使用date j M Y stored timestamp 显示他们发布的时间 我想知道 NOW 是否返回locatime of the end user or the l
  • EntityManager查询后不刷新数据

    我当前的项目使用 HSQLDB2 0 和 JPA2 0 The scenario is I query DB to get list of contactDetails of person I delete single contactIn
  • Java 中的模拟文件 - 模拟内容 - Mockito

    我对模拟还很陌生 我一直在尝试模拟实际内容 本质上仅在内存中创建一个虚拟文件 以便在任何时候都不会将数据写入磁盘 我尝试过一些解决方案 例如模拟文件并模拟尽可能多的我能找出的属性 然后使用文件写入器 缓冲写入器写入其中 但这些解决方案效果不
  • android 工具链缺少 crtbegin_so.o (自定义构建)

    我使用 android build gcc sh 脚本将 gdc 与 gcc 一起编译 并在 build core definitions mk 中包含了一个新的存根 以在构建过程中处理 D 语言文件 我知道此时编译一切正常 但我的问题是链
  • 如何创建带有可重写变量的 PayPal 按钮

    您好 我想创建一个具有动态设定金额的贝宝购买按钮 我想通过表单内的文本输入字段传递金额 并通过隐藏字段传递 item number 问题是 无论我做什么 我都会从 paypal 网站上获得一个加密的 s xclick 按钮 此按钮不允许将隐
  • 2D 平台游戏两个轴的碰撞问题

    我正在使用 C 和 SDL 开发一个小型 2D 平台游戏 格斗游戏 但在碰撞检测方面遇到了很多麻烦 这些关卡由一系列图块组成 我使用 for 循环来遍历每个图块 我知道这可能不是最好的方法 而且我可能也需要这方面的帮助 对于角色的每一侧 我