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

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

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

Регистрация: May 2011
Сообщений: 39
По умолчанию Как создать таймер не зависящий от времени компьютера

Добрый день.

Есть файл с кодом, управляющим часами на сцене.
Код AS3:
package ru.nsab.player {
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
 
	public class Clock extends MovieClip {
 
		private var _timer:Timer = new Timer(1000);
		private var _start:Date = new Date();
		private var offset:Number = _start.getTimezoneOffset()*60000;
		private var datePassed:Date = new Date();
 
		private function onTimer(event:TimerEvent):void {
			updateClock();
		}
 
		private function f(n:Number):String {
			return n<10 ? "0"+n : n.toString();				
		}
 
		private function formatDate(d:Date):String {			
			return f(d.getHours()) + ":" + f(d.getMinutes()) + ":" + f(d.getSeconds());			
		}
 
		private function updateClock():void {
			var dateNow:Date = new Date();
			var timePassed:Number = dateNow.getTime() - _start.getTime() + offset;
			datePassed.setTime(timePassed);
 
			this["timeRunning"].text = formatDate(datePassed);
			this["timeNow"].text = formatDate(dateNow);
		}
 
		public function Clock() {
			_timer.addEventListener(TimerEvent.TIMER, onTimer);
			_timer.start();
			updateClock();}		
}	
}
Сейчас я убрала со сцены таймер с именем timeNow, и нужно отвязать таймер timeRunning от времени компьютера, чтобы он просто считал время с 00:00.

Как это правильно сделать в данном коде??

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

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Можно просто вычитать время старта таймера.

00:00=Московское время например 21:00 - время когда запустили таймер (21:00)
00:01
00:02
...
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 23.09.2012, 16:08
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 3  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
используйте getTimer
при старте запомните время старта таймера
Код AS3:
 startTime:int = getTimer();
и потом при каждом апдейте вычислайте разницу между сейчас и старом таймера
Код AS3:
time = getTimer()-startTime;
__________________
Хороший отдых - половина работы.

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

Регистрация: May 2011
Сообщений: 39
Что нужно приравнивать к timeRunning, если я использую getTimer();??
Код AS3:
this["timeRunning"].text = formatDate(datePassed);

Старый 24.09.2012, 11:09
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
datePassed = new Date();
datePassed.setTime(getTimer() - startTime);
this["timeRunning"].text = formatDate(datePassed);
__________________
Reality.getBounds(this);

Старый 27.09.2012, 00:03
Keyles вне форума Посмотреть профиль Отправить личное сообщение для Keyles Найти все сообщения от Keyles
  № 6  
Ответить с цитированием
Keyles
 
Аватар для Keyles

Регистрация: May 2011
Сообщений: 39
Код AS3:
package ru.nsab.player {
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
 
	public class Clock extends MovieClip {
 
		private var _timer:Timer = new Timer(1000);
		private var _start:Date = new Date();
		private var offset:Number = _start.getTimezoneOffset()*60000;
		private var datePassed:Date = new Date();
		private var startTime:Date = new Date();
 
		private function onTimer(event:TimerEvent):void {
			updateClock();
		}
 
		private function f(n:Number):String {
			return n<10 ? "0"+n : n.toString();				
		}
 
		private function formatDate(d:Date):String {			
			return f(d.getHours()) + ":" + f(d.getMinutes()) + ":" + f(d.getSeconds());			
		}
 
		private function updateClock():void {
 
			var datePassed = new Date();
			datePassed.setTime(getTimer() - startTime);
			this["timeRunning"].text = formatDate(datePassed);
		}
 
		public function Clock() {
			_timer.addEventListener(TimerEvent.TIMER, onTimer);
			_timer.start();
			updateClock();
		}}}
Так получается? Или нет?

Старый 27.09.2012, 00:37
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не много ли datePassed?))
А что такое _start и startTime, обе — даты, инициализируемые одновременно, но не в конструкторе а "когда-то заранее"?
И почему одни приватные переменные именованы с подчеркиванием, как положено, а некоторые — нет?
Почему вообще у класса таймера название "часы", и нет методов для запуска и остановки?
Почему таймер extends MovieClip? Он содержит анимацию на таймлайне?
Что делает offset?
Сплошные вопросы...
__________________
Reality.getBounds(this);

Старый 27.09.2012, 00:49
Keyles вне форума Посмотреть профиль Отправить личное сообщение для Keyles Найти все сообщения от Keyles
  № 8  
Ответить с цитированием
Keyles
 
Аватар для Keyles

Регистрация: May 2011
Сообщений: 39
offset:Number = _start.getTimezoneOffset()*60000;
Разница в минутах между местным временем компьютера и временем по всемирному скоординированному времени (UTC).

startTime - предложенная вами переменная, из кода выше)
таймер - не содержит анимации на сцене.

На сцене мувик Clock, в нем текстовые поля динамические timeRunning и timeNow.

Мне достался уже в таком виде файл, я могу лишь менять его, к сожалению.

Сплошные вопросы... - У меня тоже((

Старый 27.09.2012, 00:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Я имею в виду, что класс непонятен. И вопрос непонятен: "таймер не зависящий от времени компьютера". Таймер в принципе не может зависеть от времени компьютера.
Время показывают часы. Таймер отсчитывает прошедшее время от независимой (переменной) точки во времени.
Если это — таймер, то от какого момента он отсчитывает время, что такое 00:00:00?
Момент создания экземпляра? А если он будет помещен на сцену спустя 15 минут? Не проще ли было сделать в нем метод для запуска во избежание всяких разночтений?
__________________
Reality.getBounds(this);

Старый 27.09.2012, 08:53
Keyles вне форума Посмотреть профиль Отправить личное сообщение для Keyles Найти все сообщения от Keyles
  № 10  
Ответить с цитированием
Keyles
 
Аватар для Keyles

Регистрация: May 2011
Сообщений: 39
Там основная строка управления
var timePassed:Number = dateNow.getTime() - _start.getTime() + offset

Зачем они прицепили offset, мне не ясно. Но из-за него на многих компьютерах сбивается таймер, и отсчитывает не 00-00, а допустим с 23-00.

В таком состоянии таймер показывает с 04-00.
Код AS3:
package ru.nsab.player {
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
 
	public class Clock extends MovieClip {
 
		private var _timer:Timer = new Timer(1000);
		private var _start:Date = new Date();
		private var datePassed:Date = new Date();
 
		private function onTimer(event:TimerEvent):void {
			updateClock();
		}
 
		private function f(n:Number):String {
			return n<10 ? "0"+n : n.toString();				
		}
 
		private function formatDate(d:Date):String {			
			return f(d.getHours()) + ":" + f(d.getMinutes()) + ":" + f(d.getSeconds());			
		}
 
		private function updateClock():void {
			var dateNow:Date = new Date();
			var timePassed:Number = dateNow.getTime() - _start.getTime();
			datePassed.setTime(timePassed);
 
			this["timeRunning"].text = formatDate(datePassed);
		}
 
		public function Clock() {
			_timer.addEventListener(TimerEvent.TIMER, onTimer);
			_timer.start();
			updateClock();
		}		
 
	}
 
}
Какой вписать метод для запуска и куда его вставить?

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

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

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


 


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


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