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

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

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

Регистрация: Oct 2010
Сообщений: 57
По умолчанию Помогите разобратся с Timer()

Хочу организовать контролированое ускорение спавна обьектов, делаю ето так:
Код AS3:
        private var timer_raund: Timer;
	private var timer_secunda: Timer;
	private var timer_faster: Timer;
	private const MIN_del: int=300;
	private const startDel: int=1100;
	private var faster_delay: int=startDel;
	private var tick_del: int=10;
 
	// timer-----------------------------------------
	public function ModelCore()
	{
		super();
 
		timer_raund=new Timer(raundLen);
		timer_raund.addEventListener(TimerEvent.TIMER,tick_raundEnd);
		timer_secunda=new Timer(1000);
		timer_secunda.addEventListener(TimerEvent.TIMER,tick_secunda);
		timer_faster=new Timer(faster_delay);
		timer_faster.addEventListener(TimerEvent.TIMER,tick_faster);
	}
 
private function tick_secunda(event: TimerEvent): void
	{
		if(timer_faster.delay>MIN_del){
			faster_delay-=tick_del;
		timer_faster.delay=faster_delay;
		}
		// event.updateAfterEvent();
		secunda();
	}
 
	private function tick_faster(e: TimerEvent): void
	{
		trace(e.target.delay);
 
		spam();
		// e.updateAfterEvent();
	}
 
private function secunda(): void
	{
		secundomir--;
		dispatchEvent(new Event(Model.SECUNDA));
	}
 
private function tick_raundEnd(event: TimerEvent): void 
	{
		timer_raund.stop();
		timer_secunda.stop();
		timer_faster.stop();
		faster_delay=startDel;
		secundomir=0;
		dispatchEvent(new Event(Model.END_ROUND));
	}
 
	public function startRaund(): void 
	{	
		timer_faster.start();
		timer_raund.start();
		timer_secunda.start();
 
		secundomir=raundLen/1000;
 
		dispatchEvent(new Event(Model.START_ROUND));
	}
проц загружен на 30%

1. почему когда startDel > 960(вычислил експрериментальным путем) спавн начинается с задержкой больше 5 сек?
2. delay трейсит что меняет но на самом деле ускорятся начинает только когда daley < 500 делая ето мгновенно, а мне нужно плавное ускорение.
И если можно както подругому без таймеров и фреймов реализовать ускорение подскажите как плиз

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Уменьшать не время, а расстояние/угол, проходимые за один "шаг" (один "тик")?
Используйте готовые твины (Tweener, Greensock TweenLite/TweenMax) или напишите свой для конкретной задачи.
__________________
Reality.getBounds(this);

Старый 07.09.2011, 21:17
wolhw вне форума Посмотреть профиль Отправить личное сообщение для wolhw Найти все сообщения от wolhw
  № 3  
Ответить с цитированием
wolhw

Регистрация: Oct 2010
Сообщений: 57
уточню: нужно увеличение количества созданных обьектов в секунду.
Код AS3:
function spam():void
{
obj=new MyObj();
addChild(obj);
}


Последний раз редактировалось wolhw; 07.09.2011 в 21:35.
Старый 07.09.2011, 22:20
Azo вне форума Посмотреть профиль Отправить личное сообщение для Azo Найти все сообщения от Azo
  № 4  
Ответить с цитированием
Azo
 
Аватар для Azo

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Используйте greenshok.
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
нужно увеличение количества
Ну ничего страшного. Создаете свойство с начальным значением количества, создаете твин, в котором указываете максимальное количество за шаг, время, за которое надо дойти до этого показателя, и функцию, управляющую графиком изменения. В обработчике на каждый шаг (onUpdate или как-то так у гринсока) запускаете цикл от ноля до текущего значения этого свойства (твин будет его менять), и в этом цикле на каждую итерацию создаете новый объект и добавляете в дисплей лист. Вот и управление количеством.
__________________
Reality.getBounds(this);

Старый 07.09.2011, 23:25
wolhw вне форума Посмотреть профиль Отправить личное сообщение для wolhw Найти все сообщения от wolhw
  № 6  
Ответить с цитированием
wolhw

Регистрация: Oct 2010
Сообщений: 57
спасибо попробую так, но все же почему таймеры неработают?

Добавлено через 34 минуты
если упростить мой код(ато оч много текста)----


Код AS3:
var timer1:Timer;
var timer2:Timer;
 
function onTimer1(e:TimerEvent):void
{
timer2.delay-=10;
}
 
function onTimer2(e:TimerEvent):void
{
//похоже проблема в етом, свойство delay несоответствует реальному шагу("тику")????!!!!!
//
хих думалось клас Таймер ето основа и зеленыйНосок тоже на нем базируется, но видимо я ошибался, чтож буду ковырять библиотеку носка...


Последний раз редактировалось wolhw; 08.09.2011 в 00:20.
Старый 08.09.2011, 01:31
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну вообщето при присвоении свойству delay нового значения во время работы таймера тот перезапускается. Тогда, скажем, он уже отсчитал 100 миллисекунд из 110, и тут другой таймер задал ему новое значение - 90. Первый таймер начинает считать 90 миллисекунд СНАЧАЛА, и значит реальный промежуток между событиями составит 100 + 90 = 190 миллисекунд.
В Вашем случае проще увеличивать кол-во итераций в цикле добавления новых объектов, тем более что, как я понял, Вам нужно обычное равноускоренное увеличение.. Можно просто спрашивать у таймера currentCount, умножать на 10 (к примеру) и создавать в цикле именно столько объектов - 10, 20, 30, 40...
__________________
Reality.getBounds(this);

Старый 08.09.2011, 02:57
wolhw вне форума Посмотреть профиль Отправить личное сообщение для wolhw Найти все сообщения от wolhw
  № 9  
Ответить с цитированием
wolhw

Регистрация: Oct 2010
Сообщений: 57
Да, теперь все сложилось)), надо почаще в справку заглядывать хм.
Цыкл мне неподойдет обьекты мне нужно по одному бросать а не групой,
решение наверное ето event.delay (когда таймер сам себя перезапускает с новым значением делей ну и регулировать просто ето значение учитывая уже предыдущее ускорение)


Последний раз редактировалось wolhw; 08.09.2011 в 02:59.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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