![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 95
|
Ситуация такова: есть клип под названием clip. На нижнем слое - маленький круг, под именем main, на верхнем - большой, по именем big. Как сделать, чтобы можно было двигать весь клип (через MOUSE_DOWN и startGrag()) с помощью маленького круга? Т.е., чтобы на большой круг мышь не реагировала.
Как на примере: Нужно, чтобы таскался весь клип, но только за маленький черный круг. Вроде бы, вопрос простой, но нужную комбинацию mouseEnabled/mouseChildren для clip, main, big не удалось ![]() Буду благодарен за советы. |
|
|||||
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite { private var clip:Sprite; public function Main() { clip = new Sprite(); addChild(clip); clip.x = 200; clip.y = 200; var big:Sprite = new Sprite(); big.graphics.beginFill(0x939393); big.graphics.drawCircle(0, 0, 50); big.graphics.endFill(); clip.addChild(big); var main:Sprite = new Sprite(); main.graphics.beginFill(0x000000); main.graphics.drawCircle(0, 0, 10); main.graphics.endFill(); clip.addChild(main); main.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); main.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); } private function onMouseDown(event:MouseEvent):void { clip.startDrag(); } private function onMouseUp(event:MouseEvent):void { clip.stopDrag(); } } } |
|
|||||
|
TWETTI, там же большой круг лежит выше маленького.
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * For the short tests * @author bav */ public class Main extends Sprite { private var clip:Sprite = new Sprite(); private var big:Sprite = new Sprite(); private var main:Sprite = new Sprite(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); big.graphics.beginFill(0xCCCC00, 0.5); big.graphics.drawCircle(0, 0, 50); big.graphics.endFill(); main.graphics.beginFill(0xDD6600, 1); main.graphics.drawCircle(0, 0, 10); main.graphics.endFill(); clip.addChild(main); clip.addChild(big); clip.x = clip.y = big.width / 2; addChild(clip); big.mouseEnabled = false; main.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); } private function mouseDownHandler(event:MouseEvent):void { (event.currentTarget.parent as Sprite).startDrag(); (event.currentTarget as Sprite).addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); } private function mouseUpHandler(event:MouseEvent):void { (event.currentTarget.parent as Sprite).stopDrag(); (event.currentTarget as Sprite).removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); } } } Последний раз редактировалось bav; 01.11.2010 в 23:52. |
|
|||||
|
Если большой и малый круг лежат в одном контейнере, достаточно установить hitArea и mouseChildren для контейнера
|
|
|||||
|
Регистрация: Feb 2010
Сообщений: 95
|
bav , спасибо, но у меня big сверху. В принципе, на этом примере, если поставить big.mouseEnabled = false - работает; но у меня big - анимированные мувиклип круглой формы с множеством детей - может из-за этого у меня проблемы?
Мне казался верным такой вариант: (sprite.getChildByName("main") as MovieClip).addEventListener(MouseEvent.MOUSE_DOWN, startSpriteDrag); (sprite.getChildByName("big") as MovieClip).mouseEnabled = false; (sprite.getChildByName("big") as MovieClip).mouseChildren = false; А так: sprite.addEventListener(MouseEvent.MOUSE_DOWN, startSpriteDrag); (sprite.getChildByName("big") as MovieClip).mouseEnabled = false; (sprite.getChildByName("big") as MovieClip).mouseChildren = false; f.g.programmer, огромное спасибо, помогло; не знай о таком свойстве ![]() Последний раз редактировалось vinch; 02.11.2010 в 00:04. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|