Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.10.2006, 00:12
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 1  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
По умолчанию Date: Время суток, как отлавливать переход день/ночь

В последнее время часто задают эти вопросы, а после того, как сразу два пользователя написали мне личные сообщения по этому поводу, решил создать эту тему. Наверняка были уже подобные, но чего-то их никто не может найти. Пусть будет ещё такой пример, тем более, что в личные сообщения прикреплять файлы нельзя. Код я постарался прокомментировать. Если будут вопросы, пишите.
Нижеприведённый код в зависимости от времени суток прикрепляет на сцену из библиотеки изображение солнца или луны.
Код:
// Час, когда начинается ночь. По сути первый час ночи.
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;
}
Исходник прикрепляю...
Вложения
Тип файла: zip timeTimer.zip (27.3 Кб, 83 просмотров)
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 25.10.2006, 01:00
Котяра2006 вне форума Посмотреть профиль Отправить личное сообщение для Котяра2006 Найти все сообщения от Котяра2006
  № 2  
Ответить с цитированием
Котяра2006

Регистрация: Jun 2006
Сообщений: 274
есть ведь добрые люди на земле, спасибо, пригодится

Старый 25.10.2006, 11:25
repz вне форума Посмотреть профиль Отправить личное сообщение для repz Найти все сообщения от repz
  № 3  
Ответить с цитированием
repz

Регистрация: Mar 2006
Сообщений: 425
2 Хемуль:
И все же не про то я спрашивал.... как бы по точнее....
Как через определенный промежуток времени выполнять одно и то же действие?

Старый 25.10.2006, 13:13
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 4  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 repz:
Код:
// Интервал в миллисекундах.
var repeatInterval:Number = 1000;
// Создаём таймер.
var timer:Number = setInterval(functionToRepeat, repeatInterval);

// Описываем функцию, которая будет повторяться через repeatInterval.
function functionToRepeat()
{
    // Действие, которое повторяется через repeatInterval
}
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого


Последний раз редактировалось Хемуль; 25.10.2006 в 15:20.
Старый 25.10.2006, 13:39
repz вне форума Посмотреть профиль Отправить личное сообщение для repz Найти все сообщения от repz
  № 5  
Ответить с цитированием
repz

Регистрация: Mar 2006
Сообщений: 425
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
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 6  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 repz:
А что вы хотели получить?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 25.10.2006, 14:21
repz вне форума Посмотреть профиль Отправить личное сообщение для repz Найти все сообщения от repz
  № 7  
Ответить с цитированием
repz

Регистрация: Mar 2006
Сообщений: 425
Проверку своего условия через 1000 мл/сек

Старый 25.10.2006, 15:18
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 8  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 repz:
А так:
Код:
var timer:Number = setInterval(functionToRepeat, repeatInterval);
либо так:
Код:
var timer:Number = setInterval(this, "functionToRepeat", repeatInterval);
Я извиняюсь - я там кавычки забыл убрать... Второй вариант - вызов функции как метода.
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого


Последний раз редактировалось Хемуль; 25.10.2006 в 15:21.
Старый 25.10.2006, 15:52
repz вне форума Посмотреть профиль Отправить личное сообщение для repz Найти все сообщения от repz
  № 9  
Ответить с цитированием
repz

Регистрация: Mar 2006
Сообщений: 425
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
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 10  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 repz:
Ну, я вам показал, как делать проверку через определённое время... Разьирайтесь с кодом сокета... А вообще, как мне кажется, некорректно так делать, как вы делаете. Вы уверены, что onConnect выполняется раньше, чем пройдёт 500 миллисекунд?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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