Просмотр полной версии : несколько функций в одном обработчике событий
Есть ли какая нибудь возможность записать несколько функций в один и тоже обработчик событий?
К примеру. Я записал функцию в event handler onEnterFrame мувиклипа mc
, можено ли еще приписать функцию в этот же event handler этого же мувика не перезаписывая старую?
Можно, но осторожно. Если вы допишете функцию, а потом еще раз допишете, а потом еще раз...
Что - то вроде
onEnterFrame = function(){ trace(1); }
//сохраним
oef = onEnterFrame;
//перепишем
onEnterFrame = function(){ oef(); trace(2); }
Это чревато. Удобнее пользоваться наборами:
function doSome(){
f1(); // ну просто какие-то функции
f2();
}
function doSomethingElse(){
f1(); // другой набор инструкций
f3();
}
onEnterFrame = soSome;
btn.onPress = function(){
onEnterFrame = doSomethingElse;
}
Извините, что коряво написано, просто принцип. И надо быть осторожным с областью видимости.
ни первое, ни второе не подходит к сожалению..
Сформулирую немного подругому... Работает 1 функция в onEnterFrame, если мы запихнем в него другой набор инструкций (1+2), то получается, что первая функция по новой вызовется... а хотелось бы, чтобы она не прерывалась, а просто начала вторая еще работать + к первой в этом же обработчике.
p.s. setInterval пожалуйста не предлагать, мне интересно именно про обработчики
да дело не в коде.. я еще не написал, то что задумал, потому что думаю как это лучше реализовать. Чета мне казалось просто что где то как то можно было вот так вот сделать...
Работает 1 функция в onEnterFrame, если мы запихнем в него другой набор инструкций (1+2), то получается, что первая функция по новой вызовется... а хотелось бы, чтобы она не прерывалась, а просто начала вторая еще работать + к первой в этом же обработчике.
Она не _работает_ onEnterFrame, а _срабатывает_ каждый кадр.
Можно включить функцию в оба набора:
function f1(){ trace(1); }
function f2(){ trace(22); }
function f3(){ trace(333); }
function f4(){ trace(4444); }
function do1(){
f1();
f2();
}
function do2(){
f1();
f3();
f4();
}
onEnterFrame = do1;
setTimeout(function(){ trace('---------'); delete onEnterFrame;}, 500);
setTimeout(function(){ trace('---------'); onEnterFrame = do2;}, 2000);
setTimeout(function(){ trace('---------'); delete onEnterFrame;}, 2200);
setTimeout(function(){ trace('---------'); onEnterFrame = do1;}, 4000);
setTimeout(function(){ trace('---------'); onEnterFrame = null;}, 4400);
я понимаю, что её можно включить хоть в десять наборов, но вызываться то она по новой будет, после перезаписи онинтерфрэйма, и все что в ней работало, соответственно, начнет работать с начала, а не продолжать функционировать, как будто бы ничего не произошло.
ни первое, ни второе не подходит к сожалению..
Сформулирую немного подругому... Работает 1 функция в onEnterFrame, если мы запихнем в него другой набор инструкций (1+2), то получается, что первая функция по новой вызовется... а хотелось бы, чтобы она не прерывалась, а просто начала вторая еще работать + к первой в этом же обработчике.Что то как то... я не понял. Что значит не прерывалась?
Самый простой способ, это создать массив методов и их аргументов и флаг запуска, и внутри onEnteFrame в цикле из прогонять. Так можно менять порядок их вызова, удалять, добавлять, аргументы, а через флаг запускать вызов или нет.
Что то как то... я не понял. Что значит не прерывалась?
я отвечал на пост кикассо, где он предложил использовать группы функций. То есть сгрупировать первыю со вротой, вторую с третьей. Если первыю группу работающую в онинтерфрэйме заменить второй, то вторая функция начнет работать "сначала".
Самый простой способ, это создать массив методов и их аргументов и флаг запуска, и внутри onEnteFrame в цикле из прогонять. Так можно менять порядок их вызова, удалять, добавлять, аргументы, а через флаг запускать вызов или нет. -- самый действенный вариант по всей видимости.
Извините, а где начало у функции?
к примеру.. работает счетчик i++ в функции
ты ее вызвал по новой счетчик соотвественно стал отсчитываться тоже по новой
Вы чуствуйте разницу между работает и срабатывает?
Функция именно срабатывает. В вашем случае каждый кадр.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.