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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Jan 2006
Сообщений: 13
Отправить сообщение для Кроликов с помощью ICQ
По умолчанию Как избавиться от мерцания объекта при его движении

Прошу пардону если тема уже обсуждалась, но поиск по слову "мерцание" ничего не дал.

Простейший пример. Треугольник движется по вертикали со скоростью 5 пикселей в секунду. Движение задается таким кодом:

Код:
_root.onEnterFrame = function()
{
	strelka._y -= 5;
	if(strelka._y <= 0)strelka._y = 200;
}
При таком движении нижняя сторона треугольника мерцает-мигает-раздваивается... вобщем анимация получается не очень плавной. При более сложном движении мерцать будут все стороны объекта. Как можно избавиться от такого раздваивания? Варианты "уменьшить скорость перемещения" и "увеличить количество кадров в секунду" не устраивают.

Пример флэшки в прикреленном файле.
Вложения
Тип файла: zip triangle.zip (346 байт, 94 просмотров)

Старый 15.01.2006, 11:26
Буньков Максим вне форума Посмотреть профиль Отправить личное сообщение для Буньков Максим Посетить домашнюю страницу Буньков Максим Найти все сообщения от Буньков Максим
  № 2  
Ответить с цитированием
Буньков Максим
[+1 02.06.2006]
[+1.4 01.04.2006]
[+1 01.07.2006]
 
Аватар для Буньков Максим

Регистрация: Feb 2003
Адрес: Екатеринбург
Сообщений: 848
Отправить сообщение для Буньков Максим с помощью ICQ
Я думаю просто идет высокая нагрузка на процессор и можно попробывать решить проблему используя не событие onEnterFrame а функцию setInterval совместно updateAfterEvent
__________________
С уважением, Maksi.

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

Регистрация: Jan 2006
Сообщений: 13
Отправить сообщение для Кроликов с помощью ICQ
Хммм... Попробовал сделать как ты сказал, код получился таким:
Код:
function moveStrelka()
{
	strelka._y -= 5;
	if(strelka._y <= 0)strelka._y = 200;
	updateAfterEvent();
}

setInterval(moveStrelka, 10);
но при этом разницы при отрисовке между первым и выторым вариантом не увидел...

Фактически получается что в первом случае я задаю FPS через интерфейс Флэша, а во втором случае – вручную, через параметр функции setInterval(), так что не ясно почему должна снизиться нагрузка на процессор, ведь и в первом и во втором случае частоту кадров можно сделать одинаковой...

