PDA

Просмотр полной версии : перепись навигации под AS 2


Snut
19.09.2007, 23:56
Опять ломаю голову... вот имею следующий отличный AS1 код:

scrLeft.onRollOver = function() {
mc.onEnterFrame = function() {
mc._x += 20;
};
};


все вроде неплохо, но ведь пользователь по определению дурак и надо написать еще 4 идентичные функции на:
scrLeft.onPress
scrLeft.onRollOut
scrLeft.onReleaseOutside
scrLeft.onRelease

итого имеем для 1 кнопки навигации 25 строчек практически идентичного кода, помножим на 4 и получим 100 строк для 4 элементов навигации.

Универсальной функции написать так и не удалось, проблемы в основном со знаками +/-, может быть есть вызод сделать данный код более правильным... конечно я могу написать класс содержащий данные 100 строчек, но помоему это можно сократить. Да и использование onEnterFrame тоже насколько я понимаю начинает отжирать проц, что совсем не желательно. Наставьте на путь истины пожалуйста.

Mnilionic
20.09.2007, 00:12
для этого существуют циклы и ссылки на функции

DoLLPhin
20.09.2007, 00:21
если я правильно понял, для всех событий выполняется одна и таже функция, если верно, то можно написать код так:


scrLeft.onRollOver = scrLeft.onPress = scrLeft.onRollOut = scrLeft.onReleaseOutside = scrLeft.onRelease = function() {
mc.onEnterFrame = function() {
mc._x += 20;
};
};

etc
20.09.2007, 00:25
В AS2 не объявляют вложенные методы таким образом.
То, чем вы занимаетесь — переписывание одного AS1 кода в другой.

udaaff
20.09.2007, 00:26
Тема все таки "перепись навигации под AS 2"

sample.

usage:
this.attachMovie("id", "my_mc", this.getNextHighestDepth(), {param:-8});

class:
class MyClass extends MovieClip {
//
private var __param:Number;
private var __counter:Number;
//
public function MyClass() {
__counter = 0;
}
//
private function __onEnterFrame():Void {
//допусти выволняется какое-то действие, например
__counter += __param;
trace(__counter);
}
public function onRollOver():Void {
onEnterFrame = __onEnterFrame;
}
public function onRollOut():Void {
delete onEnterFrame;
__counter = 0;
}
public function onReleaseOutside():Void {
delete onEnterFrame;
__counter = 0;
}
//
public function set param(param:Number):Void {
__param = param;
}
}

Snut
20.09.2007, 03:50
Mnilionic, а чуть подробнее можно?
udaaff, а как можно обойти onEnterFrame? Вроде он проц сильно грузит...

iNils
20.09.2007, 04:35
Грузит не onEnterFrame, а его бездумное использование.

Snut
20.09.2007, 13:54
iNils, хорошо, но здесь то он вроде нормально используется

появилась еще одна маленькая идея... написать 2 Tweena. 1 для перемещения по х второй по y и соответственно помножив их на X которое меняется [-2000; 2000] и Y [-1000; 1000] и на роловерах и прочем менять только Х++ или Y++

Mr. Fixit
20.09.2007, 15:06
такое ощущение, что ты задаешь нам задание.

Snut
20.09.2007, 15:41
Mr. Fixit, никак нет!