gpt4 book ai didi

java - 不同角色速度的 Pacman 碰撞检测?

转载 作者:行者123 更新时间:2023-12-01 13:49:15 25 4
gpt4 key购买 nike

我正在编写一个基于网格的 2D 吃 bean 人游戏。所有图 block 的尺寸均为 8x8。在游戏中, map 图 block 被视为 16x16,角色(吃 bean 人和幽灵)被视为 32x32。实际上,它们都是从 8x8 block 的 spritesheet 中提取的。我将位置存储为每个角色的中心点。由于角色图 block 比 map 图 block 大,因此 map 的构建方式要求角色能够“重叠”到被阻挡的图 block 上。

为了解决这组问题,我创建了一个不可见的矩形并将其附加到角色的位置。如果位置是 (x,y) 点,则矩形是围绕该点的框。这个矩形在游戏中基本上是 16x16,并且位于角色的中心,这允许必要的重叠。

如果您使用 8px 作为全局移动速度,则效果很好,但我想将 8px 视为“100% 速度”,并使用 [0 范围内的 double 值来完全控制字符速度,1).位置存储为双点,因此在该级别上,这很好。不过,我将位置读回为整数,因为我正在处理像素。

所以我问的问题本质上是“如果现在向 Y 方向移动 X 像素量,我的碰撞盒会接触到被阻挡的图 block 吗?但是如果您一次移动 5px,这最终会导致非常明显的结果问题。假设你在 x = 0 处,向右移动。如前所述,游戏中的图 block 为 16x16,并且其中两个在第三个之前打开,第三个被阻止。所以你移动,x = 5,x = 10, x = 15, x = 20,我们刚刚到达第二 block ,x = 25, x = 30, x = 35 现在我们在第三 block ...但是等等。我们不能去那里,因为 X = 35 发生碰撞。不幸的是,我们需要转弯并开始向下移动,但我们不能,因为现在我们的 Y 轴没有与网格正确对齐。我们的 X 位置需要为 32,但可以't。

我想问大家的问题是,我有什么选择?您有什么想法或见解?我有一种感觉,我让事情变得比我需要的更加困难。

最佳答案

听起来你有...

为什么不给你的“吃 bean 人” Sprite 一个速度 vector ?该 vector 不仅会描述“吃 bean 人”行进的速度,还会描述其方向,这意味着您可以看到前方。

“吃 bean 人”应该根据以下对话进行计算并最终做出决定......“嘿,以这个速度朝这个方向移动......在这么多秒内我将撞到墙上,那什么时候发生?”。秒甚至不必是秒......它们可以是“正方形”。

您需要一个函数,它接受初始运动 vector (方向和速度),该函数返回 X,Y 点的坐标,“吃 bean 人”必须在该点停止,在那里他不能走得更远并且必须改变方向(与墙相邻的瓷砖的中心)。每次“吃 bean 人”改变方向时,再次运行此计算......您不需要不断检查下一个方格是否可以通过。如果他的方向没有改变并且速度恒定..你只需要计算一次,让坐标系完成剩下的工作。

通过这种方法,方 block 的大小和速度是无关紧要的......直到“吃 bean 人”击中或在他的下一个运动中超过停止点,继续沿 vector 移动。

关于java - 不同角色速度的 Pacman 碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com