Просмотр полной версии : принцип работы onEnterFrame
willis83
30.05.2008, 21:35
Доброе время суток.
У меня такая проблема: Есть мувик(навороченная менюха), в ней несколько слоёв, в каждом слое по несколько мувиков, все с кодам и т.п.. onEnterFrame у меня вызывается из нескольких слоёв, но почему то работает он только в том слое который находится ниже других остальных(я их менял местами). Я так понимаю что выход тут в том чтобы просто сделать одну большую функцию которая объеденит в себе другие маленьких которые я вызываю через энтерфрэйм. Или может можно как-нибудь вызывать его с перечислением всех функций которые он должен запустить на исполнение?
BBOY Ильич
30.05.2008, 21:43
Возможно потому, что вы вешаете энтерфрейм несколько раз на один и тот же мувик, что делать запрещено.
Может вы одному и тому же клипу назначаете много onEnterFrame с разными задачами, а не каждому свой onEnterFrame?
PS: когда я писал это сообщение, ответа BBOY Ильича еще не было )
willis83
30.05.2008, 21:59
упс.... дело в том что в приницпе они в разных слоях, но програмно все энетерфрэймы находятся в рут. Так не будет работать?
А можно сделать что-то вроде:
onEnterFrame=func1,func2,....;
?????
BBOY Ильич
30.05.2008, 22:00
Не будет
Создайте новый слой для скрипта и назначте каждому клипу свое дело.
mc1.onEnterFrame = function(){
//тра-ля-ля
}
mc2.onEnterFrame = function(){
//тыц-тыц
}
willis83
30.05.2008, 22:28
спасибо.... перетращивать только придётся весь мув.... буду знать теперь
dmitriev
31.05.2008, 17:08
Если уж очень охота, то можно и так:
onEnterFrame = function ()
{
function1();
function2();
}
Решение №1: использовать класс mх.transitions.Tween, подисаться на onMotionChanged и в нем анимировать что угодно.
Решение №2: конвеер. Т.е. имитируем работу твина без "излишеств" и вызываем нужные функции с определенным промежутком времени.
Простенький пример:
var conv:Object = {
funcs:[],
addFunc:function(s:Function, o:Object, args:Array):Void {
this.funcs.push({fn:s, ob:o, ag:args});
},
removeFunc:function(s:Function, o:Object):Function {
var i = this.funcs.length;
while(i--){
if(this.funcs[i].fn != s) continue;
return this.funcs.splice(i, 1)[0];
}
},
listFunc:function():Void {
var i = this.funcs.length;
while(i--){
this.funcs[i].fn.apply(this.funcs[i].ob, this.funcs[i].ag);
}
}
}
function a():Void {
trace('A');
}
function b(c:String, d:Number):Void {
trace('B: '+c+' : '+d);
}
conv.addFunc(a, this);
conv.addFunc(b, this, ['Hi', 253]);
onEnterFrame = function():Void {
conv.listFunc();
}
onMouseDown = function():Void {
conv.removeFunc(a, this);
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.