Обратный отсчет в ActionScript 3 - PullRequest
0 голосов
/ 10 мая 2011

Как мне создать обратный отсчет для расписания автобусов в ActionScript 3, я искал в Интернете, но в основном отображаются обратные отсчеты для праздников или определенной даты. Мне нужно, чтобы это повторялось, автобус ходит каждые 30 минут.

Ответы [ 2 ]

1 голос
/ 11 мая 2011

Я сделал небольшое флеш-приложение, чтобы дать вам представление о том, как вы можете приблизиться к расписанию автобусов с обратным отсчетом:

schedule.xml:

<?xml version="1.0" encoding="utf-8" ?>
<schedule>
    <bus>
        <name>1</name>
        <times>
            <time>1300</time>
            <time>1400</time>
            <time>1500</time>
            <time>1600</time>
            <time>1700</time>
        </times>
    </bus>
    <bus>
        <name>2</name>
        <times>
            <time>1300</time>
            <time>1400</time>
            <time>1500</time>
            <time>1600</time>
            <time>1700</time>
        </times>
    </bus>
</schedule>

Main.as (класс документа):

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.utils.Timer;

    [SWF(width="200", height="350", backgroundColor="0xFFFFFF", frameRate="32")]
    public class Main extends Sprite 
    {
        private var _scheduleUi:ScheduleUI;

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

        }// end function

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

            var urlLoader:URLLoader = new URLLoader(new URLRequest("xml/schedule.xml"));
            urlLoader.addEventListener(Event.COMPLETE, onUrlLoaderComplete);

        }// end function

        private function onUrlLoaderComplete(e:Event):void
        {
            _scheduleUi = new ScheduleUI(XML(URLLoader(e.target).data));
            addChild(_scheduleUi);

        }// end function

    }// end class

}// end package

import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

internal class ScheduleUI extends Sprite
{
    private var _schedule:Schedule;
    private var _scheduleTextField:TextField;

    public function ScheduleUI(scheduleXml:XML)
    {
        _schedule = new Schedule(scheduleXml);
        _scheduleTextField = new TextField();
        _scheduleTextField.autoSize = TextFieldAutoSize.LEFT;
        _scheduleTextField.multiline = true;
        addChild(_scheduleTextField);
        addEventListener(Event.ENTER_FRAME, onEnterFrame);

    }// end function

    private function onEnterFrame(e:Event):void { updateScheduleTextField() }

    private function updateScheduleTextField():void
    {
        var scheduleString:String = new String();

        for each(var bus:Bus in _schedule.getBuses())
        {
            scheduleString += "BUS: " + bus.name; 

            for each(var time:Time in bus.getTimes())
            {
                scheduleString += "\n\n" + "\t" + "Time: " + time + ", Counddown: " + time.getCountDown();

            }// end for each

            scheduleString += "\n\n";

        }// end for each

        _scheduleTextField.text = scheduleString;

    }// end function

}// end class

internal class Schedule
{
    private var _schedule:XML;

    public function Schedule(schedule:XML):void
    {
        _schedule = schedule;

    }// end function

    public function getBuses():Vector.<Bus>
    {
        var buses:Vector.<Bus> = new Vector.<Bus>();

        for each(var bus:XML in _schedule.bus) buses.push(new Bus(bus));

        return buses;

    }// end function

}// end function

internal class Bus 
{
    private var _bus:XML;

    public function get name():int { return _bus.name }

    public function Bus(bus:XML) { _bus = bus }

    public function getTimes():Vector.<Time>
    {
        var times:Vector.<Time> = new Vector.<Time>();

        for each(var time:XML in _bus.times.time) times.push(new Time(time));

        return times;

    }// end function

}// end class

internal class Time
{
    private var _time:XML;

    public function Time(time:XML) { _time = time }

    public function getCountDown():String
    {
        var hours:int = _time.toString().substring(0, 2);
        var minutes:int = _time.toString().substring(2, 4);

        var currentDate:Date = new Date();

        var date:Date = new Date();
        date.setUTCMilliseconds(0);
        date.setUTCSeconds(0);
        date.setUTCMinutes(minutes);
        date.setUTCHours(hours - 1);

        var countDownDate:Date = new Date();
        countDownDate.setTime((date.getTime() - currentDate.getTime()))

        return (countDownDate.getTime() > 0) ? countDownDate.toTimeString().substring(0, 8) : String(0);

    }// end function

    public function toString():String { return _time }

}// end class
0 голосов
/ 11 мая 2011
package
{
    import flash.display.Sprite;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.Event;

    public class countdownTimer extends Sprite
    {
        private var timer:Timer = new Timer(1000);
        private var countdown:Number = 60;

        public function countdownTimer():void
        {
            init();
        }
        private function init():void
        {
            timer.start();
            timer.addEventListener(TimerEvent.TIMER, action);
        }
        private function action(e:TimerEvent):void
        {
            countdown--;
            trace(countdown);
        }
    }
}

Это просто базовое ... надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...