2011-09-02 8 views
5

Flashでボタンを作成しましたが、その中にTextFieldとMovieClipがあり、両方ともインスタンス名が設定されています。ボタンの4つのフレームすべてをカバーし、キーフレームはありません。Button内のインスタンス名に問題があります

私は私が設定したいインスタンス名を使用してオブジェクトにアクセスすることができませんでしたので、私は何が起こっているのか確認するために、コードのこの部分を使用:

var obj:DisplayObject = this.m_graphics.btnChange.upState; 
for (var i:int = 0; i < obj.numChildren; i++) 
{ 
    trace("We have an object at " + i + " - " + obj.getChildAt(i) + ": " + obj.getChildAt(i).name); 
    var t:TextField = obj.getChildAt(i) as TextField; 
    if (t == null) 
     continue; 

    trace(" The textfield has text '" + t.text + "'); 
} 

私は出力としてこれを取得する:

We have an object at 0 - [object Shape]: instance195 
We have an object at 1 - [object TextField]: instance199 
    The textfield has text 'Change' 
We have an object at 2 - [object MovieClip]: instance203 

TextFieldとMovieClipがあるので、インスタンス名が汎用のインスタンス###にリセットされました。

誰でも問題が分かっていますか?ボタンをMovieClipにすると、それはうまく動作します(ただし、フレームを自分でコントロールする必要があります)。

私はこの問題を回避するために使用できるさまざまな方法を認識してんだけど、それは多くのことを変更することを意味し、私はのSimpleButtonのフラッシュ

を設定し、インスタンス名を無視する理由を知りたいのですがEDIT

は少しさらにそれを見ると、私とTextFieldを与える例えばupStateを通じてトレース(フラッシュIDEで、ボタンには、キーフレームはありませんにもかかわらず、フラッシュは各項目の4つのインスタンスを作成しているようですインスタンス名「instance2」、downStateのインスタンス名は「instance4」)。ある州のテキストを変更すると、他の州のテキストは反映されません。私はFlashがオブジェクトを作成するときに、それが適切にすべてのプロパティの上にコピーしていないことを考えてい

(つまりインスタンス名)

EDIT

私はシェーンの答えは、回避策であることに同意 - I私は、問題を回避するためのさまざまな方法を知っていると言っていますが、問題を無視して解決しません(私がそれを受け入れなかった唯一の理由です)。私は最初に誰かがおそらく最初に何が起こっているのかを知っているかどうかを知るために来たのです(tbh、SDKのバグのようです)。

「私はSimpleButtonで子供にアクセスすべきではありません;もっとコントロールしたい場合はSpriteやMovieClipを使ってください」という議論の裏付けを理解していますが、私は同意しません。 Flash IDEでは、名前付きインスタンスを含むボタンを作成することができ、SimpleButtonドキュメントはさまざまな状態へのアクセスを提供するため、私にとってはこれが受け入れられる動作です。 SimpleButtonが非常に基本的で変更不可能な静的ボタン(ローカリゼーションも同様です)にしか使用できない場合は、かなり無駄です。スプライトとムービークリップを使用できますが、異なる状態を自分で制御する必要があります。これは面倒です。私はボイラープレートを扱うために私自身のButtonクラスを持っていますが、基本的なSDKの機能を書き換える必要はありません。なぜなら、私にとってはバグです。

私はそれがある時間のために賞金を開いたままにします。もし私が他に何も得なければ、私はそれをシェーンに与えます。

+1

これは絶対に正しいですが、ボタン内のオブジェクトにアクセスすることはできません。 – hardik

+0

@HardikあなたはButton内のオブジェクトにアクセスできます。私は上記のコードでそれを行います。もし私が* Iではない*の場合、それは違うストーリーです – divillysausages

+0

あなたはボタンの中にボタンでアニメーション効果を加えたい場合、ボタンの中にMovieClipを作成してみてください。上から上にMovieClipを別にしてください。 – hardik

答えて

5

flash.display.SimpleButtonクラスはDisplayObjectContainerから継承していないので、これは、状態のコンテナもDisplayObjectContainersではありません。http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

は基本的には、簡単なボタンは、その定義の簡単なことです。内部オブジェクトをより複雑に制御したい場合は、buttonModeをtrueに設定してSpriteまたはMovieClipを使用する必要があります。

+1

SimpleButtons '自身は' DisplayObjects'や 'DisplayObjectContainers'ではありませんが、その上、上、下、ヒットの状態があり、最初にそれらのオブジェクトを検索する方法です。 – divillysausages

+2

SimpleButton _is_ a表示オブジェクト。継承はSimpleButton - > InteractiveObject - > DisplayObject - > EventDispatcher - > Objectです。 – shanethehat

+0

申し訳ありませんが、私が明確にすることは、SimpleButton状態(upState、downStateなど)内のオブジェクトを検索していたことです。それらは存在し、インスタンス名が設定されていません – divillysausages

関連する問題