Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Flash Actionscript 2高级碰撞检测_Flash_Actionscript_Actionscript 2_Collision_Hittest - Fatal编程技术网

Flash Actionscript 2高级碰撞检测

Flash Actionscript 2高级碰撞检测,flash,actionscript,actionscript-2,collision,hittest,Flash,Actionscript,Actionscript 2,Collision,Hittest,我想知道在AS2中进行高级碰撞检测的最佳方法是什么。我不是说包围盒,因为那很好。具体来说,我如何阻止玩家在与某物碰撞时朝一个方向移动 想象一个自上而下的射手。基本上,我在寻找如何在类似这样的游戏中实现碰撞检测: 我有一个数组,可以跟踪玩家当前移动的方向(上、下、左、右)。我还有四个变量,如果相应的变量为真,则允许玩家向每个方向移动。当玩家与碰撞数组中的movieclip碰撞时,我将与他移动方向相关的变量设置为false,这样他就不能继续沿着与对象碰撞时的方向移动。当玩家沿对角线(两个方向)移动并

我想知道在AS2中进行高级碰撞检测的最佳方法是什么。我不是说包围盒,因为那很好。具体来说,我如何阻止玩家在与某物碰撞时朝一个方向移动

想象一个自上而下的射手。基本上,我在寻找如何在类似这样的游戏中实现碰撞检测:

我有一个数组,可以跟踪玩家当前移动的方向(上、下、左、右)。我还有四个变量,如果相应的变量为真,则允许玩家向每个方向移动。当玩家与碰撞数组中的movieclip碰撞时,我将与他移动方向相关的变量设置为false,这样他就不能继续沿着与对象碰撞时的方向移动。当玩家沿对角线(两个方向)移动并与他应该能够继续沿一个方向移动的物体发生碰撞时,问题就出现了。例如:

游戏应该能够向上移动,但不能

另一个问题是,当按下相反方向的键时,决定玩家是否可以移动的变量被设置回true(即,当按下left时,能够向右移动被设置为true,因为我们已经朝相反方向移动)。因此,在上一个示例中,如果您不沿对角线移动,而只是向右移动,则在向上移动时按住向右键,直到您不再接触对象,您将无法向右移动,因为没有按下向左键


看起来我把事情复杂化了,除了单独放置所有的墙来阻止玩家朝一个方向移动之外,还有什么办法吗?(即,如果玩家碰到这面墙,停止向右移动) 您没有发布任何代码,因此很难说,但您可能会以错误的方式对碰撞作出反应

如果你与墙发生碰撞,你应该将玩家移动到墙外,而不是禁用移动

基本上你想做的是:

  • 跟踪球员最后一帧的位置
  • 检查播放机是否在此帧与墙碰撞
  • 如果他是,检查他在最后一帧的位置,以了解碰撞发生前他在墙的哪一侧。使用此信息重新定位玩家,使其接触墙的该面

  • 您没有发布任何代码,因此很难说,但您可能会以错误的方式对碰撞作出反应

    如果你与墙发生碰撞,你应该将玩家移动到墙外,而不是禁用移动

    基本上你想做的是:

  • 跟踪球员最后一帧的位置
  • 检查播放机是否在此帧与墙碰撞
  • 如果他是,检查他在最后一帧的位置,以了解碰撞发生前他在墙的哪一侧。使用此信息重新定位玩家,使其接触墙的该面

  • 所以基本上要跟踪玩家的最后位置,如果发生碰撞,把他移回前一个位置?这似乎容易多了,但我仍然有一个问题。当玩家与一个物体相撞,但仍然可以朝一个方向移动时(如前一个示例),由于仍然在进行命中测试,他将继续移动回原来的位置,即使他可以朝另一个方向移动。@MikeHunter您缺少一个细节。不要移动到前一个位置-你应该在撞墙之前使用该信息来确定球员来自哪一侧。有了这些信息,你应该移动玩家,让他从那一边触碰墙壁。这将给它一个球员正对着墙无法进一步移动的真实感觉。至于不能移动,你应该摆脱在发生碰撞时禁止玩家移动的逻辑。一旦你执行了我的步骤,这不是必需的。@MikeHunter如果你移动到上一个位置,你会得到这样的情况:当你移动10个像素并与墙碰撞时,你会返回到离墙10个像素的位置,这会产生奇怪的结果。对,所以我们正在接近。我只是很难决定把他放在哪里(以及具体放在哪里)。我可以通过比较他最后的位置和现在的位置来找出他前进的方向,但不能确定那个方向是否是阻止他前进的方向。你认为有可能提供一些代码吗?谢谢,我很感激。@MikeHunter如果你计算出他是地砖的正左边(低于地砖的顶部,高于底部,位于其中心的左侧),球员的新位置将是这样的(假设球员和地砖的注册点都在中间):
    player.x=tile.x-(tile.width/2)-(player.width/2);player.y=老把戏所以基本上要跟踪玩家的最后一个位置,如果发生碰撞,把他移回前一个位置?这似乎容易多了,但我仍然有一个问题。当玩家与一个物体相撞,但仍然可以朝一个方向移动时(如前一个示例),由于仍然在进行命中测试,他将继续移动回原来的位置,即使他可以朝另一个方向移动。@MikeHunter您缺少一个细节。不要移动到前一个位置-你应该在撞墙之前使用该信息来确定球员来自哪一侧。有了这些信息,你应该移动玩家,让他从那一边触碰墙壁。这将给它一个球员正对着墙无法进一步移动的真实感觉。至于不能移动,你应该摆脱在以下情况下禁用玩家移动的逻辑