ЗЫ и еще один вопрос. Я с Акшн Скриптом стал разбираться недавно, поэтому пока не знаю некоторых элементарных вещей, например, есть ли какая-то общепринятая оптимальная частота кадров для флэш-ролика? Просто пробовал менять на этом тестовом примере частоту кадров от 12 до 120 кадров в секунду, в первом случае получается "раздваивание", во втором – нагрузка на процессор достигает 50-60% и это на таком не загруженном кодом и объектами примере:((

Добиться нормального соотношения "анимация/нагрузка на процессор" устанавливая другие FPSы не удалось, поэтому думаю, может я что-то неправильно делаю? Ведь на том же miniclips.com куча флэш-игр, с нормальной анимацией и нагрузкой на проц не больше 20-30%...
Вложения
Тип файла: zip triangle.zip (383 байт, 64 просмотров)
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения.

Старый 15.01.2006, 14:08
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 4  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Насчет частоты кадров, поищи у Роста в блоге ( flash-ripper.com ) он писал, но возможно придеться перерыть не один десяток страниц.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 20.01.2006, 18:33
Кроликов вне форума Посмотреть профиль Отправить личное сообщение для Кроликов Найти все сообщения от Кроликов
  № 5  
Ответить с цитированием
Кроликов

Регистрация: Jan 2006
Сообщений: 13
Отправить сообщение для Кроликов с помощью ICQ
Всё-таки еще раз подниму этот вопрос. Есть вот такой простой пример: http://www.knod.ru/wave.swf

Вот код, который рисует эту волну:
Код:
// Объявляю переменные
var screenHeight: Number;
var steps: Number;
var step: Number;
var i: Number;
var X = Array(), Y = Array();
var dX: Number;

// Задаю начальные значения переменных
screenHeight = 400;
steps = 13;
step = 50;
dX= 2;

// Расчет параметров волны
for(i = 0; i <= steps; i++){
	Y[i] = screenHeight - 20 - Math.random() * step;
	X[i] = i * step - step;
}

// Отрисовка волны
function wave()
{
	clear();
	for(i = 0; i <= steps; i++)X[i] -= dX;
	
	lineStyle (4, "0x000000", 100);
	moveTo(-step, screenHeight);
	beginFill("0x0000FF");
	lineTo(X[0], Y[0]);
	for(i = 0; i <= steps - 1; i++)curveTo(X[i], Y[i], (X[i+1] + X[i]) / 2, (Y[i+1] + Y[i]) / 2);
	lineTo(X[steps], screenHeight);
	endFill();			
	
	// Если координата Х уехала за пределы экрана, сдвигаю все координаты на 1 вправо
	// и генерирую новую крайнюю правую координату
	if(X[0] <= -10 )
	{
		for(i = 1; i <= steps; i++)
		{
			X[i - 1] = X[i];
			Y[i - 1] = Y[i];
		}
		Y[steps] = screenHeight - 20 - Math.random() * step * 2;
		X[steps] = X[steps - 1] + step;
	}
	
}

// main
setInterval(wave, 10);
С таким сетинтервалом отрисовка идет со скоростью 100 кадров в секунду, но при этом все-равно наблюдается раздвоение "волны", которое особенно заметно на линиях которые близки к перпендикуляру. Есть ли какие-то средства для борьбы с этим эффектом?
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения.

Старый 20.01.2006, 18:38
MIX-er вне форума Посмотреть профиль Отправить личное сообщение для MIX-er Найти все сообщения от MIX-er
  № 6  
Ответить с цитированием
MIX-er
 
Аватар для MIX-er

Регистрация: Jun 2005
Сообщений: 612
Отправить сообщение для MIX-er с помощью ICQ Отправить сообщение для MIX-er с помощью Yahoo
а ты не подулал что он ресует тоже не моментально?
__________________
Best regards, Boris Petrov

Старый 20.01.2006, 18:47
Кроликов вне форума Посмотреть профиль Отправить личное сообщение для Кроликов Найти все сообщения от Кроликов
  № 7  
Ответить с цитированием
Кроликов

Регистрация: Jan 2006
Сообщений: 13
Отправить сообщение для Кроликов с помощью ICQ
Цитата:
Сообщение от MIX-er
а ты не подулал что он ресует тоже не моментально?
Подумал, дальше-то что? Какое предлагаешь решение проблемы? Можно ли реализовать двойниую буферизацию во флэше?
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения.

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

Регистрация: Jan 2006
Сообщений: 13
Отправить сообщение для Кроликов с помощью ICQ
К тому же обычно, если не использовать двйную буферизацию, мерцает весь экран, целиком, а не отдельные объекты на нем... То есть создается впечатление что не в этом дело... Хотя я могу ошибаться...
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения.

Старый 20.01.2006, 18:58
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 9  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Класс Tween -- плавнее движение вам сделать не удастся.

Старый 20.01.2006, 19:10
Кроликов вне форума Посмотреть профиль Отправить личное сообщение для Кроликов Найти все сообщения от Кроликов
  № 10  
Ответить с цитированием
Кроликов

Регистрация: Jan 2006
Сообщений: 13
Отправить сообщение для Кроликов с помощью ICQ
Спасибо, сейчас покапаюсь.
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения.

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

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

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


 


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


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