Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вызов функции из функции (http://www.flasher.ru/forum/showthread.php?t=155338)

Ylik 03.05.2011 00:35

Вызов функции из функции
 
Здравствуйте! В очередной раз обращаюсь сюда за помощью.
Помогите, пожалуйста снова решить проблему!
Пытаюсь из одной функции вызвать другую функцию, но выходит ошибка
1136: Incorrect number of arguments. Expected 1.

Код AS3:

public function func1(e:MouseEvent):void {
                        .........
                        if (.........) {
                                func2();
                                }
                }
 
                public function func2(e:MouseEvent):void {
                        .........
                }

Мне кажется, здесь что-то несложное, но мне пока не удалось найти правильный ответ.
Очень благодарю за внимание к моему вопросу!!! :)

КорДум 03.05.2011 00:46

Код AS3:

func2(null);


Ylik 03.05.2011 00:54

Спасибо большое!!! Наконец-то нашлось решение!!! :) :) :)
Только если эту функцию вызвать по условию, то почему-то она не выполняется. :(
Я тут вот уже пыталась это выяснить: http://www.flasher.ru/forum/showthread.php?t=155322
Здесь то же самое, почему-то не работает
Код AS3:

if (mc.mc1.currentFrame==mc.mc1.totalFrames) {
        func2(null);
}

:(

КорДум 03.05.2011 00:56

Логично предположить, что не выполняется условие. Вы должны проверять по enterFrame в каждом кадре его, а не по клику (или что у вас там).

Ylik 03.05.2011 00:59

Я там тоже писала, что трейс выводит 75 и 75 (текущий и конечный кадры), то есть получается, что до конечного кадра анимация доходит, но условие тем не менее всё-равно не выполняется...
Ужас, я даже не представляю в чём здесь дело. :(

КорДум 03.05.2011 01:01

К сожалению, я тоже *разводит руками* Все должно работать, если оно так.

Цветкофф 03.05.2011 01:02

Цитата:

Сообщение от КорДум (Сообщение 993415)
Логично предположить

Логично предположить что func2 на входе имеет MouseEvent так почему бы не передавать ему не null а передавать e, то есть
Код AS3:

public function func1(e:MouseEvent):void {
                        .........
                        if (.........) {
                                func2(e);
                                }
                }
 
                public function func2(e:MouseEvent):void {
                        .........
                }

это более логично

Ylik 03.05.2011 01:04

И такой и первый вариант работают, если не по условию запускать.

КорДум 03.05.2011 01:05

Цветкофф, а если не надо его передавать? И зачем вы выдернули эти два слова из контекста?

Цветкофф 03.05.2011 01:07

что значит не надо? func2(e:MouseEvent) на входе имеет СобытиеМыши значит и пеередать туда надо событие мыши
если машина имеет на входе 98-ой бензин, а вы ей даёте на вход ДТ она веть не поедет

КорДум 03.05.2011 01:08

Вы так уверенно говорите, потому что знаете, ЧТО находится в этом методе? Я вот не знаю.

Цветкофф 03.05.2011 01:11

та мне по барабану что там в методе, Я вижу что метод имеет на входе

КорДум 03.05.2011 01:14

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

Цветкофф 03.05.2011 01:21

а ваш совет породит неосознанный копиПаст, так как топикстартеру никто не объяснил почему именно null надо передать, и в дальнейшем породит кучу подобных вопросов

КорДум 03.05.2011 01:25

Вместо того, чтобы тут впустую дискутировать, взяли бы да написали возможные варианты аргумента. Только не мне, естественно.
null, e, new MouseEvent("someType"), new MyCustomMouseEvent("mySomeType"), ссылка на какой-то другой экземпляр класса MouseEvent, вариантов масса.

Ylik 03.05.2011 01:27

Спасибо огромнейшее ещё раз за помощь!!! Я прям не нарадуюсь на этот форум!!! :yahoo:

КорДум 03.05.2011 01:28

Поделитесь, почему не работало-то?

Ylik 03.05.2011 01:31

Нет, условие до сих пор не работает.
А просто вызов функции из другой функции работает.

Цветкофф 03.05.2011 01:41

Цитата:

Сообщение от Ylik (Сообщение 993434)
Нет, условие до сих пор не работает.

вам же писали, используйте ENTER_FRAME
Код AS3:

stage.addEventListener(Event.ENTER_FRAME, func1);
function func1(e:Event):void
{
        if (mc.mc1.currentFrame == mc.mc1.totalFrames)
        {
                func2(e);
                stage.removeEventListener(Event.ENTER_FRAME, func1);
        }
}
 
function func2(e:Event):void
{
        trace('последний кадр');
}


Ylik 03.05.2011 01:43

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

Цветкофф 03.05.2011 01:46

Код AS3:

stage.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void{
        stage.addEventListener(Event.ENTER_FRAME, func1);
}
function func1(e:Event):void
{
        if (mc.mc1.currentFrame == mc.mc1.totalFrames)
        {
                func2(e);
                stage.removeEventListener(Event.ENTER_FRAME, func1);
        }
}
function func2(e:Event):void
{
        trace('последний кадр');
}

как то так
или ещё можно используя таймер
Код AS3:

stage.addEventListener(MouseEvent.CLICK, onClick);
var t:Timer = new Timer(50,0);
t.addEventListener(TimerEvent.TIMER, func1);
 
function onClick(e:Event):void{
        t.start();
}
function func1(e:Event):void
{
        if (mc.mc1.currentFrame == mc.mc1.totalFrames)
        {
                func2(e);
                t.stop();
        }
}
function func2(e:Event):void
{
        trace('последний кадр');
}


Ylik 03.05.2011 01:47

Хм... сейчас попробуем. :)

Добавлено через 17 минут
О, уже что-то! :)
Но пока всё-равно кое-что неправильно работает.
Всё прекрасно работает, если не пытаться нажать что-нибудь до того, как произойдёт:
Код AS3:

stage.removeEventListener(Event.ENTER_FRAME, func1);

А после опять всё нормально.
А вот если я нажимаю какую-нибудь кнопку с вызовом другой функции во время
Код AS3:

stage.addEventListener(Event.ENTER_FRAME, func1);

ДО его удаления, то другие функции не работают.

Цветкофф 03.05.2011 02:07

удалите эту строку, Я вам идею выдал, далее развивайте сами)

Ylik 03.05.2011 02:11

Но тем не менее огромное вам спасибо ещё раз!!! :yahoo:
Эта тема всё-равно потихоньку сдвинулась с места, попробую разобраться ещё.
Если что, вернусь опять сюда. =)))

Добавлено через 8 минут
Всё, вроде разобралась, куда вставить
Код AS3:

stage.removeEventListener(Event.ENTER_FRAME, func1);

:)

inozemcev 03.05.2011 20:28

Я вообще не понимаю чего вы пытаетесь добиться ?

Как то странно используете слушатель события мыши. Скорее всего вам нужно в самом листенере проверку делать. Опешите задачу точнее.


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

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