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

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

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

Регистрация: Mar 2009
Адрес: UA -- Kherson
Сообщений: 29
По умолчанию Как правильно обратиться к свойствам контента Loader'а из класса-потомка?

Здравствуйте, простите, если уже было, но я по поиску на форуме не смог найти ответ (((
У меня проблема заключается в том, что я не могу обратиться к некоторым свойствам контента Лоадера.
Я создал класс, который управляет загрузкой, отображением и размещением подгружаемой SWF-ки:
Код AS3:
public class MovieLoader extends Loader
Я этот класс использовал для подгрузки декоративных элементов для сайта: каждый элемент дизайна - отдельный объект класса MovieLoader. Всё отлично работает в плане загрузки, позицирования, масштабирования и т.п. Но когда мне понадобилось сделать некоторые элементы активными для пользователя, я не смог обратиться из самого класса MovieLoader к некоторым свойствам подгруженной SWF:
Код AS3:
buttonMode = true;
useHandCursor = true;
- так не работает. Попробовал по-другому - тоже безуспешно:
Код AS3:
var m:MovieClip = content as MovieClip;
m.buttonMode = true;
m.useHandCursor = true;
Выдает TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
Помогите, пожалуйста, как обратиться к свойствам и поменять их

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

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Может сделать композицию: в кастомном классе, расширяющем Sprite создаем экземпляр Loader. buttonMode и useHandCursor будут работать у этого класса кастомного.
__________________
Стой! Опасная зона! Работа мозга!

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

Регистрация: Mar 2009
Адрес: UA -- Kherson
Сообщений: 29
Цитата:
Сообщение от marat_sa Посмотреть сообщение
Может сделать композицию: в кастомном классе, расширяющем Sprite создаем экземпляр Loader. buttonMode и useHandCursor будут работать у этого класса кастомного.
прикол в том, что именно так я и начинал... был у меня
Код AS3:
public class MovieLoader extends MovieClip
всё так же отлично работало, кроме вышеописанной проблеммы. У меня в классе MovieLoader содержался
Код AS3:
private var loader:Loader;
обращения типа
Код AS3:
var m:MovieClip = loader.content as MovieClip;
m.buttonMode = true;
или типа
Код AS3:
loader.content.buttonMode = true;
- тоже не работали.


Последний раз редактировалось kirea; 03.08.2009 в 10:08.
Старый 03.08.2009, 10:39
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 4  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
а на какой стадии вы контент от лоадера требуете?..может его нет еще?
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Регистрация: Jul 2008
Сообщений: 107
buttonMode- свойство Sprite'a, т.е. если Вы загружаете битмап, то его нужно сперва засунуть в Sprite или MovieClip, а потом уже buttonMode использовать. А приведение Bitmap as MovieClip не сработает.

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

Регистрация: Mar 2009
Адрес: UA -- Kherson
Сообщений: 29
Цитата:
Сообщение от cleptoman Посмотреть сообщение
а на какой стадии вы контент от лоадера требуете?..может его нет еще?
контент уже есть и инициализирован - он уже на экране смасштабирован и спозицирован (сайт "резиновый"): вот и предмет разговора - лого по центру должен стать кликабельным по окончанию догрузки остального контента сайта http://tbcorp.com.ua/
Цитата:
Сообщение от Lou Посмотреть сообщение
buttonMode- свойство Sprite'a, т.е. если Вы загружаете битмап, то его нужно сперва засунуть в Sprite или MovieClip, а потом уже buttonMode использовать. А приведение Bitmap as MovieClip не сработает.
Как было видно на примере, я гружу не битмап, а MovieClip (логотип анимированный). Работает многое: x, y, scaleX, scaleY, alpha и т.п., а специфичные для MovieClip свойства - недоступны!!!

Старый 03.08.2009, 12:06
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 7  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
> Как было видно на примере, я гружу не битмап, а MovieClip

В смысле SWF чтоли?

buttonMode ставить, как свойство кастомного вашего объекта:
Код AS3:
public class MovieLoader extends Sprite {
 
private var _loader:Loader;
 
public function MovieLoader() {
    this.buttonMode = true;
    _loader = new Loader();
   ...
}
}
__________________
Стой! Опасная зона! Работа мозга!

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

Регистрация: Mar 2009
Адрес: UA -- Kherson
Сообщений: 29
Цитата:
buttonMode ставить, как свойство кастомного вашего объекта
Я же и писал, что с самого начала так и делал. приведу ФРАГМЕНТ класса. Незначимые для проблеммы методы и проперти я выбросил для упрощения чтения (загрузка объекта осуществляется из класса докуменка main: после конструктора и установки всех проперти вызывается метод Load() ):
Код AS3:
package mainCode {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import mainCode.main;
 
public class MovieLoader extends MovieClip
{
	public var loader	:Loader;
	public var toStage	:Boolean = false;	//Показывать ли сразу после загрузки?
	public var SwfFile	:String	= '';	//Файл-источник
	//-------------------------------------------------------------------------------
	public function MovieLoader()
	{
 
	}
	//-------------------------------------------------------------------------------
	public function Load():void
	{
		if (main.canLoad) loading()
		else this.addEventListener(Event.ENTER_FRAME, accessToLoad);
	}
	//-------------------------------------------------------------------------------
	private function loading():void
	{
		main.canLoad = false;
		var req:URLRequest = new URLRequest(SwfFile);
		loader = new Loader();
		loader.contentLoaderInfo.addEventListener(Event.INIT, fileLoaded);
		if (!NoPreload) loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, setPreload);
		loader.load(req);
	}
	//-------------------------------------------------------------------------------
	private function accessToLoad(event:Event):void
	{
		if (main.canLoad)
		{
			loading();
			this.removeEventListener(Event.ENTER_FRAME, accessToLoad);
		}
	}
	//-------------------------------------------------------------------------------
	private function fileLoaded(event:Event):void
	{
		loader.x = x;
		loader.y = y;
 
		moveIt();
		if (toStage) showOnStage();
		main.swfRemain--;
		main.canLoad = true;
 
		loader.contentLoaderInfo.removeEventListener(Event.INIT, fileLoaded);
		if (!NoPreload) loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, setPreload);
		main.swfStage.addEventListener(Event.RESIZE, moveIt);
 
		if (main.swfRemain == 0) main.allLoaded();
 
		var m:MovieClip = loader.content as MovieClip;    //НЕ РАБОТАЕТ
		m.buttonMode = true;          //НЕ РАБОТАЕТ
	}
	//-------------------------------------------------------------------------------
}	//class
}	//package
и просто buttonMode = true без обращения к content тоже не работает.


Последний раз редактировалось kirea; 03.08.2009 в 12:36.
Старый 03.08.2009, 12:43
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
loader.content не обязан быть MovieClip, вполне может быть просто Sprite, или пользовательский класс наследник Sprite.
buttonMode - у Loader нет такого свойства.
__________________
Hell is the possibility of sanity

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

Регистрация: Mar 2009
Адрес: UA -- Kherson
Сообщений: 29
Цитата:
Сообщение от wvxvw Посмотреть сообщение
loader.content не обязан быть MovieClip, вполне может быть просто Sprite, или пользовательский класс наследник Sprite.
buttonMode - у Loader нет такого свойства.
ну если загружен именно MovieClip, неужели нету никакого способа изменять свойства загруженного мувика. Кроме, конечно, банального разделения моего класса на два класса: отдельно для Лоадера, и второй отдельный для управления мувиком. Уж очень не хочется менять интерфейсную часть класса, а то переделывать много в других классах придется...

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

Теги
content , loader

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

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


 


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


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