如何为佛山地区的企业定制一个专属的骏域团购网站app?
摘要:佛山网站建设骏域,团购网站app制作,重庆南坪网站建设,小说网站开发 公司仓库: https:gitee.commrxiao_com2d_game 回顾昨天的 bug 今天我们继续开发进度,进行调试昨天
佛山网站建设骏域,团购网站app制作,重庆南坪网站建设,小说网站开发 公司仓库: https://gitee.com/mrxiao_com/2d_game
回顾昨天的 bug
今天我们继续开发进度#xff0c;进行调试昨天代码的问题#xff0c;主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏#xff0c;但我们希望能够处理多层的房间#xff0c;玩家…仓库: https://gitee.com/mrxiao_com/2d_game
回顾昨天的 bug
今天我们继续开发进度进行调试昨天代码的问题主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏但我们希望能够处理多层的房间玩家可以上下走动这需要处理与三维位置相关的问题。
昨天我们开始调整实体的 Z 坐标确保它们有完整的高度信息并且应该从地面开始位置会从地面向上延伸。然而在调试时发现玩家的角色似乎比预期低应该碰到树木的位置时角色却没有停下来显得像是角色下沉了。我们也观察到角色在楼梯处的碰撞没有按预期进行可能是因为角色的 Z 坐标没有正确计算其高度。
因此有人猜测问题出在没有修正站在地面上的代码忘记考虑实体的高度。也就是说虽然角色的底部位置被设置在地面上但角色的高度应该从该位置向上浮动。因此调整这个问题确保角色位置正确是接下来的重点。
黑板实体的基点与地面位置之间的差异
有人提出了一个很好的猜测问题可能出在实体的位置计算上。我们来看一下实体的高度问题。假设实体是这样的形状侧面图它的 Z 维度代表它的高度。如果我们把实体的高度表示为 Z 维度那么它的中心位置应该在地面上方半个 Z 维度的高度。也就是说实体的实际地面接触点应该是它的中心位置减去它的一半高度。
因此假设地面是某个高度那么实体应该从地面加上它的高度一半来确定其实际的位置。这就意味着我们不能简单地把实体的位置设置为地面而是要加上它的一半高度才能确保它的底部位置正确。换句话说地面实际上应该在中心点下方半个 Z 维度的位置。
这个建议看起来很有道理可能正是导致问题的根本原因。
查看当前如何指定这些概念
在处理这个问题时首先发现了实体的位置计算没有考虑到实体的尺寸尤其是高度Z 维度。具体来说地面高度的计算没有考虑到实体的高度这导致了实体的位置不正确。
我们在处理重叠overlap时地面高度是通过一个插值lerp计算得出的。为了修复这个问题计划在进行重叠测试后根据实体的尺寸调整地面高度。也就是说在计算出重叠后的地面高度后需要再调整它使其考虑到实体的实际尺寸特别是其高度Z 维度。这应该能解决当前问题确保实体的底部能正确地与地面对齐。
game_sim_region.cpp: 将 0.5 * Entity-Dim.Z 加到地面位置
要解决这个问题计划将地面高度调整为原本的地面高度加上实体高度的一半。也就是说在计算地面高度时需要将原本的地面位置上移移动的距离是实体高度的一半。这就是在之前图示中提到的做法通过这种方式确保实体的位置正确。
运行游戏发现问题还没完全解决
调试过程发现当前的碰撞行为有些不合理看起来可能是已经到了顶部楼层导致上下碰撞变得异常。此时需要进一步调试碰撞检测代码尤其是在绘制方面。为了更清楚地理解问题首先可能需要添加一些调试代码来检查当前的碰撞情况确保问题出在哪里。
调试进入计算地面位置的代码
通过调试代码发现碰撞系统中的地面计算已经修复了之前的错误角色的位置现在正确地悬浮在地面上符合预期的高度0.62的实体高度的一半。这解决了之前在预演阶段提到的bug。不过问题可能还在于绘制部分的代码没有完全处理好因此需要继续修复绘制代码。
game.cpp: 查看当前的绘制代码
绘制代码当前使用了一个占位符方法导致调试变得有些困难。具体来说在绘制位图时传入的是位图的左上角位置而不是位图的中心。因此绘制代码中的 DrawBitMap 调用使用了最小角落位置而这与预期的中心对齐有所不同。代码实际上对位图的位置进行了偏移但并未考虑位图的实际大小导致绘制时的对齐问题。虽然目前的代码中已经通过偏移量修正了这个问题但这种方式比较粗糙存在不一致的问题。最终需要决定是修复这个对齐bug还是重新整理代码来改善渲染系统。在不确定时决定暂时不对渲染系统做大幅改动保持现有代码结构。
引入 EntityBaseP
为了正确对齐实体的绘制位置应该将实体的位置调整为基于地面对齐而不是基于其中心位置。建议将实体的当前位置重新命名为 EntityBaseP其位置应为当前实体位置加上实体在 Z 轴上的一半尺寸。这样绘制时就能够与地面对齐因为当前地面位置的对齐是基于这个偏移量的。
