0

私は、ビジュアルと呼ばれるムービークリップ内にあるドアキーと呼ばれるキー(ドアのような)ムービークリップを持っています。

通常、パッケージ内ではなくタイムライン内の 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);
}

Adobe 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 に答える