我目前正在编写我的第一个游戏,并且正在使用Javascript + HTML5 Canvas进行编写。该游戏是一款自上而下的点击式动作射击游戏,采用WASD机芯。无论如何,昨天我完成了使用圆和四叉树实现碰撞检测以最小化比较。我将所有的子弹,玩家和敌人扔进了四叉树。现在,一切正常,但我不确定如何处理在实际级别上处理碰撞的下一步。子弹应该被墙壁挡住,演员(玩家和敌人)应该被围墙和墙壁等挡住。
我应该定义形状来表示我的关卡的墙壁并将它们包含在四叉树中作为对象的形式,然后使用SAT来评估每个元素对抗它可能碰撞的任何东西,或者是否有其他方式来创建隐藏图像层,勾勒出路径,然后测试每个对象的坐标,以确保它不会落在黑色像素上(这表明它与不动的地形相撞)?
感谢。
答案 0 :(得分:0)
来自类似的问题:
我建议阅读这篇关于幽灵运动如何的优秀文章 碰撞检测在PacMan中有效。
然后我建议将你的炸弹人水平逻辑建模为 瓷砖的集合。每个图块代表您的一个离散位置 等级,并且在逻辑上不可能是“之间”瓷砖或 同时占用两个瓷砖。每个瓷砖都可以跟踪哪种类型 当前正在使用地形功能,以及它是否有效 玩家的目标牌(以及潜在的敌人) 如果敌人被允许遍历,则每个规则都有不同的规则 对于玩家来说通常无法通行的地形。)
然后,您不需要每个对象的碰撞检测算法 在世界上。当敌人移动或者移动时 用户试图移动他们的角色,你所要做的就是全部检查 与当前图块相邻的图块(如果您是4或8,则为最大图块) 允许对角线移动),看看每个瓷砖是否代表有效的运动 如果方向不在有效方向,则阻止移动。
回答你的问题,是的,迭代世界上的每一个对象 在每个职位上更新都会非常低效。