代码之家  ›  专栏  ›  技术社区  ›  Pieter888

如何处理一个movieclip的多个实例的冲突检测?

  •  0
  • Pieter888  · 技术社区  · 16 年前

    我使用的是AdobeFlashCS4。 语言是动作脚本3

    在我的库中,我有两个项目:

    • 运动员

    玩家对象已经在移动中正常工作。 现在,当我将多个墙对象放入舞台(墙=32x32像素)时,我想防止玩家在走进墙时移动。

    我尝试给所有的墙赋予相同的实例名称,并检查是否与该对象发生冲突,但当我这样做时,冲突仅适用于其中的一个墙。

    我可以给墙的所有实例一个不同的碰撞脚本,但这是一种耗时的方法,有没有其他方法可以全局定义墙为玩家的实体?

    事先谢谢!

    2 回复  |  直到 16 年前
        1
  •  1
  •   ktdrv    16 年前

    最好的办法是将所有的墙实例放在一个父电影剪辑中,并检查播放器实例是否与之冲突。

    或者,您可以循环遍历所有墙实例并分别进行检查。听起来可能很浪费,但这样您可以为碰撞检测例程添加一些优化。例如,如果播放器在屏幕的右侧,为什么要检查与左侧墙的碰撞。

    或者你可以用数学来检查碰撞,避免flash的内置程序。可能听起来更像是工作,但看到它有多缺陷(受帧速率等限制),我会这样做——当然,如果游戏动态允许的话。

        2
  •  0
  •   Allan    16 年前

    记住,任何movieclip都是movieclip类的一个实例。通过为所有实例赋予相同的名称,您可以有效地执行以下操作:

    var myClip:MovieClip = new MovieClip();
    myClip = new MovieClip();
    
    myClip <-- will always refer to the later movieclip since thats what it is now referenced to.
    

    为了解决您的问题,您很可能会创建一个包含集合(很可能是一个数组)的类。您将在这个数组中添加对每个movieclip的引用(只需按movieclip)。然后,您将拥有一个函数,该函数在每一帧或每次角色移动时调用,该函数将循环通过该数组检查墙是否击中播放机,如果确实返回true,则表明发生了这种情况;如果没有,则返回false。