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

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

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

Регистрация: Feb 2007
Сообщений: 264
По умолчанию Компилятор не видит объект.

Первый пример.
Класс:
Код:
class Test {
    public function onPres():Void {
        trace(this);
    }
}
Код в swf:
Код:
var test:Test = new Test();
mc.onPress = test.onPres;
Нажимаем и получаем в трэйсе _level0.mc

Далее.
Класс:
Код:
class Test {
    public function onPres():Void {
        trace(this._x);
    }
}
Компилируем и получаем сообщение об ошибке следующего содержания:
Цитата:
There is no property with the name '_x'. trace(this._x);
Т.е мувиклип в метод передается, но попытка получить доступ к его свойствам вызывает ошибку компиляции. У меня такое подозрение, что компилятору нужно явно указать что в метод передается именно объект типа MovieClip, чтобы он мог спокойно работать с его свойствами. А если явно не указывать, то фактически неизвестно с каким объектом будет идти работа( это определится только при вызове метода). Можно ли как-то обойти это ограничение?

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Способ 1:
Код:
class Test {
	private var _x:Number;
	function Test () {
		
	}
	public function onPres():Void {
		trace (this._x)
	}
}
Способ 2:
Код:
class Test {
	function Test () {
		
	}
	
	public function onPres():Void {
		trace (this["_x"])        
	}
}
Способ 3 (самый правильный):
Код:
class Test {
	private var __mc:MovieClip;
	function Test (mc:MovieClip) {
		__mc = mc;
	}
	
	public function onPres():Void {
		trace(__mc._x);
	}
}
Код:
import mx.utils.Delegate;
var test:Test = new Test(mc);
mc.onPress = Delegate.create (test, test.onPres);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Sep 2002
Сообщений: 30,787
А что помешало метод так и назвать onPress, не убирая последнюю букву?
Никаких объектов в метод не передается, просто у метода изменяется область видимости на область видимости клипа mc, поэтому this ссылается уже не на экземпляр класса, а на клип. Но компилятор об этом ничего не знает, более того, в целом такой подход в принципе неверный.

Старый 08.07.2007, 17:09
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 4  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
iNils
Спасибо. Целых три способа.

__etc
Изменил название чтобы методы не повторялись, но если и так работает не буду менять.

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

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

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


 


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


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