Форум 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)
-   -   Метод выдаёт undefined (http://www.flasher.ru/forum/showthread.php?t=112563)

Dr.XxX 01.06.2008 17:34

Метод выдаёт undefined
 
У меня есть класс :
Код:

class Curs extends MovieClip {
        private var onEnterFrame:Function;
        public function Curs() {
                onEnterFrame = moveCurs;
        }
        public function moveCurs(x:Number,y:Number,z:Number):Void {
                  _y = _root._xmouse;
                  _x = _root._ymouse;
                  trace(x);
                  trace(y);
                  trace(z);
        }
}

И когда я в самом сценарии запускаю метод
moveCurs(1,2,3);
Мне в Output'e постоянно выдаёт undefined.
Почему так происходит ?

iNils 01.06.2008 17:37

Это onEnterFrame так делает, прямой вызов выведет 1, 2, 3

Dr.XxX 01.06.2008 17:52

А почему тогда он не видит, переменные которые были заданы в методе ?
Вот :
Код:

  public function moveCurs(x:Number,y:Number,z:Number):Void {
                  _y = x;
                  _x = _root._ymouse;
                  x++;
                  trace(x);
                  trace(y);
                  trace(z);
        }

moveCurs(10,10,10);
Сначало он(Объект) встаёт на положение 11 и всё, дальше стоп.

iNils 01.06.2008 17:59

onEnterFrame не передает аргументы.
Если хотите с аргументами, то создаете у себя такой класс (надеюсь знаете, что для пакетов надо создать папки):
Код:

/**
* Класс ru.inils.framework.Delegate, модифицированный mx.utils.Delegate. Выполнение функции в заданной области видимости с передачей аргументов.
*
* @author        iNils
* @version        1.2
* @see                mx.utils.Delegate
* Изменения:
*        1.2 (xx.xx.07)
*        [*]        Переехал из пакета ru.inils.util.Delegate
*
*        1.1 (xx.xx.07)
*        [+]        Добавлена возможность передавать аргументы "родного" метода
*
*        1.0 (xx.xx.06)
*/

class ru.inils.framework.Delegate {
        /**
        * Метод, передает событие в заданную область видимость и в заданный метод.
        *
        * @usage                        public static create (obj:Object, func:Function, arg:Array) : Function
        * @param        obj                Object - Объект, заданная область видимости.
        * @param        func        Function - Метод, обработчик события.
        * @param        arg                Array [дополнительный параметр] - Массив передаваемых аргументов, замещающий аргументы передаваемые "родным" событием. По умолчанию возращаются аргументы переданный при вызове "родного" события.
        * @return  Function        - Функция обработчик.
        */
        public static function create (obj:Object, func:Function, arg:Array):Function {
                var f = function () {
                        var targetTemp:Object = arguments.callee.target;
                        var funcTemp:Function = arguments.callee.func;
                        var argTemp:Array = null;
                        if (arguments.callee.arg) {
                                argTemp = arguments.callee.arg;
                        } else {
                                argTemp = arguments;
                        }
                        return funcTemp.apply (targetTemp, argTemp);
                };
                f.target = obj;
                f.func = func;
                f.arg = arg;
                return f;
        }
}

Импортируете его в свой класс, а вызов делаете так:
Код:

onEnterFrame = Delegate.create (this, moveCurs, [1,2,3]);

Dr.XxX 01.06.2008 18:14

Спасибо.

А, чтобы moveCurs(); заработал, как надо, тогда надо x,y,z объявить заранее ?
Код:

private var x:Number = 10;
private var y:Number = 10;
private var z:Number = 10;


iNils 01.06.2008 18:16

Значения задаются в конструкторе, а не при объявлении.

Dr.XxX 01.06.2008 18:50

спасибо


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

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