as3 - 触摸物体时如何停止移动?

时间:2015-11-02 12:41:04

标签: actionscript-3

如何让玩家在与物体碰撞时停止,但当它接触物体的x侧时,它仍然可以上下滑动,当它接触物体的y侧时,它仍然可以滑动碰撞时并排。

这是我的玩家移动代码。

public function onKeyDown(event: KeyboardEvent): void
    {
        if (event.keyCode == Keyboard.D)
        {
            isRight = true;
        }
        if (event.keyCode == Keyboard.A)
        {
            isLeft = true;
        }
        if (event.keyCode == Keyboard.W)
        {
            isUp = true;
        }
        if (event.keyCode == Keyboard.S)
        {
            isDown = true;
        }
    }

public function onEnterFrame(event: Event): void
    {
        if (isRight)
        {
            x += 5;
        }
        if (isLeft)
        {
            x -= 5;
        }
        if (isUp)
        {
            y -= 5;
        }
        if (isDown)
        {
            y += 5;
        }
    }

1 个答案:

答案 0 :(得分:0)

在每个移动刻度上(在您的情况下为OnEnterFrame),您应该执行以下基本步骤:

  1. 将玩家的x和y保存为变量
  2. 计算新职位
  3. 检查玩家是否在新位置重叠任何物体或等级边界。这可以通过多种方式完成;如果不了解你的等级结构,玩家形状,障碍物形状,你如何存储有关它们的信息,就不可能详细说明。
  4. 对于每个重叠对象,计算多少玩家与对象重叠并通过将玩家移回其轨道来解决碰撞,以便他不会发生碰撞。你有前一个和下一个坐标,所以,你有一个向量来移动玩家。
  5. 这些步骤的难度很大程度上取决于所讨论物体的形状,碰撞物体的最大相对速度,碰撞求解所需的准确度。如果你正在处理像矩形和圆形这样的基元,它们可以相对容易实现,尽管仍然会遇到像几个对象碰撞这样的困难情况。以下是您可能需要查看的一些基本工具:

    检测和解决碰撞是游戏开发中最常见的问题之一,因此您可以轻松地在网上找到关于该主题的大量材料。例如: