Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   несколько функций в одном обработчике событий (http://www.flasher.ru/forum/showthread.php?t=98593)

udaaff 17.07.2007 03:36

несколько функций в одном обработчике событий
 
Есть ли какая нибудь возможность записать несколько функций в один и тоже обработчик событий?
К примеру. Я записал функцию в event handler onEnterFrame мувиклипа mc
, можено ли еще приписать функцию в этот же event handler этого же мувика не перезаписывая старую?

Kikasso 17.07.2007 04:11

Можно, но осторожно. Если вы допишете функцию, а потом еще раз допишете, а потом еще раз...
Что - то вроде
Код:

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;
}

Извините, что коряво написано, просто принцип. И надо быть осторожным с областью видимости.

udaaff 17.07.2007 04:28

ни первое, ни второе не подходит к сожалению..
Сформулирую немного подругому... Работает 1 функция в onEnterFrame, если мы запихнем в него другой набор инструкций (1+2), то получается, что первая функция по новой вызовется... а хотелось бы, чтобы она не прерывалась, а просто начала вторая еще работать + к первой в этом же обработчике.

p.s. setInterval пожалуйста не предлагать, мне интересно именно про обработчики

Kikasso 17.07.2007 04:33

код покажите.

udaaff 17.07.2007 04:37

да дело не в коде.. я еще не написал, то что задумал, потому что думаю как это лучше реализовать. Чета мне казалось просто что где то как то можно было вот так вот сделать...

Kikasso 17.07.2007 04:50

Цитата:

Сообщение от udaaff
Работает 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);


udaaff 17.07.2007 04:56

я понимаю, что её можно включить хоть в десять наборов, но вызываться то она по новой будет, после перезаписи онинтерфрэйма, и все что в ней работало, соответственно, начнет работать с начала, а не продолжать функционировать, как будто бы ничего не произошло.

iNils 17.07.2007 04:56

Цитата:

Сообщение от udaaff
ни первое, ни второе не подходит к сожалению..
Сформулирую немного подругому... Работает 1 функция в onEnterFrame, если мы запихнем в него другой набор инструкций (1+2), то получается, что первая функция по новой вызовется... а хотелось бы, чтобы она не прерывалась, а просто начала вторая еще работать + к первой в этом же обработчике.

Что то как то... я не понял. Что значит не прерывалась?

Самый простой способ, это создать массив методов и их аргументов и флаг запуска, и внутри onEnteFrame в цикле из прогонять. Так можно менять порядок их вызова, удалять, добавлять, аргументы, а через флаг запускать вызов или нет.

udaaff 17.07.2007 05:06

Цитата:

Что то как то... я не понял. Что значит не прерывалась?
я отвечал на пост кикассо, где он предложил использовать группы функций. То есть сгрупировать первыю со вротой, вторую с третьей. Если первыю группу работающую в онинтерфрэйме заменить второй, то вторая функция начнет работать "сначала".

Цитата:

Самый простой способ, это создать массив методов и их аргументов и флаг запуска, и внутри onEnteFrame в цикле из прогонять. Так можно менять порядок их вызова, удалять, добавлять, аргументы, а через флаг запускать вызов или нет.
-- самый действенный вариант по всей видимости.

Kikasso 17.07.2007 05:09

Извините, а где начало у функции?


Часовой пояс GMT +4, время: 15:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.