我正在使用Adobe Flash CS4。 语言是Action Script 3
在我的图书馆中,我有2个项目:
玩家对象已经正常运行并移动他。 现在,当我将多个墙面物体放入舞台(墙壁= 32x32像素)时,我想阻止玩家走进墙壁时移动。
我尝试给所有墙都提供相同的实例名称,只检查与该对象的碰撞,但是当我这样做时,碰撞只适用于其中一个墙。
我可以给所有墙的实例提供不同的碰撞脚本,但这是耗费时间的方式,还有另一种方法可以将墙全局定义为玩家的固体吗?
提前致谢!
答案 0 :(得分:1)
最好的办法是将所有墙面实例放在一个父级影片剪辑中,并检查播放器实例是否与其发生冲突。
或者您可以遍历所有墙实例并单独检查。可能听起来很浪费你,但这样你就可以为你的碰撞检测程序添加一些优化。例如,如果玩家位于屏幕的右侧,为什么要检查与左墙的碰撞。
或者您可以使用数学检查碰撞并避免Flash的内置例程。可能听起来更像是工作,但看到它有多么有缺陷(受帧率等限制),我会这样做 - 如果游戏动态允许的话,当然。
答案 1 :(得分:0)
请记住,任何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.
要解决您的问题,您很可能会创建一个包含集合的类(很可能是一个数组)。您将向每个Array添加对每个MovieClip的引用(只需按下MovieClip)。然后你会有一个函数被调用每一帧或每次角色移动时循环通过这个数组检查墙是否击中了玩家,如果它确实返回true表示已经发生或假如果它没有。< / p>