Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Date: Время суток, как отлавливать переход день/ночь (http://www.flasher.ru/forum/showthread.php?t=86883)

Хемуль 25.10.2006 00:12

Date: Время суток, как отлавливать переход день/ночь
 
Вложений: 1
В последнее время часто задают эти вопросы, а после того, как сразу два пользователя написали мне личные сообщения по этому поводу, решил создать эту тему. Наверняка были уже подобные, но чего-то их никто не может найти. Пусть будет ещё такой пример, тем более, что в личные сообщения прикреплять файлы нельзя. Код я постарался прокомментировать. Если будут вопросы, пишите.
Нижеприведённый код в зависимости от времени суток прикрепляет на сцену из библиотеки изображение солнца или луны.
Код:

// Час, когда начинается ночь. По сути первый час ночи.
var nightBeginHour:Number = 22;
// Час, когда заканчивается ночь. По сути первый час дня.
var nightEndHour:Number = 5
// Интервал в миллисекундах, который определяет периодичность проверки времени.
var timeCheckInterval:Number = 1000;
// Булево значение, в которой хранятся данные о том, какая сейчас часть суток.
// Данная переменная необходима для осуществления перехода день/ночь.
// Получаем текущую часть суток и сохраняем в переменную currentDayStatus.
var currentDayStatus:Boolean = isThereIsDayNow();

// Инициализируем начальное состояние обьектов для текущей части суток.
// Для данного примера вызываем функцию создания на сцене небесного светила,
// соответствующего дню/ночи.
attachCurrentPlanet();

// Устанавливаем таймер для проверки времени через
// каждые timeCheckInterval секунд.
var timer:Number = setInterval(this, "checkTime", timeCheckInterval);

// Функция, возвращающая true, если сейчас день и false, если сейчас ночь.
function isThereIsDayNow():Boolean
{
        // Создаём обьект Date для того, чтобы получить текущее время.
        var myDate:Date = new Date();
        // Проверяем, лежит ли значение текущего часа в пределах дня или нет.
        return ((myDate.getHours() >= nightEndHour) && (myDate.getHours() < nightBeginHour))
}

// Функция проверки времени
function checkTime()
{
        // В булеву переменную newDayStatus заносим данные о том,
        // какая сейчас часть суток.
        var newDayStatus:Boolean = isThereIsDayNow();
        // Проверяем, произошёл ли переход день/ночь, то есть, изменилась ли текущая
        // часть суток.
        if (newDayStatus != currentDayStatus)
        {
                // Если переход день/ночь произошёл, сохраняем данные о текущей
                // части суток в currentDayStatus.
                currentDayStatus = newDayStatus;
                // И производим необходимые действия.
                // Для данного примера удаляем старое небесное светило и вытаскиваем
                // из библиотеки на его место новое светило, соответствующее текущей
                // части суток.
                this.planet.removeMovieClip();
                attachCurrentPlanet();
        }
}

// Функция для примера
function attachCurrentPlanet()
{
        // Для этого примера в зависимости от текущей части суток на сцену
        // из библиотеки выкладывается солнце или луна.
        // Мувиклип светила увеличивается в 2 раза и центрируется относительно сцены.
        var planetClip:MovieClip = this.attachMovie(currentDayStatus ? "sun" : "moon", "planet", this.getNextHighestDepth());
        planetClip._xscale *= 2;
        planetClip._yscale *= 2;
        planetClip._x = (Stage.width - planetClip._width) / 2;
        planetClip._y = (Stage.height - planetClip._height) / 2;
}

Исходник прикрепляю...

Котяра2006 25.10.2006 01:00

есть ведь добрые люди на земле, спасибо, пригодится :)

repz 25.10.2006 11:25

2 Хемуль:
И все же не про то я спрашивал.... как бы по точнее....
Как через определенный промежуток времени выполнять одно и то же действие?

Хемуль 25.10.2006 13:13

2 repz:
Код:

// Интервал в миллисекундах.
var repeatInterval:Number = 1000;
// Создаём таймер.
var timer:Number = setInterval(functionToRepeat, repeatInterval);

// Описываем функцию, которая будет повторяться через repeatInterval.
function functionToRepeat()
{
    // Действие, которое повторяется через repeatInterval
}


repz 25.10.2006 13:39

2 Хемуль:
Код:

a_mc._visible=false;
b_mc._visible=false;
c_mc._visible=false;

var repeatInterval:Number = 1000;

var timer:Number = setInterval("functionToRepeat", repeatInterval);


function functionToRepeat()
{
 
var socket:XMLSocket = new XMLSocket();
if (!socket.connect("10.0.8.2",139)) {
        c_mc._visible=true;
}
socket.onConnect = function(success:Boolean):Void  {
        if (!success) {
                b_mc._visible=true;
        } else {
                a_mc._visible=true;
        }
}
}

Что т не работает.

Хемуль 25.10.2006 14:03

2 repz:
А что вы хотели получить?

repz 25.10.2006 14:21

Проверку своего условия через 1000 мл/сек

Хемуль 25.10.2006 15:18

2 repz:
А так:
Код:

var timer:Number = setInterval(functionToRepeat, repeatInterval);
либо так:
Код:

var timer:Number = setInterval(this, "functionToRepeat", repeatInterval);
Я извиняюсь - я там кавычки забыл убрать... Второй вариант - вызов функции как метода.

repz 25.10.2006 15:52

2 Хемуль:
Код:

a_mc._visible=false;
b_mc._visible=false;
c_mc._visible=false;
var socket:XMLSocket = new XMLSocket();
var repeatInterval:Number = 500;

var timer:Number = setInterval(this, "functionToRepeat", repeatInterval);


function functionToRepeat()
{
 if (!socket.connect("10.0.8.2",139)) {
        c_mc._visible=true;
}
socket.onConnect = function(success:Boolean):Void  {
        if (!success) {
                b_mc._visible=true;
        } else {
                a_mc._visible=true;
        }
}
}

Так работает, но почему-то только в одну сторону, т.е. есть соединение показывает a_mc, нет соединения показывает b_mc, а вот если снова есть, то a_mc обратно не показывает.

Хемуль 25.10.2006 16:25

2 repz:
Ну, я вам показал, как делать проверку через определённое время... Разьирайтесь с кодом сокета... А вообще, как мне кажется, некорректно так делать, как вы делаете. Вы уверены, что onConnect выполняется раньше, чем пройдёт 500 миллисекунд?


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

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