Перейти к содержимому


Партнерская программа Kredov

Почему ускоряется флешка?

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 29 Апрель 2010 - 19:00

Знаю что код и реализация ужасна, но попросили реализовать во флеше до вечера... Баннер вроде сделал, но почему-то с каждой секундой флешка ускоряется!!! В чём проблема? Ускорение заметно гдето через минуту после открытия флешки.

Посмотреть флешку

import fl.transitions.easing.*;
import fl.transitions.Tween;
import flash.utils.Timer;

kiev.alpha = 0;
perv.alpha = 0;
dov.alpha = 0;

var count:int = 0;
var timer:Timer = new Timer(1000);
timer.start();

timer.addEventListener(TimerEvent.TIMER, timerHandler);

function timerHandler(Timer):void
{
count += 1;

if (count == 2) {
kiev.alpha = 1;
var tween:Tween = new Tween(kiev, "alpha", Elastic.easeIn, 0, 1, 1, true);
}

if (count == 5) {
perv.alpha = 1;
var tween2:Tween = new Tween(perv, "x", Strong.easeOut, 325, 100, 1, true);
}
if (count == 7) {
dov.alpha = 1;
var tween3:Tween = new Tween(dov, "x", Strong.easeOut, -100, 120, 1, true);
}
if (count == 10) {
count = 0;
var btween:Tween = new Tween(kiev, "alpha", None.easeNone, 1, 0, 1, true);
var btween2:Tween = new Tween(perv, "x", Regular.easeOut, 100, -110, 1, true);
var btween3:Tween = new Tween(dov, "x", Regular.easeOut, 120, 350, 1, true);
timerHandler(Timer);
}
}

 

 

  • 0


#2 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 29 Апрель 2010 - 20:00

Проблема решена. Надо заменить
function timerHandler(Timer):void
на
function timerHandler(e:TimerEvent):void

и удалить строку
timerHandler(Timer);

  • 0


#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 29 Апрель 2010 - 20:31

Ага, всё не так уж и просто! Сделал уже через кейсы для удобства, вроде всё нормально, но от ускорения не избавился :rolleyes:

РАБОТАЮЩИЙ КОД!
import fl.transitions.easing.*; // импортируем библиотеки
import fl.transitions.Tween;
import flash.utils.Timer;

kiev.alpha = 0; // делаем невидимыми слоя, которые должны быть невидимыми :)
perv.alpha = 0;
dov.alpha = 0;

var count:int = 0; // ставим счётчик, которые принимает только целые значения, приравниваем его к нулю
var timer:Timer = new Timer(1000); // ставим таймер, который подаёт сигналы через каждую секунду бесконечное количество раз
timer.start(); // запускаем таймер

timer.addEventListener(TimerEvent.TIMER, timerHandler); // добавляем слушателя к таймеру, то есть что должно происходить с каждой секундой

function timerHandler(e:TimerEvent):void // должна выполнятся функция, которая реагирует на изменения таймера (увеличение секунд)
{
count += 1; // каждый запрос - это одна секунда. Считаем сколько секунд

switch(count) // подбираем секунды... (не знаю как в двух словах описать)
{
	case 2: // если 2 секунды (count = 2), то
		kiev.alpha = 1; // изменяем альфа канал (прозрачность) на 1 (100%), то есть делаем видимым
		var tween:Tween = new Tween(kiev, "alpha", Elastic.easeIn, 0, 1, 1, true); \\ применяем анимацию (Твины это отдельный разговор
		break; // закрываем блок case - break (это как begin - end в Паскале)
	
	case 5: // если 5 секунд (count = 5), то
		perv.alpha = 1; // то самое
		var tween2:Tween = new Tween(perv, "x", Strong.easeOut, 325, 100, 1, true); // то самое
		break; // ...

	case 7: // да, всё правильно поняли
		dov.alpha = 1; // опять
		var tween3:Tween = new Tween(dov, "x", Strong.easeOut, -100, 120, 1, true); // и опять 
		break; // но коментс

	case 10: // если 10 сек, то
		var btween:Tween = new Tween(kiev, "alpha", None.easeNone, 1, 0, 1, true); // Делаем обьект с инстансом kiev прозрачным
		var btween2:Tween = new Tween(perv, "x", Regular.easeOut, 100, -110, 1, true); // обьект вылетает из слой
		var btween3:Tween = new Tween(dov, "x", Regular.easeOut, 120, 350, 1, true); // обьект тоже вылетаеи из слоя. Лист чист
		count = 0; // обнуляем счётчик секунд, и пошло поехало....;)
}
}

Что такое?
  • 0


#4 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 29 Апрель 2010 - 22:17

Всё, решил проблему.... Хотя её и решать не надо было. Сначала я хотел сделать анимацию на временной линейке, а потом перешёл в ActionScript 3.0 с помощью Tween’ов. Но кадры на временной линейке я удалить забыл... Вотето лопух хД Зато сумел усовершенствовать код и выучил switch - case. Думаю этот код можно ещё больше усовершенствовать, так что ждите продолжения.

пс. жаль что получился монолог :rolleyes:
  • 0


#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 29 Апрель 2010 - 22:23

Banderas,
1) Сначала назначай прослушку события, а затем запускай таймер.
2) Зачем вводить дополнительный свой счетчик, если есть встроенный. Ссылка из обработчика через event.target.currentCount
3) Мне кажется, время за которое у вас срабатывает происходящая анимация больше времени таймера, и со временем начинает вызываться сразу несколько дуйствий, например при count 7 и 10.
Попробуй поставить интервал в 5 секунд, посмотри, будет ли ускоряться.

немного опоздал...
  • 0

#6 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 29 Апрель 2010 - 22:52

2*ZiTosS*
1) Спасибо, в данном случае это роли не играет, но в другом такая мелочь могла испоганить все труды, как говорят "ложка дёгтя в бочке мёда" :0
2) event.target.currentCount не смогу использовать, потому что эта функция онли рид, я не смог бы обнулить счётчик для перезапуска мувика.
3) Опаздал..))
  • 0



Оформление форума – IPBSkins.ru