2011-12-23 8 views
0

私はmcLeaderboarditemという名前の私のライブラリにムービークリップを持っています。テキストフィールドを管理するためのクラスを生成しました。movieclipクラス内からムービークリップのテキストフィールドを変更するにはどうすればよいですか?

最も簡単な方法は、クラスの子を作成し、このようなドットシンタックス(documentclass)と内容のプロパティを管理することです:

var leaderItem:mcLeaderboardItem = new mcLeaderboardItem(); 
leaderItem.lblRank.text = "2nd"; 
addChild(leaderItem); 

これは私のためにそれが簡単になるだろうが、私はしたいですクラス内のデータを管理して、それに付加テキストを追加することができます(接頭辞/接尾辞/操作)。 私はいくつかのプライベートプロパティを作成しました:ランク、displaynameとスコアを変更し、mcLeaderboardItemのゲッターとセッターでdocumentClassを変更しました。 クラス内のlblRank.textを変更してそれをトレースすると、lblRankt.textが変更されたことがわかりますが、コンパイラがクラスを抜けてからmovieclipのラベルのデフォルト値が再び使用されます。 上記のコードブロックでソリューションを選択しない限りクラスmcLeaderboardItemの コード:

package com.cleversprite.memorygame.ui 
{ 

import flash.display.MovieClip; 

public class mcLeaderboardItem extends MovieClip 
{ 

    //VARIABLES 
    //------------------------------------------------ 
    private var _rank:int; 
    private var _displayname:String; 
    private var _score:int; 


    //PROPERTIES 
    //------------------------------------------------ 
    public function get rank():int 
    { 
     return _rank; 
    } 

    public function set rank(v:int):void 
    { 
     _rank = v; 
    } 

    public function get displayname():String 
    { 
     return _displayname; 
    } 

    public function set displayname(v:String):void 
    { 
     _displayname = v; 
    } 

    public function get score():int 
    { 
     return _score; 
    } 

    public function set score(v:int):void 
    { 
     _score = v; 
    } 


    //CONSTRUCTOR 
    //------------------------------------------------ 
    public function mcLeaderboardItem() 
    { 
     super(); 
     init(); 
    } 

    public function init():void 
    { 

     lblRank.text = String(_rank); 
     lblDisplayname.text= _displayname; 
     lblScore.text= String(_score); 

    } 
} 

誰かが私が間違っているのか見ていますか? おそらく、それは疲れのために何かばかげたものになるでしょう。 または、私がやろうとしていることをするための他の方法はありますか?

Thanx事前に。

+0

ドキュメントクラスはどのように見えますか?あなたはコードが一度だけ実行されるように 'stop();'を持っていますか?通常は値を変更すると、古いものに切り替えるべきではありません。 – pkyeck

+1

私はその質問について確信していません。 'rank'、' displayname'と 'score'プロパティを設定したときにテキストフィールドを更新しますか? –

+0

@atonparkerはい、確かに、それは私がしたいことです。私は最初のコードブロック(上記)のようなコードを記述しない限り何らかの理由で彼は常にデフォルト値に設定します。 – Gigi2m02

答えて

0

、それだけでinit以内に一度、テキストを設定するには十分ではありません。各セッターにテキストを設定する必要があります。このようなクラスの書き直しはうまくいくはずです:

public class mcLeaderboardItem extends MovieClip 
{ 
    public function mcLeaderboardItem() 
    { 
     // These will set the initial text of the text fields now. 
     rank = 0; 
     displayname = "Default"; 
     score = 0; 
    } 

    public function get rank():int 
    { 
     return (lblRank.text as int); 
    } 

    public function set rank(v:int):void 
    { 
     lblRank.text = v; 
    } 

    public function get displayname():String 
    { 
     return lblDisplayname.text; 
    } 

    public function set displayname(v:String):void 
    { 
     lblDisplayname.text = v; 
    } 

    public function get score():int 
    { 
     return (lblScore.text as int); 
    } 

    public function set score(v:int):void 
    { 
     lblScore.text = v; 
    } 
} 
+0

THxは助けを求めています。 私は、DocumentClassでプロパティを設定した後、init関数を実行して解決策を見つけました。 おそらく、あなたの解決策はより優れています。 私は後でそれを試してみます。 – Gigi2m02

+0

Cadinと私の解決策の機能的な違いは、あなたがリーダーボードに変更を加えた後に 'init'関数を呼び出さなければならないことです(多分' update'と呼ぶべきでしょう)。あなたが気持ちの良いものを使用してください! –

+0

Init()は私のコンストラクタで常に呼び出す基本メソッドです。 別の関数updateData()が私にはうれしく見える;-) 彼は私に彼が何をしたいかを知るために私の講師に電子メールを送るかもしれません(彼は私の点を与えて彼の意見は法則です;-)) – Gigi2m02

0

クラスコンストラクタからinitを呼び出しています。つまり、データ変数が設定される前に、すべてのテキストフィールドを実行して設定します(親クラスからセッターを呼び出すことによって)。つまり、これらのテキストフィールドのテキストをすべてnullに設定するだけです。

ので、
あなたはその項目のセッター内の適切なテキストフィールドのテキストを設定するか、またはちょうどあなたがmcLeaderboardItemにデータを設定した後に、親クラスからのinitを呼び出すことができますどちらか。このような

何か:あなたはセッターがテキストフィールドに彼らが呼ばている各時間を変更したい場合は

var leaderBoard:mcLeaderboardItem = new mcLeaderboardItem(); 
leaderBoard.rank = someRank; 
leaderBoard.displayname = someName; 
leaderBoard.init(); 
addChild(leaderBoard); 
+0

こんにちは、答えはthxです。しかし、私はあなたのように他の人が私に同じことを話した後に、これを見つけました。 乾杯 – Gigi2m02

+0

答えが正しい場合は、それでも受け入れる必要があります。または、あなた自身の答えを掲示し、それを受け入れる。将来他人に役立つかもしれません。 – Cadin

+0

よろしいですか。私は両方を正確に切り替えます。 – Gigi2m02

関連する問題