Вход

Просмотр полной версии : Адаптация кода к другой версии.


Dizz
07.06.2008, 17:03
И дело пожалуй даже не в as1 или as2. Как я понимаю дело в разнице их интерпретации в flash 6 и 8.

Сама суть такова. Попался исходник с удачным эффектом. При настройках под плейер 6 всё работает отлично, а под 8 - нет.

Как правильно интерпретировать код? Есть какие-то специальные таблицы или разработанные рекомендации?

Если нужен сам код то вот он:

onClipEvent (load) {
num = 25;
i = 1;
while (num>=i) {
star.duplicateMovieClip("star"+i, i+1889);
mc = this["star"+i];
mc.rX = (random(5)+4)/1000;
mc.rY = (random(5)+4)/1000;
mc._x = random(300)-150;
mc._y = random(150)-75;
i++;
}
star._visible = 0;
}
onClipEvent (enterFrame) {
i = 1;
while (num>=i) {
if ((mc._x == 0) || (mc._y == 0)) {
mc._x = random(100)+50;
mc._y = random(50)+25;
} else {
mc = this["star"+i];
mc.xAcc = mc.xAcc+((10-mc._x)*mc.rX);
mc.yAcc = mc.yAcc+((10-mc._y)*mc.rY);
mc._x = mc._x+mc.xAcc;
mc._y = mc._y+mc.yAcc;
}
i++;
}


Как видите, совсем короткий, но я не могу понять в чём проблема.

Спасибо за помощь!

Alex_beginner
07.06.2008, 17:29
Вот сделайте так функцию создания клипов:
while (num>=i) {
star.duplicateMovieClip("star"+i, i+1889);
mc = this["star"+i];
mc.rX = (random(5)+4)/1000;
mc.rY = (random(5)+4)/1000;
mc.xAcc = 0; //**********Обратите внимание на вот это****************
mc.yAcc = 0;
mc._x = random(300)-150;
mc._y = random(150)-75;
i++;
}

chingachgoog
07.06.2008, 17:30
посмотрите все переменные и названия мувиков.
8-ка чувствительна к регистру, т.е. если мувик назван (на линейке, к примеру) не star, а Star, то в 8-ке работать не будет.

Dizz
07.06.2008, 20:43
**********Обратите внимание на вот это************
Просто как всё гениальное. Я догадался им что-то в загрузке присвоить, но вставил ДО цикла. Эхе-хе...

СПАСИБО!!!

Dizz
09.06.2008, 15:09
А как же всё-таки общие подходы к адаптации?
И почему верхний вариант работал в 6 и не стал в 8?

chingachgoog
16.06.2008, 17:32
А как же всё-таки общие подходы к адаптации?
И почему верхний вариант работал в 6 и не стал в 8?


В 6-ке undefined.toString() будет равно пустой строке, т.е. ""
(переменная mc.xAcc не объявлена, потому в строковом виде равна "").

В 7-ке и выше undefined.toString() будет равно строке "undefined"
(переменная mc.xAcc не объявлена, потому в строковом виде равна "undefined").

AVM динамически приводит типы данных, поэтому ""+1=1,
а вот "undefined"+1, будет NaN, вместо, казалось бы очевидного, "undefined1" (такой результат даст выражение "undefined"+"1")