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

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

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

Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
Question Не могу обратиться к объекту

Парни, не первый день за флешем, но...тут встрял.
Собственно сабж (выдернул из своего проекта метод, повыкидывал всё из него, чтобы понятнее было):

Код AS3:
 
function duplicateObject(obj:MovieClip, duplicateObjName:String, arrArguments:Array = null, autoAddToStage:Boolean = true):dgObject {
	var targetClass:Class;
	var duplicate:MovieClip;
	var rect:Rectangle;
 
	try {
		targetClass = Object(obj).constructor;
		duplicate = new targetClass();
		rect = obj.scale9Grid;
		duplicate.name = duplicateObjName;
		duplicate.transform = obj.transform;
		duplicate.filters = obj.filters;
		duplicate.cacheAsBitmap = obj.cacheAsBitmap;
		duplicate.opaqueBackground = obj.opaqueBackground;
		if (obj.scale9Grid) duplicate.scale9Grid = rect;
 
		trace("num = " + obj.parent.numChildren);
		obj.parent.addChild(duplicate);
		trace("num = " + obj.parent.numChildren);
		trace(duplicate.name);
		//***** ПОЧЕМУ????
		trace(obj.parent['qqq']);
		//***** ПОЧЕМУ????
		//fmcEnvelope.parent.getChildAt(2).x +=120; //это у меня на сцене он 2-ой...
		//duplicate.x += 120;
	} catch(err:Error) {
		//обработчик
	}
	return null;
}
Вызов этой функции:

Код AS3:
duplicateObject(this.mcTest, "qqq");
В комментах описана проблема. Хоть убейте - не пойму ПОЧЕМУ я не могу обратиться так к объекту...
ВСЕМ заранее СПАСИБО!

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
return null тому причина
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 07.04.2010, 18:31
danger вне форума Посмотреть профиль Отправить личное сообщение для danger Найти все сообщения от danger
  № 3  
Ответить с цитированием
danger

Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
return null тут абсолютно не при чем.
Вопрос заключается в том, почему я ВНУТРИ этой функции(кстати, можно и снаружи тоже попробовать - ничего не выйдет) не могу по имени(!) обратиться к объекту. Объект создается и добавляется успешно на сцену(о чем свидетельствуют СПЕЦИАЛЬНО для этого вставленные функции trace) - но такое обращение возвращает undefined.
ПОЧЕМУ?

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Это не ас1/2. Тут обращение идет по ссылкам. Хотите по имени, используйте метод getChildByName.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 07.04.2010, 18:46
danger вне форума Посмотреть профиль Отправить личное сообщение для danger Найти все сообщения от danger
  № 5  
Ответить с цитированием
danger

Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
Опять неверно. Для примера - вот мой конструктор:
Код AS3:
//constructor
public function dgObject(mc:MovieClip, mcName:String, objInternal:Boolean = false):void {
	var errMsg:String = "";
 
	try {
		if (mc == null) errMsg = fcs.emMovieClipIsNull
		else if (mc[mcName] == null) errMsg = fcs.emObjectNotFound(mcName);
		if (errMsg != "") mc[mcName].name /*force generate error*/ else fmcEnvelope = mc[mcName];
	} catch(err:Error) {
		ferrorConstructorInit = true;
		showError(new Array(fcs.cln_dgObject, fcs.cmnConstructor, fcs.etInternalCrush, errMsg, err));
		//exceptionHandler(mc, fcurrentClass, fcs.cmnConstructor, fcs.emObjectNotFound(mcName), objInternal);
	}
}
Тут на многое не надо обращать внимание, главное вот эта строчка кода:
Код AS3:
fmcEnvelope = mc[mcName]
Она-то работает. И, признаюсь Вам, очень даже неплохо работает!)))
А насчет getChildByName - огрмное спасибо, совсем вылетело из головы.
Но всё-таки...сабж остается сабжом....что за ГЛЮК?


Последний раз редактировалось iNils; 07.04.2010 в 18:53.
Старый 07.04.2010, 19:02
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Она-то работает. И, признаюсь Вам, очень даже неплохо работает!)))
Не-а.
Делаем простой пример
Код AS3:
package {
	import flash.display.*;
	public class Test extends Sprite {
		public function Test () {
			var s:MovieClip = new MovieClip ()
			s.name = "mc"
			addChild (s)
			trace (this["mc"]);
		}
	}
}
и тут бах, ошибка
Цитата:
ReferenceError: Error #1069: Не удалось найти свойство mc в Test; отсутствует значение по умолчанию.
at Test()[D:\_Library\_Work\home.test\LoggerStack\src\Test.as:8]
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Sep 2002
Сообщений: 30,787
Генерацией ссылок с именами клипов занимается компилятор Flash IDE и то, только на стадии компиляции.

Старый 07.04.2010, 19:12
danger вне форума Посмотреть профиль Отправить личное сообщение для danger Найти все сообщения от danger
  № 8  
Ответить с цитированием
danger

Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
Все правильно))))) Я ПРО ЭТО И ГОВОРЮ. Ошибка то бабахает. Страшно и громко бабахает.
А если мы теперь закомментим строчки:
//var s:MovieClip = new MovieClip ()
//s.name = "mc"
//addChild (s)
Затем очень аккуратно создадим шейп на сцене(вручную). Далее нажмем F8. Далее назовем его mc. А уже затем мягко и аккуратно нажмем ctrl+enter.
И.............//[object MovieClip]

Вопрос остается открытым: ПОЧЕМУ? ПОЧЕМУ в IDE flash видит и может обратиться к объекту вот так object[objectName], а в райн-тайме НЕТ!....
Кто может, подскажите...

Старый 07.04.2010, 19:14
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Генерацией ссылок с именами клипов занимается компилятор Flash IDE и то, только на стадии компиляции.

Старый 07.04.2010, 19:15
danger вне форума Посмотреть профиль Отправить личное сообщение для danger Найти все сообщения от danger
  № 10  
Ответить с цитированием
danger

Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
Цитата:
Сообщение от etc Посмотреть сообщение
Генерацией ссылок с именами клипов занимается компилятор Flash IDE и то, только на стадии компиляции.
Т.е., как я понял, в райн-тайме ссылка на добавленный объект через обращение по свойству(object[objectName]) не работает? Верно?

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

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

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


 


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


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