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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.11.2009, 15:49
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 1  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
По умолчанию Вызов методов основного класса приложения

У меня есть основной класс приложения с public методом.
Код AS3:
package mainparts {
 
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.SimpleButton;
import flash.events.MouseEvent;
 
import mainparts.menuparts.FieldPiece;
 
public class JobInterface extends MovieClip {
 
	private var buildingMenu:MovieClip;
 
	private var fieldPiece1:MovieClip;
	private var fieldPiece2:MovieClip;
 
	public function JobInterface() {
		addFields();
	};
 
	private function addFields():void {
		var field1:Sprite = new Sprite();
		var field2:Sprite = new Sprite();
 
		fieldPiece1 = new FieldPiece();
		fieldPiece2 = new FieldPiece();
 
		addChild(field1);
		addChild(field2);
 
		field1.addChild(fieldPiece1);
		field2.addChild(fieldPiece2);
	};
 
	public function addMenu():void {
		trace("3124235434654654766357865756");
	};
};
}
И есть класс, экземпляр которого является отображаемым внуком основного класса.
Код AS3:
package game.menuparts {
 
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
 
	import game.JobInterface;
 
	public class FieldPiece extends MovieClip {
 
		public function FieldPiece() {
			addEventListener(MouseEvent.MOUSE_DOWN, addBuildingMenu);
		};
 
		private function addBuildingMenu(e:MouseEvent):void {
			(parent as JobInterface).parent.addMenu();   //выдает ошибку
		};
 
	};
}
Пожалуйсто подскажите решение, у самого додуматься не получается.

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

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
нужно либо внуку передавать ссылку на метод, либо внук должен генерировать событие, которое должен слушать родитель и запускать нужный метод

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

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
parent не лишний ли поставили? плюс, парент кого у вас в обработчике?

(e.target.parent as JobInterface).addMenu();

Старый 26.11.2009, 16:29
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 4  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
если протрассировать:
- мой вариант:
Код AS3:
trace(parent.parent)
Output: [object JobInterface]

- ваш вариант
Код AS3:
trace(e.target.parent as JobInterface)
Output: null

Знач мой вариант правильнее, только вот когда
Код AS3:
trace((parent as JobInterface).parent.addMenu());
Выскакивает:
1061: Call to a possibly undefined method addMenu through a reference with static type flash.displayisplayObjectContainer.

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

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
если я не ошибаюсь то через парент нельзя вызывать пользовательские методы как в ас2, а ссылка точно работать будет

Старый 26.11.2009, 16:35
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 6  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Тогда еще вопрос (можете закидывать меня тухлыми яйцами и помидорами ): как внуку передать ссылку на прародителя?

Старый 26.11.2009, 16:40
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 7  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от dsQuadro Посмотреть сообщение
если я не ошибаюсь то через парент нельзя вызывать пользовательские методы
можно. Тип только нужно привести.

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

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
Код AS3:
var child = new Child(func);
 
public function func(){
 
}
Код AS3:
public class Child{
  private var parentMetod:Function
  public function Child(link:Function){
    this.parentMetod = link;
 
    parentMetod();
  }
}
2switcher!: даже если и можно то лучше так не делать... потому что количество предков может меняться...


Последний раз редактировалось dsQuadro; 26.11.2009 в 16:44.
Старый 26.11.2009, 16:53
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 9  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от dsQuadro Посмотреть сообщение
даже если и можно то лучше так не делать...
я в курсе

Старый 26.11.2009, 17:19
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 10  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Еще вопросики.
1) Почему лучше так не делать?

2) Обязательно ли link должен быть параметров конструктора, нельзя ли его использовать в качестве параметра для метода?

3) Я все таки решил генерировать событие, является ли такой подход лучшим среди трех?

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

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

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


 


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


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