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

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

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

Регистрация: Sep 2008
Сообщений: 6
The bomb! Обратиться к свойствам нестандартного объекта, созданного динамически

Я добавляю в библиотеку символ obj и закрепляю за ним класс objClass, содержащий метод getFlag(). На сцену навешиваю класс MainClass, в котором создаю несколько объектов obj. Как после этого обратиться к одному из этих объектов и вызвать у него метод getFlag?

Код:
// objClass
package
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.display.Loader;
	
	public class objClass extends MovieClip
	{
		public var myflag:Boolean;
		
		public function objClass ()
		{
						
		}
		
		public function getFlag ():String
		{
			if (myflag==true) return "yes";
			else return "no";
		}		
	}
}
// mainMenu
package
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.utils.getDefinitionByName;
	import flash.display.DisplayObject;

		
	import obj;
	
	public class MainMenu extends MovieClip
	{
		var i:Number;
		var n:Number = 7;
		var names:Array=new Array();
		
		var flag:String;
				
		function MainMenu()
		{
			CreateImObjects();			
		}
		function lookForFlags (event:MouseEvent):void
		{
			//просмотреть у всех объектов метод getFlag, чтоб понять, какой из них нажат
			event.target.getFlag();
		}
		function CreateImObjects ():void
		{
			for (i=0;i<=n;i++)
			{
				names.push("mc"+i);
				trace (names[i]);
			}
			for (i=0; i<=n; i++)
			{
				var myObj  = new obj();
				myObj.x=80 + i*150;
				myObj.y=137;
				myObj.name = names[i];
								
				this.addChildAt(myObj,4+i);
				trace (myObj.name);
				myObj.addEventListener(MouseEvent.CLICK, lookForFlags);
				
			}
			
		}
	}
}


Последний раз редактировалось iNils; 17.09.2008 в 15:25.
Старый 17.09.2008, 15:07
NePridymal вне форума Посмотреть профиль Отправить личное сообщение для NePridymal Найти все сообщения от NePridymal
  № 2  
Ответить с цитированием
NePridymal
 
Аватар для NePridymal

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
Оформи код тегами [code]
А то что тут прочитать можно???

Старый 17.09.2008, 15:31
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 3  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Классы именуются со строчной буквы, например, MyClass.
Ваш код не вызывает ошибок компиляции? Описан objClass, а импортируете obj.
Через target можно обратится, только так грамотнее:
Код:
trace((event.target as obj).getFlag());
А почему getFlag возвращает String если можно Boolean?

Старый 17.09.2008, 15:51
Valery_Shchukina вне форума Посмотреть профиль Отправить личное сообщение для Valery_Shchukina Найти все сообщения от Valery_Shchukina
  № 4  
Ответить с цитированием
Valery_Shchukina

Регистрация: Sep 2008
Сообщений: 6
спасибо за ответ.
obj - это имя символа в моей библиотеке, у которого базовый класс ObjClass. Вроде бы достаточно импортировать именно его. Во всяком случае, никогда раньше проблем не возникало.

после trace((event.target as obj).getFlag());
появилась ошибка :
#1009: Cannot access a property or method of a null object reference.

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
В окне Symbol Properties есть поля:
Name: никак не связано с кодом.
Class: класс, соответствующий символу.
Base class: базовый класс класса, соответствующего символу.

Итак, что у Вас прописано в Class?

Старый 17.09.2008, 16:15
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 6  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Потому что у вас event.target не сам объект потомок ObjClass, а какой-то из его display child object-ов.
Я предпочитаю приведение типов делать так:
Код:
NewClass(event.target)
, а не
Код:
event.target as NewClass
В первом случае вылезет эксепш, а во втором вы можете молча получить null

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

Регистрация: Sep 2008
Сообщений: 6
класс obj
базовый класс ObjClass

на самом деле, все получилось, ошибка исчезла) Большое спасибо mre!)

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
terbooter, тогда уж лучше
Код:
if (event.target is NewClass)
    trace(event.target as NewClass);

Старый 17.09.2008, 17:58
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 9  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
2terbooter:
а ещё первый способ медленнее.
а ещё первый способ на самом деле не приведение типов, а конвертация типов.
а ещё первый способ может вернуть не тот же объект, а уже новый.
а ещё именно потому, что он выбрасывает эксепшн, я бы его не рекомендовал использовать. так как ставить везде и всюду try .. catch, вместо обычного if .. else, не самый адекватный вариант.

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

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

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


 


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


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