![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Mar 2011
Сообщений: 72
|
вобщем, такой вопрос.. Есть 3 swf файла, каждый из них загружает предыдущий swf. Иерархия такая:
main_class <- block1 <- messag в классе messag создается объект box и помещается в контейнер bo 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); } } } 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); } } } } вопрос в том, что мне нужно передать контейнеру cont координаты мышки, но фраза даже trace(this.stageX); выдает undefined всю голову уже сломал |
|
|||||
|
1) Форматируйте код. Читать трудно.
2) Цитата:
public class messag extends MovieClip { var bo:MovieClip = new box(); public function messag() { bo.x = 50; bo.y = 50; addChild(bo); } } 3) В функции initt, что вы хотели сказать этой строчкой? Возможно вы хотели сказать: 4) Попробуйте дождаться появления stage. 5) Избавьтесь от вложенных функций: 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); } Потому что MouseEvent.stageX. И потому что ни у класса block1, ни у MovieClip'a свойства stageX не наблюдается. Последний раз редактировалось bav; 12.04.2011 в 12:45. Причина: Исправления кода. |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 20
|
поробуй не this.stageX, а trace( e )
как то всё странно у тебя... Есть ли смысл их передавать, если каждый мувик наверняка имеет и сам доступ к ним. |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 72
|
спасибо! До EventDispatcher я еще не дошел, но буду стараться )
|
|
|||||
|
EventDispatcher это просто класс, в котором определены публичные методы addEventListener и removeEventListener, и наследником которого является MovieClip. e.target можно приводить и к MovieClip, по-моему разницы, в данном контексте, нет (спроси у гуру).
|
|
|||||
|
Регистрация: Mar 2011
Сообщений: 72
|
еще такой вопрос - как определить высоту верхнего края у мувиклипа, если он не отцентрирован в левый верхний угол, вот код на данный момент
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); } } } Последний раз редактировалось teion; 12.04.2011 в 14:50. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|