![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Прошу пардону если тема уже обсуждалась, но поиск по слову "мерцание" ничего не дал.
Простейший пример. Треугольник движется по вертикали со скоростью 5 пикселей в секунду. Движение задается таким кодом: При таком движении нижняя сторона треугольника мерцает-мигает-раздваивается... вобщем анимация получается не очень плавной. При более сложном движении мерцать будут все стороны объекта. Как можно избавиться от такого раздваивания? Варианты "уменьшить скорость перемещения" и "увеличить количество кадров в секунду" не устраивают. Пример флэшки в прикреленном файле. |
|
|||||
|
[+1 02.06.2006]
[+1.4 01.04.2006] [+1 01.07.2006] |
Я думаю просто идет высокая нагрузка на процессор и можно попробывать решить проблему используя не событие onEnterFrame а функцию setInterval совместно updateAfterEvent
__________________
С уважением, Maksi. |
|
|||||
|
Хммм... Попробовал сделать как ты сказал, код получился таким:
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%...
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения. |
|
|||||
|
4AM Games
|
Насчет частоты кадров, поищи у Роста в блоге ( flash-ripper.com ) он писал, но возможно придеться перерыть не один десяток страниц.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Всё-таки еще раз подниму этот вопрос. Есть вот такой простой пример: 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);
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения. |
|
|||||
|
а ты не подулал что он ресует тоже не моментально?
__________________
Best regards, Boris Petrov |
|
|||||
|
Цитата:
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения. |
|
|||||
|
К тому же обычно, если не использовать двйную буферизацию, мерцает весь экран, целиком, а не отдельные объекты на нем... То есть создается впечатление что не в этом дело... Хотя я могу ошибаться...
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения. |
|
|||||
|
Banned
[+1 16.05.2006]
[++1 16.05.2006] [+ 1 21.05.06] [++ за хамство] [+1 21.05.2006] Регистрация: Dec 2003
Сообщений: 3,925
|
Класс Tween -- плавнее движение вам сделать не удастся.
|
|
|||||
|
Спасибо, сейчас покапаюсь.
__________________
– Слушаю, мессир, – сказал кот, – если вы находите, что нет размаха, и я немедленно начну держаться того же мнения. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:08. |
|
|
« Предыдущая тема | Следующая тема » |
|
|