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

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

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

Регистрация: May 2009
Сообщений: 134
По умолчанию Передача события в главный класс

ЗДравствуйте, уважаемые программисты.

Задам наверно глупый вопрос. Но у Мука я не могу найти ответ.... может не там ищу, конечно, тогда буду рада подсказке )

В общем есть проект, состоящий из главного класса, в нем созданы дети-контейнеры (типа Sprite), в которых также созданы другие дети (например кнопки навгации для переходов между сценами).

Переменная, которая отслеживает на какой сцене находимся сидит в главном классе.... или нет?

И вот вопрос:
Как мне передать в главный класс событие нажатия кнопки? Через события? В контейнере я могу отловить это события - он родитель, а главный класс все-таки дедушка..... не выходит.....
Может есть какие-то классические варианты и совсем не связанные с событиями?

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

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Посмотрите в хелпе по ключевому слову bubbles
__________________
Дело не в тебе

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

Регистрация: May 2009
Сообщений: 134
Спасибо. Пытаюсь вникнуть, про фазы событий уже давно читала, но вот как их применить на практике - пока не додумалась.....

Старый 17.05.2009, 10:40
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 4  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от kaetano Посмотреть сообщение
ЗДравствуйте, уважаемые программисты.

И вот вопрос:
Как мне передать в главный класс событие нажатия кнопки? Через события? В контейнере я могу отловить это события - он родитель, а главный класс все-таки дедушка..... не выходит.....
Может есть какие-то классические варианты и совсем не связанные с событиями?
Можно генерить событие на stage, он для всех один.
Например имеем класс для SimpleButton которые раскиданы по сцене
Код AS3:
//SimButton
package{
	import flash.display.*
	import flash.events.*;
	import flash.text.*;
	import lex.*;
	public class SimButton extends SimpleButton{
			public var label:String;
		public function SimButton(){
			addEventListener(MouseEvent.CLICK, mouseClickHandler);
		}
 
		private function mouseClickHandler(evt:MouseEvent):void{
			stage.dispatchEvent(new LexEvent(LexEvent.SIM_BTN_CLICK, {btn:this}));
		}
 
		public function changeLabel(_label:String):void{
			label = _label;
			((upState as DisplayObjectContainer).getChildAt(1) as TextField).text = _label;
			((downState as DisplayObjectContainer).getChildAt(1) as TextField).text = _label;
			((overState as DisplayObjectContainer).getChildAt(1) as TextField).text = _label;
		}
	}
}
Есть так-же класс для собитий, взят с www.flasher.ru
Код AS3:
package lex{
 
	import flash.events.Event;
 
	public class LexEvent extends Event {
 
		//public static const OBJ_SELECT:String = "objSelect";
		public static const SIM_BTN_CLICK:String = "simBtnClick";
 
		public var params:Object;
 
		public function LexEvent($type:String, $params:Object, $bubbles:Boolean = false, $cancelable:Boolean = false ) {
			super( $type, $bubbles, $cancelable );
			this.params = $params;
		}
 
		public override function toString():String {
			return formatToString("CustomEvent","params","type","bubbles","cancelable");
		}
	}
}
В параметре params можно передать любой объект. Докуумент класс такой
Код AS3:
//DocEventCustom
package{
	import flash.display.*
	import flash.events.*;
	import flash.text.*;
	import lex.*;
 
	public class DocEventCustom extends Sprite {
		private var labelArr:Array = ["один","два","три","четыре","пять","шесть","семь"],
		obj:Object;
		public function DocEventCustom(){
			var i:int, j:int;
			for (i=0; i<this.numChildren; i++) {
				obj = this.getChildAt(i);
				if (obj.toString()=='[object SimButton]') {
					obj.changeLabel(labelArr[j]);
					j++;
					if (j > labelArr.length) break;
				}
			}
			stage.addEventListener(LexEvent.SIM_BTN_CLICK, simBtnClickHandler);
		}
 
		private function simBtnClickHandler(evt:LexEvent):void{
			obj = evt.params.btn;
			trace(obj.label);
		}
	}
}
Теперь кликая на кнопочки расположенные на рабочем поле можно в трасе наблюдать да хоть ихний label.
Вложения
Тип файла: rar EventCustom.rar (11.4 Кб, 48 просмотров)

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

Регистрация: Sep 2002
Сообщений: 30,787
Alex Lexcuk, вы знаете, что такое is?

Старый 17.05.2009, 13:46
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 6  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
а, это вместо
Код AS3:
if (obj.toString()=='[object SimButton]') {
 
if (obj is SimButton)

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

Регистрация: Sep 2002
Сообщений: 30,787
Alex Lexcuk, а зачем вместо?
Зачем вообще такие утопичные классы?
Всё делается элементарно и без каких-либо костылей вроде LexEvent, кастомных событий и другой чуши:

Код AS3:
package {
	import flash.display.*
	import flash.events.*;
	import flash.text.*;
 
	public class SimButton extends SimpleButton {
 
		public function SimButton(){
			super();
		}
 
		/**
		 * @private
		 */
		private var _label:String;
 
		public function get label():String {
			return this._label;
		}
 
		public function set label(value:String):void {
			if (this._label == value) return;
			this._label = value;
			((super.upState as DisplayObjectContainer).getChildAt(1) as TextField).text = value;
			((super.downState as DisplayObjectContainer).getChildAt(1) as TextField).text = value;
			((super.overState as DisplayObjectContainer).getChildAt(1) as TextField).text = value;
		}
 
	}
}
Код AS3:
package {
	import flash.display.*
	import flash.events.*;
	import flash.text.*;
 
	public class DocEventCustom extends Sprite {
 
		public function DocEventCustom(){
			super();
			var i:uint;
			var j:uint = 0;
			var l:uint = super.numChildren;
			var o:DisplayObject;
 
			for (i = 0; i< l; i++) {
				o = super.getChildAt(i);
 
				if (o is SimButton) {
					(o as SimButton).label = this._labels[j];
					j++;
					if (j >= this._labels.length) break;
				}
 
			}
 
			super.addEventListener(MouseEvent.CLICK, this.handler_click);
		}
 
		/**
		 * @private
		 */
		private const _labels:Array = new Array("один","два","три","четыре","пять","шесть","семь");
 
		/**
		 * @private
		 */
		private function handler_click(event:MouseEvent):void {
			if (event.target is SimButton) {
				trace((event.target as SimButton).label);
			}
		}
	}
}

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

Регистрация: May 2009
Сообщений: 134
Тэээкс....
а DocEventCustom - это основной класс?
Что-то ругается на super() в конструкторе....

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

Регистрация: Sep 2002
Сообщений: 30,787
Да, это Document Class. Ругаться там не на что.

Старый 17.05.2009, 21:23
kaetano вне форума Посмотреть профиль Отправить личное сообщение для kaetano Найти все сообщения от kaetano
  № 10  
Ответить с цитированием
kaetano
 
Аватар для kaetano

Регистрация: May 2009
Сообщений: 134
Что не так сделала?
Вот что пишет:
Код AS3:
1201: A super statement cannot occur after a this, super, return, or throw statement.

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

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

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


 


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


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