【问题标题】:how to change boolean values with timerEvent in as3如何在 as3 中使用 timerEvent 更改布尔值
【发布时间】:2014-04-08 12:31:08
【问题描述】:

我编写了这个小代码来将布尔值从 0 更改为 1,反之亦然 但它不起作用。

结果是它总是保持为 0。我一定犯了一些愚蠢的错误。请帮忙。谢谢

  var booleanL:Number = 0;
            var myTimerL:Timer = new Timer(1000,60);
            myTimerL.addEventListener(TimerEvent.TIMER, timerListenerL);
                function timerListenerL (e:TimerEvent):void{
                    if(booleanL == 0) {
                        booleanL = 1;
                    } else if(booleanL == 1) {
                        booleanL = 0;
                    }
                }
            myTimerL.start();
            trace(booleanL);

【问题讨论】:

  • 尝试将您的跟踪放在“timerListenerL”方法中
  • 为什么不使用布尔类型?并在你的 timerListenerL 函数中执行 booleanL = !booleanL
  • 嗨@Binou 感谢您的回复,这似乎有效,而不是 0 或 1,我得到的是真或假,这也很好……而不是每 1 秒执行一次真或假它以每秒 30 次的速度执行它(我认为是在我的帧率附近),这是不应该发生的:S

标签: actionscript-3 flash actionscript-2 flash-cs5 flash-cs4


【解决方案1】:

编辑: 您可以尝试使用计算机时钟时间来制作秒表。每当时钟的end_time timestart_time 高[延迟] 秒时,布尔值就会更新。延迟由这一行设置:delay = start_time.seconds + 2; 这里在更新前给出 +2 秒延迟作为限制

这样试试吧……

    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.utils.getTimer;
    import flash.events.TimerEvent;
    import flash.events.Event; //added this for enter frame events

    public class timer extends MovieClip 
    {
        public var booleanL:int = 0;

        public var start_time:Date = new Date;
        public var end_time:Date =  new Date;
        public var delay:int;

        public function timer() 
        {
               //var myTimerL:Timer = new Timer(1000, 5);
               //myTimerL.addEventListener(TimerEvent.TIMER, timerListenerL);
               //myTimerL.start();

               timer_Reset();
        }

        function timerListenerL ():void //(event:TimerEvent):void
        {
              trace("Am updating Boolean...");
              if( 1 == booleanL) 
              { booleanL = 0; trace(booleanL); } 
              else if (0 == booleanL) 
              { booleanL = 1; trace(booleanL);}
        }

        //USE REAL TIME CLOCK VERSION

        public function timer_Reset():void 
        {
                start_time = new Date; //reset time to now..
                delay = start_time.seconds + 2; //two seconds test delay
                stage.addEventListener(Event.ENTER_FRAME, _update);
        }

        function _update (e:Event):void
        {
                //set end_time to now-time every frame, 
                //then check if end seconds are [+ delay] higher than start_time.seconds

                end_time = new Date(); //set to Now time

                if (end_time.seconds ==  delay)
                {
                  trace(end_time.hours + ":" + end_time.minutes + ":" + end_time.seconds);
                  stage.removeEventListener(Event.ENTER_FRAME, _update);
                  timerListenerL (); //we update boolean  via this function
                  timer_Reset(); //we reset for next check via this function
                }
        }

}

【讨论】:

  • 嗨,感谢您的回复,但问题仍然与我上面提到的相同。该死的事情在 0 和 1 之间变化非常快,而不是每 1 秒或我输入的任何时间发生一次。跨度>
  • 你修好了吗?如果不是,我只能认为这是由代码中某处的 enterFrame 函数引起的。无论如何,我已经更新了第二个解决方案:如果 X 秒已经过去,则检查设备时钟时间,然后更新布尔值。
猜你喜欢
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多