Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Re: Как настроить таймер? (http://www.flasher.ru/forum/showthread.php?t=212606)

rescuer 24.03.2016 12:35

Re: Как настроить таймер?
 
Здравствуйте! Помогите мне, пожалуйста, настроить таймер!
Я случайно раздобыл код замечательного таймера. Если нажать на кнопку "старт", то он запускается. Если на "стоп", то останавливается. Если после того, как приложение будет закрыто, а потом его опять открыть, то на таймере остаётся сохранённым его последнее значение, на котором он был остановлен.
Всё замечательно работает! Но мне нужно сделать так, чтобы таймер останавливался не по нажатию на кнопку "стоп", а автоматически после отсчёта определённого количества цифр. То есть, после определённого числа срабатываний этого отсчёта.
Этот таймер начинает отсчёт с цифры 100. А как сделать так, чтобы он останавливался после 30 срабатываний на цифре 70, и чтобы эта цифра 70 осталась при новом открытии приложения? А потом опять нажал на "старт", он отсчитал бы ещё 30, и остановился на цифре 40, и чтобы эта 40 опять была бы сохранена при новом запуске приложения?
Посмотрите, пожалуйста, этот код! Может поможет кто?
Код AS3:

import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.net.SharedObject;
 
//объект SharedObject
var so:SharedObject = SharedObject.getLocal("my_game_data");
 
// Таймер
var maxCount:uint = 100;
var timer:Timer = new Timer(1000);
//сюда будем класть сохранённое значение
var curCount:Number = 0;
 
var noLessVisible:Boolean = false;
 
//таймер для сохранения данных, 100 - частота сохранения данных
var saveTimer:Timer = new Timer(100);
 
timer.addEventListener(TimerEvent.TIMER, fl_TimerHandler);
 
saveTimer.addEventListener(TimerEvent.TIMER,saveStuff);
saveTimer.start();
 
noLess.visible = false;
 
if (so.data.noLessVisible != undefined)
{
        noLessVisible = so.data.noLessVisible;
}
else
{
        noLessVisible = false;
}
 
noLess.visible = noLessVisible;
 
if (so.data.curCount != undefined)
{
        curCount = so.data.curCount;
        maxCount = curCount;
        timerTF.text = String(maxCount);
}
else
{
        timerTF.text = "";
}
 
btnStart.addEventListener(MouseEvent.CLICK, onClick);
 
function onClick(event:MouseEvent):void
{
        if (timer.running)
        {
                noLess.visible = true;
        }
        else
        {
                timer.start();
                btnStart.visible = false;
                btnStop.visible = true;
                noLess.visible = false;
 
                LessonnoActiv.visible = true;
 
                if (timer.currentCount == 0)
                {
                        timerTF.text = String(maxCount);
                }
        }
}
 
function fl_TimerHandler(event:TimerEvent):void
{
        timerTF.text = String(maxCount-timer.currentCount);
        if (timer.currentCount >= maxCount)
        {
                maxCount = 100;
                so.data.curCount = maxCount;
                timer.reset();
                noLess.visible = true;
                btnStart.visible = true;
                noLessVisible = noLess.visible;
                so.data.noLessVisible = noLessVisible;
        }
}
 
function saveStuff(e:TimerEvent)
{
        if (timer.running)
        {
                curCount = maxCount - timer.currentCount;
                so.data.curCount = curCount;
        }
        else
        {
                curCount = 0;
        }
}
 
 
btnStop.addEventListener(MouseEvent.CLICK, fl_ClickToHide_5);
 
function fl_ClickToHide_5(event:MouseEvent):void
{
        timer.stop();
        btnStop.visible = false;
        btnStart.visible = true;
}


Comer 24.03.2016 19:33

Цитата:

Сообщение от rescuer (Сообщение 1192922)
Посмотрите, пожалуйста, этот код! Может поможет кто?

Я так понимаю, что нужно добавить в код вот эту строчку:
Код AS3:

timer.repeatCount = 30;

Вот только, честно говоря, не знаю куда именно. Может кто-то из более опытных флеш-мастеров подскажет?

GBee 24.03.2016 19:47

Код элементарный, автор не хочет сам что-то делать.
Изменения в код fl_TimerHandler.

Так же не прописаны все исходы. Что делать, когда истекут последние 40? Либо программу закроют посреди контрольных точек. И т.д.

Comer 24.03.2016 19:58

Цитата:

Сообщение от GBee (Сообщение 1192936)
Код элементарный, автор не хочет сам что-то делать.

Не уверен, что автор ленится. Наверное, просто не знает. Он же пишет, что этот код раздобыл случайно. Я вот тоже, например, ещё не сильно разбираюсь. Просто столкнулся когда-то с похожей проблемой, вот и вспомнил про ту строчку, которую ему дал. А куда её вставить я и сам не знаю...
Если ты знаешь, то подскажи. Не дай человеку мучиться...

rescuer 24.03.2016 20:25

Я вставил эту строчку вот в эту часть кода:
Код AS3:

btnStart.addEventListener(MouseEvent.CLICK, onClick);
 
function onClick(event:MouseEvent):void
{
    if (timer.running)
    {
        noLess.visible = true;
 
    }
    else
    {
        timer.start();
        timer.repeatCount = 30;
        btnStart.visible = false;
        btnStop.visible = true;
        noLess.visible = false;
 
        LessonnoActiv.visible = true;
 
        if (timer.currentCount == 0)
        {
            timerTF.text = String(maxCount);
        }
    }
}

Таймер останавливается на нужной цифре 70. Но только при повторном открытии открывается не 70, как должно быть, а 71. Можно это исправить?


Часовой пояс GMT +4, время: 00:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.