![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2008
Сообщений: 102
|
код класса курсора:
package { import flash.display.*; import flash.events.*; import flash.ui.Mouse; public class AdvancedCursor extends MovieClip { public function AdvancedCursor() { super(); setState(1); Mouse.hide(); getChildAt(0).x = mouseX; getChildAt(0).y = mouseY; addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(event:Event) { getChildAt(0).x = mouseX; getChildAt(0).y = mouseY; } public function setState(_state:int):void { gotoAndStop(_state); } public function getState():Number { return currentFrame; } } } Если не вызывать никогда setState - все прекрасно работает - курсор замещен НО - мне нужно менять курсор - и когда я вызываю setState - курсор-то меняется, но при смене курсор куда-то пропадает, при этом мелькает в левом верхнем углу, а в output выводится сообщение что в getChildAt(0) - ничего нет - null, поэтому ошибка при смене координат. Через мгновение все нормально - курсор меняется но как избавится от этого мигания и "исчезновения" объекта при смене кадра? Последний раз редактировалось ekeeper; 23.06.2009 в 13:46. |
|
|||||
|
.
|
А может лучше на MouseEvent.MOUSE_MOVE повесить обновление координат?
|
|
|||||
|
Регистрация: May 2008
Сообщений: 102
|
Цитата:
но на строчку кода "super.parent.mouseX" или "super.parent.mouseY" ругается: "TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"." |
|
|||||
|
.
|
так попробуйте. нету парента еще. а лучше. наверное, к stage обращаться
package { import flash.display.*; import flash.events.*; import flash.ui.Mouse; public class AdvancedCursor extends MovieClip { public function AdvancedCursor() { super(); Mouse.hide(); super.addEventListener(Event.ADDED_TO_STAGE, this.handler_addedToStage); this.setState(1); } //----------------------------- // state //----------------------------- public function set state(value:uint):void { if (value == super.currentFrame || value < 1 || value > super.totalFrames ) return; super.gotoAndStop(value); } public function get state():uint { return super.currentFrame; } //--------------------------------------------------------------------- // // Events handlers // //--------------------------------------------------------------------- private function handler_addedToStage(event:Event):void { super.addEventListener(MouseEvent.MOUSE_MOVE, this.handler_mouseMove); } private function handler_removedToStage(event:Event):void { super.removeEventListener(MouseEvent.MOUSE_MOVE, this.handler_mouseMove); } private function handler_mouseMove(event:Event):void { super.x = super.stage.mouseX; super.y = super.stage.mouseY; } } } |
|
|||||
|
Регистрация: May 2008
Сообщений: 102
|
да, код не работает. мувик курсора бьется в левом верхнем углу и в цикле все кадры проигрываются
Добавлено через 4 минуты подправил ошибки, теперь все работает. Но событие пришлось вернуть на Enterframe - ибо если сильно дернуть мышкой, то для мувиклипа MouseMove уже не выполняется |
|
|||||
|
так может стоит маусмув повесить на стейдж?
|
|
|||||
|
конечно надо чтобы сама картинка курсора была в библиотеке, а определение нового курсора шло в главном классе. Помоему куча пример есть на AS3
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|