gpt4 book ai didi

xna - 二维游戏中的表面检测?

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

我正在开发 2D 平台游戏,我想知道实现表面(碰撞)检测的最佳(性能方面)方法是什么。

到目前为止,我正在考虑构建一个由一系列线构成的关卡对象列表,我沿着这些线绘制瓷砖。

alt text http://img375.imageshack.us/img375/1704/lines.png

我认为每个对象都拥有他行走的表面的 ID,以便在上/下坡行走时轻松操纵他的 y 位置。

像这样的东西:

//Player/MovableObject class
MoveLeft()
{
this.Position.Y = Helper.GetSurfaceById(this.SurfaceId).GetYWhenXIs(this.Position.X)
}

所以我用来检测“掉落/在表面上行走”的逻辑是一个简单的点(玩家的小腿)-接触线(表面)检查
(有一些安全近似值
- 比方说在线上 1-2 个像素)。

这种方法行吗?
我一直难以找到有关此问题的阅读 Material ,因此请随时删除链接/建议。

最佳答案

长时间使用基于多边形的 2D 平台游戏,让我给您一些建议:

制作一个基于平铺的平台游戏。

现在,直接回答您关于碰撞检测的问题:

你需要让你的世界几何体变得“实体”(你可以让你的玩家对象成为一个点,但让它成为实体更好)。我的意思是“实体” - 您需要检测玩家对象是否与您的世界几何体相交。

我试过“玩家是否越过这个世界几何体的边缘”,但实际上是行不通的(即使它似乎在纸上可行——浮点精度问题不会是你唯一的问题)。

网上有很多关于如何在各种形状之间进行相交测试的说明。如果您刚刚开始,我建议您使用 Axis-Aligned Bounding Boxes (AABBs)。

很多,很多,很多,很多,制作基于平铺的平台游戏比具有任意几何形状的平台游戏更容易。所以从瓦片开始,用 AABB 检测交叉点,然后一旦你开始工作,你就可以添加其他形状(例如斜坡)。

一旦检测到交叉点,就必须执行碰撞响应。同样,基于瓷砖的平台游戏是最简单的 - 只需将玩家移动到与之碰撞的瓷砖外(你是移动到它上面还是旁边? - 这将取决于碰撞 - 我将留下如何做到这一点是一个锻炼)。

(PS:你可以用方形瓷砖获得极好的结果——例如,看看 Knytt Stories。)

关于xna - 二维游戏中的表面检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973579/

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