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

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

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

Регистрация: Mar 2011
Сообщений: 72
По умолчанию лоадер, который загружает лоадер, котороый загружает лоадер

вобщем, такой вопрос.. Есть 3 swf файла, каждый из них загружает предыдущий swf. Иерархия такая:
main_class <- block1 <- messag
в классе messag создается объект box и помещается в контейнер bo
Код AS3:
package  {
 
	import flash.display.MovieClip;
 
 
	public class messag extends MovieClip {
 
		var bo:MovieClip = new box();
		public function messag() {
			bo.x = 50;
			bo.y = 50;
			addChild(bo);
		}
	}
 
}
в классе block1 подгружается messag.swf. Далее в этом классе я пытаюсь реализовать таскание этого загружаемого messag.swf за объект bo
Код AS3:
package  {
 
	import flash.display.MovieClip;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.events.MouseEvent;
	import flash.events.Event;
 
	public class block1 extends MovieClip {
 
		var loader:Loader = new Loader();
		var url:URLRequest = new URLRequest("messag.swf");
		var cont:MovieClip;
		public function block1() {
			// constructor code
			loader.load(url);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, initt);
		}
				public function initt (e:Event) {
					addChild(loader);
			var cont = loader.content;
			cont as MovieClip;
			cont.bo.addEventListener(MouseEvent.MOUSE_DOWN,mdown);
				}
 
 
		public function mdown (e:MouseEvent){
			addEventListener (MouseEvent.MOUSE_MOVE, mmove);
			addEventListener (MouseEvent.MOUSE_UP, mup);
			function mmove (e:MouseEvent) {
			//cont.x = this.localX;
			trace(this.stageX);
			}
			function mup (e:MouseEvent) {
			removeEventListener (MouseEvent.MOUSE_MOVE, mmove);
			removeEventListener (MouseEvent.MOUSE_UP, mup);
			}
		}
 
	}
 
}
ну и соответственно в классе main_class должен подгружаться block1.swf, в котором весь предыдущий функционал должен работать.
вопрос в том, что мне нужно передать контейнеру cont координаты мышки, но фраза даже trace(this.stageX); выдает undefined
всю голову уже сломал

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
1) Форматируйте код. Читать трудно.

2)
Цитата:
в классе messag создается объект box и помещается в контейнер bo
Код AS3:
public class messag extends MovieClip 
{ 
    var bo:MovieClip = new box();
    public function messag() 
    {
        bo.x = 50;
        bo.y = 50;
        addChild(bo);
    }
}
Неправда. Здесь новый объект box становиться ребенком объекта messag.

3) В функции initt, что вы хотели сказать этой строчкой?
Код AS3:
cont as MovieClip;
Возможно вы хотели сказать:
Код AS3:
// Используем поле класса, а не локальную переменную.
cont = loader.content as MovieClip;
4) Попробуйте дождаться появления stage.

5) Избавьтесь от вложенных функций:
Код AS3:
private function mdown (e:MouseEvent):void{
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_UP, mup);			
}
 
private function mmove (e:MouseEvent):void {
    trace(this.stageX);
}
 
private function mup (e:MouseEvent):void {
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_UP, mup);
}
6) А может быть:
Код AS3:
private function mmove (e:MouseEvent):void {
    trace(e.stageX);
}
Потому что MouseEvent.stageX. И потому что ни у класса block1, ни у MovieClip'a свойства stageX не наблюдается.


Последний раз редактировалось bav; 12.04.2011 в 12:45. Причина: Исправления кода.
Старый 12.04.2011, 12:35
ZZZubec вне форума Посмотреть профиль Отправить личное сообщение для ZZZubec Найти все сообщения от ZZZubec
  № 3  
Ответить с цитированием
ZZZubec

Регистрация: Apr 2011
Сообщений: 20
поробуй не this.stageX, а trace( e )
как то всё странно у тебя...
Код AS1/AS2:
function mdown(e:MouseEven)
{
    trace(e); //даст все нужные координаты
//[MouseEvent type="click" bubbles=true cancelable=false eventPhase=3 localX=24 localY=14 stageX=224 stageY=24 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]
}
Есть ли смысл их передавать, если каждый мувик наверняка имеет и сам доступ к ним.

Старый 12.04.2011, 12:36
teion вне форума Посмотреть профиль Отправить личное сообщение для teion Найти все сообщения от teion
  № 4  
Ответить с цитированием
teion

Регистрация: Mar 2011
Сообщений: 72
спасибо! До EventDispatcher я еще не дошел, но буду стараться )

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
EventDispatcher это просто класс, в котором определены публичные методы addEventListener и removeEventListener, и наследником которого является MovieClip. e.target можно приводить и к MovieClip, по-моему разницы, в данном контексте, нет (спроси у гуру).

Старый 12.04.2011, 14:47
teion вне форума Посмотреть профиль Отправить личное сообщение для teion Найти все сообщения от teion
  № 6  
Ответить с цитированием
teion

Регистрация: Mar 2011
Сообщений: 72
еще такой вопрос - как определить высоту верхнего края у мувиклипа, если он не отцентрирован в левый верхний угол, вот код на данный момент
Код AS3:
package  {
 
	import flash.display.MovieClip;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.events.MouseEvent;
	import flash.events.Event;
import flash.events.EventDispatcher;
 
	public class block1 extends MovieClip {
 
		var loader:Loader = new Loader();
		var url:URLRequest = new URLRequest("messag.swf");
		var cont:MovieClip; //контейнер для лоадера
		var dispx:Number; //переменные для коррекции места начала сдвига
		var dispy:Number;
		public function block1() {
			// constructor code
			loader.load(url);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, initt);
		}
				public function initt (e:Event) {
					loader.y = 100;
					addChild(loader);
			var cont = loader.content as MovieClip;//используем содержимое как мувиклип, что бы добраться до его экземпляров
			cont.bo.addEventListener(MouseEvent.MOUSE_DOWN,mdown);
			cont.bo.addEventListener(MouseEvent.ROLL_OUT,mrollout);
 
				}
 
 
		private function mdown (e:MouseEvent):void{
			dispx = e.localX;//присваивание коррекции
			dispy = e.localY;
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_UP, mup);			
			}
			function mmove (e:MouseEvent) {
			loader.x = e.stageX-dispx;//сдвиг по Х работает нормально
			loader.y = e.stageY-dispy;//сдвиг по У работает не корректно из за того, что cont.bo не отцентрирован по верхнему краю
			trace(e);
			}
			private function mup (e:MouseEvent):void {
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_UP, mup);
			}
			private function mrollout (e:MouseEvent):void {
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_UP, mup);
			}
 
	}
 
}
Вложения
Тип файла: zip class.zip (20.0 Кб, 54 просмотров)


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

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

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


 


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


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