![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 173
|
Всем привет !
Делаю так // делаю кнопку var But:MovieClip = new MovieClip(); But.graphics.beginFill(color); But.graphics.drawRect(0, 0, 100, 100); var ButOut:MovieClip = new MovieClip(); ButOut.graphics.beginFill(color); ButOut.graphics.drawRect(0, 0, 100, 100); addChild(But); But.addEventListener(MouseEvent.MOUSE_OVER, But_OVER); ButOut.addEventListener(MouseEvent.MOUSE_OUT, But_OUT ); private function But_OVER(event:MouseEvent):void { removeChild(But); addChild(ButOut); } private function But_OUT(event:MouseEvent):void { removeChild(ButOut); addChild(But); } Как это выличить ? или может я что делаю не так ? |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
может лучше воспользоваться классом SimpleButton?
|
|
|||||
|
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
Может чтобы случилось MOUSE_OUT сначала должно быть MOUSE_OVER - а для But_OUT это не происходит. Проще создать прозрачный клип, на него вешать оба события и в них менять необходимые обложки.
|
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
у меня всё работает...проблема где-то в другом...
ps. методы и проперти пишутся со строчных букв |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
Для общего понимания: Событие MOUSE_OVER произойдет независимо от того, поставите вы слушатель на целевой объект (в данном случае - ButOut) или нет.
package { import flash.display.Sprite; import flash.events.MouseEvent; public dynamic class NewExample extends Sprite { private var s:Sprite = new Sprite; function NewExample():void { s.graphics.beginFill(0x000000); s.graphics.drawRect(0, 0, 200, 200); s.x = 100; //s.mouseEnabled = false; // Раскомментируйте, чтобы событие не возникало для 's' this.addChild(s); this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverParent, true); // слушатель на "предка" (parent), чтобы отловить событие в Фазе Захвата, т.е. №1 } private function mouseOverParent(e:MouseEvent):void { trace(e.type, '"Фаза №' + e.eventPhase + '"', e.target, e.currentTarget); // выводит: mouseOver "Фаза №1" [object Sprite] [object NewExample] } } } |
|
|||||
|
Регистрация: May 2009
Сообщений: 173
|
Ну вот конкретный код и он глючит - если мышкой немного дернуть !
package { import flash.display.*; import flash.events.*; public class Bt extends MovieClip { private var M:MovieClip; private var O:MovieClip; public function Bt():void { M = new MovieClip(); M.graphics.beginFill(0x000000); M.graphics.drawRect(0, 0, 200, 20); O = new MovieClip(); O.graphics.beginFill(0x666666); O.graphics.drawRect(0, 0, 200, 20); addChild(M); M.addEventListener(MouseEvent.MOUSE_OVER, But_OVER); O.addEventListener(MouseEvent.MOUSE_OUT, But_OUT ); } private function But_OVER(event:MouseEvent):void { removeChild(M); addChild(O); } private function But_OUT(event:MouseEvent):void { removeChild(O); addChild(M); } } } //////////////////////////////////////////////////////////////////////////////////// public class Main extends MovieClip { public function Main():void { //------------------------------------------------------------------- var Mc:Array = new Array(); for(i=0;i<10;i++) { Mc[i] = new Bt(); if(i!=0) { Mc[i].y = Mc[i-1].y+Mc[i-1].height+1; } addChild(Mc[i]); } } } |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
Цитата:
Соответственно, и событие MouseEvent.MOUSE_OUT - произойти не может в принципе. |
|
|||||
|
Регистрация: May 2009
Сообщений: 173
|
И как это лечит ?
|
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
Продумать другой алгоритм.
![]() Например, для класса Bt: package { import flash.display.*; import flash.events.*; public class Bt extends MovieClip { private var M:MovieClip; private var O:MovieClip; public function Bt():void { this.mouseChildren = false; M = new MovieClip(); M.graphics.beginFill(0x000000); M.graphics.drawRect(0, 0, 200, 20); O = new MovieClip(); O.graphics.beginFill(0x666666); O.graphics.drawRect(0, 0, 200, 20); this.addChild(M); addEventListener(MouseEvent.ROLL_OVER, But_OVER); addEventListener(MouseEvent.ROLL_OUT, But_OUT); } private function But_OVER(event:MouseEvent):void { if (this.contains(M)) { removeChild(M); } addChild(O); } private function But_OUT(event:MouseEvent):void { if (this.contains(O)) { removeChild(O); } addChild(M); } } } |
|
|||||
|
Регистрация: May 2009
Сообщений: 173
|
Цитата:
Последний раз редактировалось _moscow; 14.10.2009 в 12:28. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:44. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|