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

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

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

Регистрация: Sep 2007
Сообщений: 43
Question Как вызвать метод объекта из другого объекта?

Не получается обратиться к объекту в parent.

Document class
Код:
package {
	import flash.display.Sprite;
	
	public class myRoot extends Sprite{
		public function myRoot(){
			var objA:aClass = new aClass();
			objA.name="objA";
			addChild(objA);
			var objB:bClass = new bClass();
			objB.name="objB";
			addChild(objB);
		}
	}
}
aClass.as
Код:
package {
	import flash.display.Sprite;
	
	public class aClass extends Sprite{
		var myProperty:Object = "A";
		public function aClass(){
			trace("A_object = " + myProperty);
		}
		public function changeParam(newData:String){
			trace("A.myProperty = "+ newData);			
		}
	}
}
bClass.as
Код:
package {
	import flash.display.Sprite;
	
	public class bClass extends Sprite{
		var myProperty:String = "B";
		public function bClass(){
			parent.getChildAt(0).changeParam(myProperty);
		}
	}
}
В этой строке вся загвоздка: parent.getChildAt(0).changeParam(myProperty);
что я неправильно делаю?

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

Регистрация: Sep 2002
Сообщений: 30,787
Неправильно называете классы. Для начала.
А во-вторых, у DisplayObject нет метода changeParam. Необходимо привести полученный спрайт к aClass, т.е. сделать кастинг.

Старый 09.10.2007, 13:29
AlexeiSulga вне форума Посмотреть профиль Отправить личное сообщение для AlexeiSulga Найти все сообщения от AlexeiSulga
  № 3  
Ответить с цитированием
AlexeiSulga

Регистрация: Sep 2007
Сообщений: 43
__etc, спасибо... Про названия классов я вкурсе. Essential ActionScript 3.0 уже в пути с амазона.

Сам я дизайнер, пытаюсь перейти с AS1 на AS3. До изучения кастинга еще не дошел. Проблема в том, что даже trace(parent.getChildAt(0)); возврашает null

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

Регистрация: Sep 2002
Сообщений: 30,787
А потому что на момент вызова конструктора, parent ещё не обозначен.
addChild происходит позже.

Старый 09.10.2007, 17:01
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 5  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Чтобы было понятней:
ты делаешь:
var objB:bClass = new bClass(); <-- вызываеться конструктор bClass().
В этом конструкторе ты делаешь:
parent.getChildAt(0).changeParam(myProperty);
но parent появляеться только тогда, когда ты делаешь:
addChild(objB);

Старый 09.10.2007, 23:38
AlexeiSulga вне форума Посмотреть профиль Отправить личное сообщение для AlexeiSulga Найти все сообщения от AlexeiSulga
  № 6  
Ответить с цитированием
AlexeiSulga

Регистрация: Sep 2007
Сообщений: 43
Тоесть получается что при компиляции swf сперва обрабатываются конструкторы всех классов, а только потом появляется display object. Не подскажите где в хелпе об этом можно подробнее прочитать?

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

Регистрация: Sep 2002
Сообщений: 30,787
Конструктор — это функция. Она выполняется, когда вы пишете new. После её выполнения уже происходит дальнейшее выполнение кода, appendChild и т.д.

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

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

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


 


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


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