2011-02-23 9 views
0

私はボーナスポイントなどを示す結果画面を持っています。私は各テキストフィールドを次々に増やしたいと思っていますし、それぞれのフレームごとにある量だけ増分してもらいたいのです。複数の動的テキストスコア表示。各テキストを次々に変更し、特定の数字でスコアを増やす

結果画面がポップアップします。

まず、それは我々がプレイヤーのスコアが100によってプレーヤーの表示スコアを上げる100 により、プレーヤーの表示スコアよりも大きい場合

を表示するスコア以上で、プレーヤーのスコアをチェックし プレーヤーのスコアであります

プレイヤーのスコアが1

によってプレイヤー表示スコアを上げる10

によってプレイヤー表示スコアを上げる10 により、プレーヤーの表示スコアよりも大きい場合10

終了したら次のスコアに移動します。

私は、あるスコアから次のスコアに移動するためにタイマーを使用することを考えましたが、Event.ENTER_FRAMEには入っていないと考えていました。また、スコアをインクリメントするためのifステートメントはばかげていると私はそれを行うより良い方法があると考えています。私はそれを別の機能にすることを考えていましたが、何を返すべきか、それを返す方法を知らないので、ただちに総数を表示するのではなく、増加するように見えます。

ご不明な点がございましたら、コメントをお寄せください。私はもう少しそれを拡張しようとします。

答えて

0

TextFieldを継承する新しいScoreTextクラスを作成し、それを各スコアテキストフィールドに使用できます。そのクラスでは、スコア番号を取得し、ディスプレイ番号のインクリメントを処理するsetTargetScoreメソッドを作成できます。その後、終了したらイベントを送出することができます。その後イベントを聞くことができ、必要に応じて各ScoreTextでsetTargetScoreメソッドを呼び出すことができます。

もう1つの方法は、TweenLiteを使用してスコア番号をトゥイーンし、イベントを使用してスコアテキストフィールドを更新し、完了したときに次のスコアフィールドに移動することです。ここで

EDIT *

はスコア変数をトゥイーンするTweenliteを使用した例である:ここで How to Tween A Variable with Flash and TweenLite

EDIT2 *

は私の第一の方法の例です。

まず、ScoreTextクラスを以下に示します。

package { 
    import flash.events.Event; 
    import flash.text.TextField; 

    public class ScoreText extends TextField { 
     public static const EVENT_SCORE_COMPLETE:String = 'scoreCompleteEvent'; 

     private var targetScore:Number = 0; 
     private var currentScore:Number = 0; 
     private const speed:Number = 0.11; 

     public function ScoreText(initialScore:Number = 0) { 
      currentScore = initialScore; 
      updateScore(); 
     } 

     public function setTargetScore(targetScore:Number):void { 
      this.targetScore = targetScore; 
      addEventListener(Event.ENTER_FRAME, enterFrameHandler); 
     } 

     private function enterFrameHandler(e:Event):void { 
      currentScore += (targetScore - currentScore) * speed; 

      if (currentScore >= targetScore -1) { 
       removeEventListener(Event.ENTER_FRAME, enterFrameHandler); 
       dispatchEvent(new Event(EVENT_SCORE_COMPLETE)); 
      } 

      updateScore(); 
     } 

     private function updateScore():void { 
      this.text = Math.round(currentScore).toString(); 
     } 
    } 
} 

そして、ここでの主なクラスです:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.text.TextField; 

    public class Main extends Sprite 
    { 
     private var st1:ScoreText; 
     private var st2:ScoreText; 
     private var st3:ScoreText; 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      st1 = new ScoreText(0); 
      st1.y = 10; 
      st1.addEventListener(ScoreText.EVENT_SCORE_COMPLETE, score1Complete); 
      addChild(st1); 

      st2 = new ScoreText(0); 
      st2.y = 60; 
      st2.addEventListener(ScoreText.EVENT_SCORE_COMPLETE, score2Complete); 
      addChild(st2); 

      st3 = new ScoreText(0); 
      st3.y = 110; 
      st3.addEventListener(ScoreText.EVENT_SCORE_COMPLETE, score3Complete); 
      addChild(st3); 

      st1.setTargetScore(1234); 
     } 

     private function score1Complete(e:Event):void 
     { 
      trace('score 1 finishes, start the next one!'); 
      st2.setTargetScore(234553); 
     } 

     private function score2Complete(e:Event):void 
     { 
      trace('score 2 finishes, start the next one!'); 
      st3.setTargetScore(745); 
     } 

     private function score3Complete(e:Event):void 
     { 
      trace('score 3 finishes, start the next one!'); 
     } 
    } 
} 
+0

はあなたの最初の提案により手の込んだてもらえますか?それはあまりにも多くのトラブルではない場合の例と一緒に。 – RamenNoodles

+0

WOWありがとう!できるだけ早く試してみるよ。私はそれを見て、私は既にムービークリップに配置されているようにテキストフィールドを作成します。あなたは一番いいと思いますか? – RamenNoodles

+0

あなたのテキストフィールドが既にステージ上にある場合は、少し異なります。ムービークリップでクリップをラップし、そのクリップクラスをScoreTextに設定する必要があるかもしれません。次に、TextFieldを拡張するのではなく、ネストされたテキストフィールドにアクセスするためにScoreTextクラスをリファクタリングする必要があります。 –

関連する問題