2011-07-28 9 views
2

Flash CS5 Professionalの使用シンボルを作成してステージにドラッグし、インスタンス名をGreenLight1にしました。これをドキュメントクラスから見えるようにするには、単にGreenLight1.visible = trueを実行します。私がファイルをテストするとうまくいくのです。私がドキュメントクラスに留まっている限り、私は行かなくてはなりませんが、今は別のクラスに移動して、この単純なオブジェクトにアクセスできるようにFlashを取得しようとするとあらゆる種類の問題に遭遇しようとしています。私が探しているのは、この新しいクラスで特定の条件が発生したときに、このGreenLight1が非表示(visible = false)になり、FlashがGreenLight1に全くアクセスできないようにすることだけです。私がこれまで試したFlash CS5は、ドキュメントクラス以外のクラスの表示オブジェクトを参照します

もの:

  1. ステージがクラスに渡され、_stageで参照されていると私は_stage.addchildまたはそのような何かを行うときにうまく働いています。だから、私は "_stage.GreenLight1.visible = false;" "ReferenceError:Error#1069:プロパティGreenLight1がflash.display.Stageに見つかりませんでした。デフォルト値はありません。"

  2. 私のドキュメントクラスはスプライトを拡張しているので、私はルート関数を試してみたと思います。だから私は "Sprite(root).GreenLight1.visible = false;"私は "1119:静的型flash.display:Spriteを持つ参照を介して未定義のプロパティGreenLight1にアクセスする可能性があります。"

  3. 最後に、回答のアドバイスでthis threadに記載されているように、リソースクラスを作成しようとしました。 GreenLight1が何を開始するのか分からないので、私は「1120:未定義のプロパティGreenLight1にアクセスしました」ということを私が始めたのと同じ問題に遭遇しました。ここでResource.asのための私のコードは、(私は、ドキュメントクラスから、このクラスに何かを渡すことになってんだ?)されています

`

package { 

import flash.events.Event; 
import flash.display.Sprite; 
import flash.display.DisplayObject; 

public class Resource extends Sprite { 
    public static var GL1:GreenLight; 

    public function Resource() { 
     addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true); 
    } 

    private function init(e:Event):void{ 
     Resource.GL1 = GreenLight1; 
    } 
} 

}

タイプ "グリーンライト" GreenLight1のソースシンボルからのものです。私は、 "Export for ActionScript"をチェックしており、ベースクラスはGreenLightです。だからそれはどこから来るのですか。私は "新しいGreenLight"をどこかのように作るはずですか?私は "Resource.GL1.visible = false;"を使用してアクセスしようとしているクラスですが、上記の#3にリストされているコンパイルエラーが発生するので、実際には心配することはありません。

いずれにしても、私は次に何を試すべきかについて迷っています。ですから、どのように私はGreenLight1を認識するためにドキュメントクラスではないクラスを取得するのですか?

答えて

2

オブジェクトのstageプロパティが(ディスプレイ上にあると仮定して)Stageオブジェクトであるため動作しません。既定では、ドキュメントクラスは、setChildIndex(0)またはaddChildAt(someObject,0)を使用して何かを挿入していない限り、ステージの最初の子になります。だから、あなたはスプライトとして、あなたのルートをキャストしているため、動作しません

this.stage.getChildAt(0).GreenLight1; 

とドキュメントクラスを経由してアクセスすることができるはずです。それはスプライトの子孫であるドキュメントクラスだ、スプライトではありませんので、この作業をする必要があります:私は数3をスキップし、より直接的な解決策を提供しようとするつもりだ

this.root.GreenLight1 

。あなたのライブラリにこのシンボルがあり、それを 'Export for actionscript'に設定し、それにクラス名をGreenLightとしました。よいスタート。あなたのグリーンライトのシンボルの新しいインスタンスへの参照(myGreenLight)を作成しました

var myGreenLight:GreenLight = new GreenLight(); 

:だから今どこでも、あなたのコードでは、このような何かを行うことができます。あなたは今、あなたがコーディングしているクラスは、ステージ上で自分自身であると仮定すると

addChild(myGreenLight); 

を使用して呼び出し元のクラスの表示ツリーにこれを添付することができ、その後、グリーンライトのインスタンスが表示されるはずです。また、ステージ上にあるオブジェクトからthis.stage.addChild(myGreenLight);に電話して、GreenLightインスタンスをステージに直接接続することもできます。

だから今、本当の質問に。 GreenLight1というステージにGreenLightというインスタンスがあります。 (慣例では、クラス名は大文字で始まり、変数名とインスタンス名は小文字で始まることに注意してください)。ディスプレイツリーにもある別のクラスがあり、ステージ上にあるGreenLight1への参照を取得する必要があります。

function getMovieClip($instanceName:String,$scope:DisplayObjectContainer):DisplayObject 
{ 
    var child:DisplayObject; 
    var loopLength:int = $scope.numChildren; 
    for(var i:int = 0; i < loopLength; i++) { 
     child = $scope.getChildAt(i); 
     if(child.name == $instanceName) return child; 
    } 
    //didn't find it 
    return null; 
} 

、あなたはこのように、ステージにアクセスできる任意のオブジェクトからそれを使用します:ここでそれを行うための機能がありますオプション3について

var greenLightRef:GreenLight = getMovieClip('GreenLight1',this.stage) as GreenLight; 
+0

私にあなたに聞かせてください...指定されたドキュメントクラスがないと1と2が動作しないと言っていますか?私の.flaでは、ドキュメントクラスを指定していますが、それはあなたが参照しているものではありませんか? 1または2の仕事をするためには何をする必要がありますか? GreenLight1は既にディスプレイの積み重ね順序の一部ですが、そこに直接アクセスする方法はありますか? – FlashNoob468

+0

申し訳ありませんが、頭の中を飛び越えて、より良い答えを教えてください。 – shanethehat

+0

1&2に関する答えを修正しました。 – shanethehat

0

、リソースクラスドキュメントクラスです(そうSpriteをMovieClipに変更します)。ステージ上に配置されたインスタンスにアクセスできるようになります。引き続きエラーが発生した場合は、実際にインスタンス名を付けたか、タイムライン上に複数のキーフレームがなく、最初のフレームにインスタンスがないことを再確認してください。

関連する問題