0

我有一个名为 doorKey 的键(如门)movieclip,它位于一个名为visuals 的movieclip 中。

通常,当您在时间线内而不是在包内的 AS3 上放置一些东西时,您可以执行以下操作:

if (player.hitTestObject (visuals.doorKey))

如何在包中执行此操作?

研究: 作为儿童添加到舞台后的参考影片剪辑

package 
{
import flash.display.MovieClip;
import flash.events.*;


public class Test extends MovieClip
{
public var keyCollected:Boolean = false;
public var doorKey:Visuals = new Visuals();
public var visuals:Visuals; 

public function Test()
    {

        visuals.x = 25;
        visuals.y = 475;
        addChild(visuals)


        function loop(e:Event):void
        {
if (keyCollected == false)
        {
            //trace("player "+player);

            if (player.hitTestObject (doorKey))
            {
                doorKey.visible = false;
                keyCollected = true;
                trace("key collected");
            }
        }
4

2 回答 2

1

如果您使用 Flash Professional 和 Test 是您的 FLA 的文档类,并且您有一个名为 visuals 的 Visuals 实例和一个名为 player 的实例,并且它们都在舞台上,那么此代码应该适合您

package
{
import flash.display.Sprite;
import flash.events.Event;

public class Test extends Sprite      //Document class
{
    public var visuals:Visuals;   //instance exists in FLA, doorKey is an instance on visuals
    public var player:Sprite      //instance exists in FLA

    public var keyCollected:Boolean = false;

    public function Test()  //Called when Test is created (when your swf loads since its the document class)
    {
        //To have a function loop every frame render
        this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
    }

    private function enterFrameHandler(event:Event):void{
        if(player.hitTestObject(visuals.doorKey)){
            visuals.doorKey.visible = false;
            keyCollected = true;
            trace("key collected");
        }
    }
}
}

如果这些在舞台上不存在,那么您将需要实例化并将它们添加到您的构造函数中:

public function Test()
{
    visuals = new Visuals();
    player = new Sprite();
    addChild(visuals);
    addChild(player);
    //To have a function loop every frame render
    this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

在 Adob​​e Flash 中使用 FLA 时,它会自动创建实例,将它们添加到文档对象显示列表 (addChild),并根据它们在编辑器中的名称设置文档类的变量。您在上面显示的时间线代码利用了相同的功能。在该示例中,舞台上已经有一个播放器实例,并且参考播放器已设置为它。视觉效果相同(其中包含 doorKey 的属性)。如果这些实例以相同的名称存在,则此行仍应适用:

if (player.hitTestObject (visuals.doorKey))
于 2013-01-18T21:04:38.510 回答
0

如果将 Test 类设为 fla 文件的文档类,则 player.hitTestObject (doorKey) 将起作用。但是在您的代码中,您有一个以事件为参数的“循环”方法,因此您必须拥有其他任何会触发事件的东西

于 2013-01-18T16:45:59.407 回答