Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.06.2007, 04:15
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 1  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
По умолчанию AS2, mtasc и this.

Здравствуйте!

Вот не могу понять такую вещь. Во FlashIDE для того чтобы узнать где я нахожусь (в каком объекте), например для трассирования я делал такую команду

trace("This "+this);

И мне показывался полный путь до текущего объекта.


При компиляции через mtasc я тоже пытаюсь определить путь, например с помощью трассировки через flashout такой командой

Flashout.info("This "+this);

и где бы не дал эту команду, в логе получаю

This [object Object]


Что делаю не так, и как можно узнать путь до текущего объекта, в котором выполняется код?
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 25.06.2007, 04:26
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
this указывает на текущую область видимости, это может быть не только мувиклип, но и любой другой объект. В том же IDE можно получить [object Object]
Код:
function a () {
	trace (this);
}
o = {};
o.b = function () {
	trace (this);
};
a ();
o.b ();
В вашем случаи this вызывается не из мувиклипа.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 25.06.2007, 05:44
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 3  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Можно добавить, что trace() неявно вызывает метод toString():
Код:
function whois() {trace (this);}
o = {};
o1 = {};
o1.toString = function(){ return "it's me, your object";}
o.whois = o1.whois = whois;
whois(); //_level0
o.whois(); //[object Object]
o1.whois(); //it's me, your object

Старый 25.06.2007, 10:32
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Да вполне явно он его вызывает.
toString() у MovieClip возвращает путь к клипу. Там же _target и targetPath.

Старый 30.06.2007, 03:41
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 5  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Цитата:
Сообщение от iNils
В вашем случаи this вызывается не из мувиклипа.
А вот я попробовал сделать так

Код:
class gamerender extends MovieClip
{

 function gamerender () {
   Flashout.info("Gamerender constructor, this "+this);   
   this.gameinit();
 }

 function gameinit()
  {
   Flashout.info("Gameinit start, this "+this);
  }
}
и подключаю этот класс так

Код:
var gamerenderinstance:gamerender=new gamerender();
В логе все так же имею

Код:
Gamerender constructor, this [object Object]
Gameinit start, this [object Object]

Почему снова нет пути в this? Класс gamerender - это же теперь полноценный мувиклип.

Еще вопрос - а почему вообще работает вызов this.gameinit()? По идее, если this не содержит путь к объекту, то как может вызваться его метод? Тут должна быть ошибка, а ее нет.


Вообще, меня интересует, как писать классы - производные от MovieClip, чтобы в их коде можно было свободно пользоваться this, и this содержал осмысленное значение. Пожалуйста, дайте примерчик такого класса, и кода который делает инстанс этого класса в виде клипа.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 30.06.2007, 12:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Названия классов должны начинаться с прописной (заглавной) буквы, ни больше, ни меньше.

MovieClip не создается через конструктор, клипы с классом создаются через attachMovie. Так что был создан объект, но это не MovieClip.

Про «если this не содержит путь к объекту, то как может вызваться его метод?» ничего не понял.

з.Ы. Есть ещё методы создания клипа без создания мувика в библиотеке, например у меня для этого есть класс McFactory (можно найти на форуме). Но это не очень хорошее решение.

Старый 01.07.2007, 02:40
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 7  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Цитата:
Сообщение от __etc
Названия классов должны начинаться с прописной (заглавной) буквы, ни больше, ни меньше.

MovieClip не создается через конструктор, клипы с классом создаются через attachMovie. Так что был создан объект, но это не MovieClip.
Названия классов и файлов переделал.

Подключение Gamerender теперь делаю так

Код:
class Application 
{
  private var scopeRef:MovieClip;
         
  function Application(scope:MovieClip) 
   {
    scopeRef = scope;

    var gamerenderinstance:Gamerender=new Gamerender();
    scopeRef.attachMovie("gamerenderinstance","gamerenderins");
    scopeRef.gamerenderins.printthis();
  }

  static function main() 
   {                
    var appinstance:Application = new Application(_root);
   }
}
В классе Gamerender метод printthis() такой

Код:
class Gamerender extends MovieClip
{

 function Gamerender () {
   Flashout.info("Gamerender constructor, this "+this);   
   this.gameinit();
 }

 function gameinit()
  {
   Flashout.info("Gameinit start, this "+this);
  }

 function printthis()
  {
   Flashout.info("Gamerender print this "+this);
  } 

}

