Форум 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=85800)

CCCPirate 30.09.2006 15:59

Вызов метода класса
 
Когда нужно было вызвать метод класса при появлении объекта на сцене
не смог реализовать его таким образом:

Код:

class Smclass extends MovieClip {
        function Smfunc(name) {
                with (name) {
                       
                        _x++;
                }
        }
        function Smclass() {
                Smfunc(_root[_name]);
        }
}

Зато когда сделал так все стало работать:


Код:

class Smclass extends MovieClip {
        var intervalId;
        function Smfunc(name) {
                with (name) {
                        clearInterval(intervalId);
                        _x++;
                }
        }
        function Smclass() {
                intervalId = setInterval(Smfunc, 1, _root[_name]);
        }
}

Объясните пожалуйста почему?

Спасибо.

iNils 30.09.2006 16:34

У меня работает и тот и другой код, но я не понимаю что вы такое хитрое творите.

CCCPirate 30.09.2006 17:03

Цитата:

Сообщение от iNils
У меня работает и тот и другой код, но я не понимаю что вы такое хитрое творите.

Да некорректно я упростил свой код. но сечас постараюсь объяснить

дело в том что в игре я приаттачиваю объект класса к фильму
и передаю в него переменные

Код:

var smcl:Smclass = _root.attachMovie('clip', 'clip'+[_root.getNextHighestDepth()], _root.getNextHighestDepth());
smcl._x = coord.x;
smcl._y = coord.y;
smcl.param = someparam

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

так вот в первом случае она не передается:o

iNils 30.09.2006 17:18

Вложений: 1
Сделайте так.

CCCPirate 30.09.2006 17:42

Цитата:

Сообщение от iNils
Сделайте так.

Да и так тоже работает, а почему же не действует первый метод?

(всмысле почему не передавались параметры, если их не писать через {})

И почему это удавалось реализовать через setInterval?

iNils 30.09.2006 17:48

Потому, что вы инициализирует экземпляр, при этом вызываете метод, а свойство устанавливаете только потом. Когда же вы запустили метод через интервал, метод вызвался после определения свойства. В случаи с {}, экзамплер уже имеет при инициализации свойство.

CCCPirate 30.09.2006 17:56

Цитата:

Сообщение от iNils
Потому, что вы инициализирует экземпляр, при этом вызываете метод, а свойство устанавливаете только потом. Когда же вы запустили метод через интервал, метод вызвался после определения свойства. В случаи с {}, экзамплер уже имеет при инициализации свойство.

Блин. точно.

Че то я затупил... два дня понть не мог.

Спасибо огромное!:victory:

etc 30.09.2006 19:45

'clip'+[_root.getNextHighestDepth()] — что это такое?
И где здесь _name?
Код:

function Smclass() {
                Smfunc(_root[_name]);
        }


CCCPirate 30.09.2006 21:39

Цитата:

Сообщение от __etc
'clip'+[_root.getNextHighestDepth()] — что это такое?
И где здесь _name?
Код:

function Smclass() {
                Smfunc(_root[_name]);
        }


Непонял вопроса

'clip'+[_root.getNextHighestDepth()]-это позволяет называть объекты уникальным именем

Smfunc(_root[_name]);- это прередает методу класса параметр имени вызвавшего его объекта

Что непонятного?

etc 30.09.2006 23:11

а почему нельзя было вызвать Smfunc(this)?
А зачем складывать массив со строкой?


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

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