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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 18.11.2006, 07:58
Dendroid вне форума Посмотреть профиль Отправить личное сообщение для Dendroid Посетить домашнюю страницу Dendroid Найти все сообщения от Dendroid
  № 11  
Ответить с цитированием
Dendroid
 
Аватар для Dendroid

Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
Поделюсь своим кодом для быстрого и равномерного движения, очень хорошие результаты получаются:
Код:
	mainTimer = new Timer(tick=10);
	mainTimer.addEventListener("timer", doGameTimer);
	mainTimer.start();
	gameStartTime = getTimer();

	function doGameTimer (e:Event) {
	// двигаем что нам надо:
	ball.x += ball.vx;
	ball.y += ball.vy;
	// компенсируем следующий "тик":
	var t = Math.max(1, tick-((getTimer()-gameStartTime)-mainTimer.currentCount*tick));
	mainTimer.delay = t;
	if (t>1) {
		// если игра не тормозит, сразу же обновляем экран:
		e.updateAfterEvent();
	}
	}
И хотя при этом подходе "тики" плавают в пределах от 1 до 10, на вид объект движется очень равномерно и без мигания (даже не надо учитывать величину предыдущего "тика" при изменении координат, т.к. это величина будет "плавать" только в периодах больше 1/100 секунды - на глаз всё равно не видно).
Кстати, tick=10 - это где-то оптимальная величина, если больше - уже заметно мерцание, меньше - мало запаса для компенсации следующего вызова, и большие накладные расходы на обслуживание самого вызова таймера.
И вот уже от этой величины времени стоит рассчитывать вектор скорости (vx, vy). А не от единицы скорости искать время перерисовки... Шарик арканоида - это где-то в районе v=0.2 у меня получилась Но и при v=10 движение хоть и быстрое, но вполне естественное, без рывков.
А вот от EnterFrame, john, пришлось отказаться, т.к. при загрузке процессора, близкой к 100%, флэш начинает сам компенсировать временные промежутки, т.е. он делает, допустим 10 вызвовов enterFrame по 5 миллисекунд (т.е. быстрее, чем реально может перерисовывать сложную сцену, только код исполняется), потом у него идёт один временной вызов на 60мс (перерисовал!), и эти вызовы перерисовки идут очень неравномерно, компенсировать рывки не получается... Способ выше начинает лагать только при гораздо большей загрузке.
Рекомендую.
__________________
Верить никому нельзя. Мне - можно. :)

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

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

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


 


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


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