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!');
}
}
}
はあなたの最初の提案により手の込んだてもらえますか?それはあまりにも多くのトラブルではない場合の例と一緒に。 – RamenNoodles
WOWありがとう!できるだけ早く試してみるよ。私はそれを見て、私は既にムービークリップに配置されているようにテキストフィールドを作成します。あなたは一番いいと思いますか? – RamenNoodles
あなたのテキストフィールドが既にステージ上にある場合は、少し異なります。ムービークリップでクリップをラップし、そのクリップクラスをScoreTextに設定する必要があるかもしれません。次に、TextFieldを拡張するのではなく、ネストされたテキストフィールドにアクセスするためにScoreTextクラスをリファクタリングする必要があります。 –