2016-12-07 7 views
1

私はアクションスクリプト3で何かを作っています。最初のボタンbtnSkaffPengerを押すと、クリックごとに1ずつ増加します。しかし、私の第2のボタンbtnTrePrinterは、自動的に2秒ごとに1ずつ数字を増やすことになっていますが、一度しか動作せず、リセットされません。ボタンを使って関数内のタイマーを有効にする

btnTrePrinter.addEventListener(MouseEvent.CLICK, trePrinter); 
function trePrinter(evt:MouseEvent):void 
{ 
    var timer:Timer = new Timer(2000); 
    var harVentet:Function = function(event:TimerEvent):void{ 
     timer.removeEventListener(TimerEvent.TIMER, harVentet); 
     timer = null; 

     sumPenger++ 
     txtSumPenger.text = sumPenger.toString(); 
    } 
    timer.addEventListener(TimerEvent.TIMER, harVentet); 
    timer.start(); 

    btnTrePrinter.mouseEnabled = false; 
    btnTrePrinter.alpha=0.4; 
} 

全コード:

おかげ

ボタンのコードを(私はあなたが一度だけボタンを押すことができますので、私はそれが機能リセットを妨げるとは思わない追加しました)

import flash.events.MouseEvent; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

var sumPenger:int = 0; 

btnSkaffPenger.addEventListener(MouseEvent.CLICK, penger1); 
function penger1(evt:MouseEvent):void 
{ 
    sumPenger++ 
    txtSumPenger.text = sumPenger.toString(); 
} 

btnTrePrinter.addEventListener(MouseEvent.CLICK, trePrinter); 
function trePrinter(evt:MouseEvent):void 
{ 
    var timer:Timer = new Timer(2000); 
    var harVentet:Function = function(event:TimerEvent):void{ 
     timer.removeEventListener(TimerEvent.TIMER, harVentet); 
     timer = null; 

     sumPenger++ 
     txtSumPenger.text = sumPenger.toString(); 
    } 
    timer.addEventListener(TimerEvent.TIMER, harVentet); 
    timer.start(); 

    btnTrePrinter.mouseEnabled = false; 
    btnTrePrinter.alpha=0.4; 
} 
+0

このタイマーで2秒ごとに値を変更する場合は、最初の関数呼び出し後にタイマーを強制終了するのはなぜですか?以下のコードを削除してください: 'timer.removeEventListener(TimerEvent.TIMER、harVentet); timer = null; 'となり、タイマーは期待どおりに動作します。 – Nbooo

+1

うわー、今、愚かな感じ。 本当にありがとう、私は真剣に見つけていないでしょう! <3 –

+0

助けてくれてうれしい! – Nbooo

答えて

0

言われたように、回答をコメントに入れるのは悪い習慣なので、もう一度投稿します。

var timer:Timer = new Timer(2000); 
// the timer created with 2 seconds delay and infinite repeats 

var harVentet:Function = function(event:TimerEvent):void { 
    // 2 seconds passed after "timer.start()" call 
    // it's the first invocation of this listener 
    timer.removeEventListener(TimerEvent.TIMER, harVentet); 
    timer = null; 
    // the listener is removed and timer is destroyed 
    // since the listener removed from timer, no more invocations will happen 
    sumPenger++ 
    txtSumPenger.text = sumPenger.toString(); 
} 
timer.addEventListener(TimerEvent.TIMER, harVentet); 
// the listener is added to timer 
timer.start(); 
// the timer starts 

は、このコードを削除します:

はちょうどあなたのコード内で何が起こるかを明確にする

timer.removeEventListener(TimerEvent.TIMER, harVentet); 
timer = null; 

、あなたが期待するようタイマーが動作します。

関連する問題