Все это компилится без ошибок. Но! Судя по логу, вызова метода printthis() не происходит. Лог такой

Gamerender constructor, this [object Object]
Gameinit start, this [object Object]

а "Gamerender print this ..." нету. То есть ничего с приаттаченыйм мувиком сделать не могу. Чего еще я не учел? Какой всеже правильный код подключения класса как мувика?

PS: Да, приписал методу printthis ключевое слово public. Ничего не изменилось, он всеравно не вызывается.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru


Последний раз редактировалось xintrea; 01.07.2007 в 02:53.
Старый 01.07.2007, 02:54
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
OMG, купите уже книгу по AS2, господи…
Ещё раз: экземпляры-наследники MovieClip НЕ создаются оператором new, ВООБЩЕ. Вы ничего не поняли, совершенно. Откройте хелп, прочитайте про то, как прописывать класс и linkage для мувиклипа в библиотеке и как создавать экземпляры таких клипов. Ей богу. Если не сработал attachMovie, значит клипа с linkage равным gamerenderinstance в либе нет, либо на этот клип не прописан соответствующий класс. А строка с new вообще не рабочая.

Старый 01.07.2007, 22:36
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 9  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Цитата:
Сообщение от __etc
OMG, купите уже книгу по AS2, господи…
Ещё раз: экземпляры-наследники MovieClip НЕ создаются оператором new, ВООБЩЕ. А строка с new вообще не рабочая.
Тогда должна же быть ошибка при компиляции, или на хуйдой конец во время исполнения swf-плейер должен popup-окно вываливать чтоли с ошибкой. ...Ну это так, про юзабельность... Кроме того, срабатывают конструкторы, они же в каком-то контексте выполняются... И при этом экземляр не создается. Как-то грустно это.


Цитата:
Сообщение от __etc
Вы ничего не поняли, совершенно. Откройте хелп, прочитайте про то, как прописывать класс и linkage для мувиклипа в библиотеке и как создавать экземпляры таких клипов.
Как это делать в Flash IDE я знаю. Точнее, я знаю как связывать конкретный мувиклип с конкретным классом. Причем знаю как это сделать в AS1 стиле и в AS2 стиле с назначением класса. Но нужно не это. Нужно мне понять, как любой класс связать с мувиком-заготовкой? Вот здесь http://www.flasher.ru/forum/showpost...06&postcount=4 вы написали "в библитеке должен быть пустой мувик с идентификатором и назначенным классом PicFlower". А если классов много? Это что, для каждого класса нужно мышой во Flash IDE создавать мувик-пустышку, и в его свойствах прописывать принадлежность к данному классу? Сколько классов, столько и мувиков-пустышек должно быть?

Хочется просто кодом (без IDE, и без хаков) создавать классы наследователи мувиклипа. Пускай имея один (!) мувик в качестве заготовки. Но создавать классы в любом необходимом количестве. Это невозможно?
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 01.07.2007, 22:59
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от xintrea
Тогда должна же быть ошибка при компиляции, или на хуйдой конец во время исполнения swf-плейер должен popup-окно вываливать чтоли с ошибкой. ...Ну это так, про юзабельность... Кроме того, срабатывают конструкторы, они же в каком-то контексте выполняются... И при этом экземляр не создается. Как-то грустно это.
Окошко будет в AS3. Но там клипы через конструктор создаются.



Цитата:
Сообщение от xintrea
Как это делать в Flash IDE я знаю. Точнее, я знаю как связывать конкретный мувиклип с конкретным классом. Причем знаю как это сделать в AS1 стиле и в AS2 стиле с назначением класса. Но нужно не это. Нужно мне понять, как любой класс связать с мувиком-заготовкой? Вот здесь http://www.flasher.ru/forum/showpost...06&postcount=4 вы написали "в библитеке должен быть пустой мувик с идентификатором и назначенным классом PicFlower". А если классов много? Это что, для каждого класса нужно мышой во Flash IDE создавать мувик-пустышку, и в его свойствах прописывать принадлежность к данному классу? Сколько классов, столько и мувиков-пустышек должно быть?

Хочется просто кодом (без IDE, и без хаков) создавать классы наследователи мувиклипа. Пускай имея один (!) мувик в качестве заготовки. Но создавать классы в любом необходимом количестве. Это невозможно?
Да, официально — клип-пустышку. Если хочется без пустышки, то можно хаком.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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