2011-01-21 8 views
1

これが単純な/愚かな質問であれば、うまくいけば私を失礼にします。私は約6日前にアクションスクリプトを学び始めていましたが、すでに小さなプロジェクトで作業していました。DAS3データが変更されたときのイベントリスナー?

とにかく、ゲームのレベルの名前(object._I._M.text)を反映するために、 。すべてのプレイヤーがどれくらい早くそのレベルを終えることができるかに応じて、変更には1分かかり、最大2分かかることがあります。

このプロパティの変更をリッスンして、別の機能を呼び出せるようにしたいと考えています。私はこのオンラインにはほとんど答えが見つかりませんでした。私が見つけた例は非常に不完全であり、あまり書かれていませんでした。誰も私がこれをどうやってできるか知っていますか?

私は...

theobject._I._M.addEventListener(Event.CHANGE、MyFunctionを)を試してみました。

成功しません。どんな助けや助言もありがとう、私は応答を待っている間、私は学習に戻るつもりです:D

+0

'object._I._M'は' TextField' /組み込み型ですか、それともユーザー定義型ですか? –

+0

申し訳ありませんが、それはテキストフィールドです。 – WeaponsTheyFear

答えて

1

私は、Adobeのドキュメントは見て少し重いことに同意します。良いリソースはkirupaフォーラムです。

TextField変更イベントリスナーの場合、元のコードは非常に近いです。 Hereは、イベントリスナーの追加方法の良い例です。基本は次のとおりです:

public class Main extends Sprite { 
    // Store a reference to the text field 
    // (you're already doing this somewhere, so adapt as you see fit) 
    private var inputfield:TextField = new TextField(); 

    public function Main() { 
    // Make sure the field is added to an on-screen Sprite 
    addChild(inputfield); 

    // Add the event listener. 
    // I recommend adding the 'false, 0, true' params. There are lengthy 
    // discussions around about this. 
    inputfield.addEventListener(Event.CHANGE, changeListener, false, 0, true); 
    } 

    // This function gets called every time the event is fired. 
    private function changeListener (e:Event):void { 
    trace("event"); 
    } 
} 

うまくいけば、あなたは正しい方向に始めることができます。

+3

実際には、CHANGEイベントはユーザー入力によって入力テキストフィールドでのみトリガされるため、テキストフィールドのテキストをコード(tf.text = ...)で変更すると、トリガされません。 – Cay

+0

@Cay、優秀な点。申し訳ありませんが、私はそれを見落としました。 –

+0

@Cayはい、それはまさにゲームがやっていることです(なぜそれが動作していないのだろうと思っていました)。もう1つの問題は、ゲームを直接変更するのではなく、変更されたクライアントを作成するためにフックすることです。[オプションはかなり限られています。 – WeaponsTheyFear

3

おそらくゲッター/セッターを使用するか、毎回イベントをディスパッチできるようにそのテキストフィールドのテキストを変更するメソッドを宣言するだけです。

function changeLevel(text:String):void { 
    levelTf.text=text; 
    dispatchEvent(new Event("levelChange")); 
} 
関連する問題