Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript游戏级冲突_Javascript_Html_Canvas - Fatal编程技术网

Javascript游戏级冲突

Javascript游戏级冲突,javascript,html,canvas,Javascript,Html,Canvas,我目前正在编写我的第一个游戏,并在Javascript+HTML5画布上完成。游戏是一个自上而下的点击式动作射击游戏。无论如何,昨天我完成了使用圆和四叉树实现碰撞检测,以最小化比较。我把所有的子弹、玩家和敌人都扔进四叉树。现在,一切正常,但我不确定如何处理下一步,即在实际水平上处理碰撞。子弹应该被墙挡住,演员、球员和敌人应该被栅栏和墙挡住,等等 我是否应该定义形状来表示我所在楼层的墙壁,并将其作为四叉树中的对象形式包含在内,然后使用SAT来评估每个元素与它可能碰撞的任何东西,或者是否有其他方法,

我目前正在编写我的第一个游戏,并在Javascript+HTML5画布上完成。游戏是一个自上而下的点击式动作射击游戏。无论如何,昨天我完成了使用圆和四叉树实现碰撞检测,以最小化比较。我把所有的子弹、玩家和敌人都扔进四叉树。现在,一切正常,但我不确定如何处理下一步,即在实际水平上处理碰撞。子弹应该被墙挡住,演员、球员和敌人应该被栅栏和墙挡住,等等

我是否应该定义形状来表示我所在楼层的墙壁,并将其作为四叉树中的对象形式包含在内,然后使用SAT来评估每个元素与它可能碰撞的任何东西,或者是否有其他方法,例如创建一个隐藏的图像层来勾勒路径,然后测试每个对象的坐标以确保它不会落在黑色像素上,这表明它正在与静止的地形碰撞


谢谢。

来自一个类似的问题:

我建议阅读这篇关于鬼魂运动和 碰撞检测在计算机中工作

然后,我建议将轰炸机级别逻辑建模为 收集瓷砖。每个磁贴都代表了图形中的一个离散位置 级别,并且逻辑上不可能在平铺或平铺之间 同时占用两块瓷砖。每个磁贴都可以跟踪哪种类型的磁贴 地形特征当前在其上,以及它是否有效 玩家和敌人的目标磁贴,可能带有 如果允许敌人穿越,则每个人的规则不同 玩家通常无法通行的地形

这样,就不需要对每个对象都使用碰撞检测算法 在世界上。当敌人移动的时候,或者 用户试图移动他们的角色,您所要做的就是全部选中 与其当前互动程序相邻的互动程序最多为4个,如果需要,则最多为8个 允许对角线移动,查看每个瓷砖是否代表有效移动 方向,如果移动方向无效,则阻止移动

为了回答你的问题,是的,迭代世界上的每一个对象 每次职位更新都会非常低效


我不认为这对我有用,因为我希望演员们能够360度地移动,子弹和角度都一样。因此,我无法真正实现任何类型的基于磁贴的系统,因为您需要经常处于磁贴之间。您只需要将您的磁贴变小:大多数SNES游戏都是基于磁贴的,因此您肯定可以用它做很多事情,请参阅。此外,仅仅因为世界是基于磁贴的,并不意味着角色总是必须精确地出现在一个磁贴上。所以基本上,磁贴是我保持玩家位置轨迹的一种方式,当玩家尝试移动到一个新的磁贴时,我会检查该标题是否是一个可移动的磁贴。如果不是这样,我会进行计算,让玩家直接移动到瓷砖的边缘,但不是一直移动。我把瓷砖表示成一个多数组,对吗?然后我可以把瓷砖表示成10px的部分。一个35像素的圆一次至少会占用4×4个图块,如果这个圆移动到一个用1表示的图块中,我会继续让它移动,直到击中30的x,这就是一个图块的边缘。是的,这是基本的想法。您只需要使您的平铺大小与需要放置在其上的最小元素的大小相同。较大的元素只会占用更多的瓷砖。