Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Доступ к конкретному MovieClip из кода. (http://www.flasher.ru/forum/showthread.php?t=116295)

CrazyPHP 25.09.2008 17:13

Доступ к конкретному MovieClip из кода.
 
У меня проблема какая то странная вообще.

На сцене лежит 2 мувика, один player а другой cursor.
Для каждого прописан класс. И вот в коде класса для cursor я пишу:
Код:

trace(player.x);
а он мне выдаёт ошибку при тестинге:
Цитата:

1120: Access of undefined property player.
Я чёт не пойму как это у "player" не установлен параметр "x" ? Или как? Как вообще обратиться к мувику нахдящемуся на сцене из кода?

kackbip 25.09.2008 17:53

это значит что у cursor нет свойства player
Вы ведь из класса курсо обращаетесь.. а это равносильно this.player.x, где
this это cursor

теоретически к player можно обратиться так:
parent.player

CrazyPHP 25.09.2008 18:06

Попробавал:
Код:

trace(parent.player.name);
выдало опять ошибку:
Цитата:

1119: Access of possibly undefined property player through a reference with static type flash.display:DisplayObjectContainer.
и та же самая ошибка если делать через root.player.name, stage.player.name;

ничё не пойму, в примерах везде из классов обращаятся к мувикам на сцене прямо вот так: имя_клипа.свойство ; И у них всё работает .... вообще не пойму.

CrazyPHP 25.09.2008 18:57

Во ! нашёл способ ... через parent только немного не так... а вот так:
Код:

var player = parent.getChildByName("player");
и теперь player можно творить чё хочешь :D

flashmade 26.09.2008 18:03

Можно еще и так:
parent["player"].x

Только почему в данном случае не работает обычный доступ через точку.
Может кто знает?

mre 26.09.2008 18:11

Цитата:

Сообщение от flashmade (Сообщение 766606)
Можно еще и так:
parent["player"].x

Подобные конструкции крайне не желательны.
Цитата:

Сообщение от flashmade (Сообщение 766606)
Только почему в данном случае не работает обычный доступ через точку.
Может кто знает?

Потому что тип parent - DisplayObjectContainer, это не динамический класс, а свойство player - динамическое.
Можно использовать кастинг в MovieClip, который динамический, и все будет работать:
Код:

trace((parent as MovieClip).player.name);

flashmade 26.09.2008 18:24

Спасибо за объяснение с точкой.
а почему доступ через [] нежелателен?

mre 26.09.2008 18:34

Цитата:

Сообщение от flashmade (Сообщение 766615)
а почему доступ через [] нежелателен?

Я имел в виду, что обращение через parent не желательно.
Есть много причин.
При таком обращении переменная должна быть публичной, что уже не очень хорошо.
Сложный и запутанный код, не соответствующий грамотному ООП.
И вообще, если есть необходимость такого обращения - рассылайте события.

etc 26.09.2008 18:34

Цитата:

Сообщение от flashmade (Сообщение 766615)
а почему доступ через [] нежелателен?

Нетипизированный доступ к некоторому свойству у объекта, у которого оно не описано. Каст в MovieClip тоже не сильно лучше.

mre 26.09.2008 18:37

Цитата:

Сообщение от __etc (Сообщение 766618)
Нетипизированный доступ к некоторому свойству у объекта, у которого оно не описано.

+1
Цитата:

Сообщение от __etc (Сообщение 766618)
Каст в MovieClip тоже не сильно лучше.

Однозначно.


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

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