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

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

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

Регистрация: Feb 2010
Сообщений: 95
По умолчанию Реакция на мышь только из одного child'a

Ситуация такова: есть клип под названием clip. На нижнем слое - маленький круг, под именем main, на верхнем - большой, по именем big. Как сделать, чтобы можно было двигать весь клип (через MOUSE_DOWN и startGrag()) с помощью маленького круга? Т.е., чтобы на большой круг мышь не реагировала.

Как на примере:

Нужно, чтобы таскался весь клип, но только за маленький черный круг.
Вроде бы, вопрос простой, но нужную комбинацию mouseEnabled/mouseChildren для clip, main, big не удалось

Буду благодарен за советы.
Изображения
 

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

Регистрация: Dec 2007
Адрес: Россия, Москва
Сообщений: 541
Отправить сообщение для TWETTI с помощью Skype™
Код AS3:
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();
		}
	}
}

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
TWETTI, там же большой круг лежит выше маленького.
Код AS3:
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.
Старый 01.11.2010, 23:58
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 4  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Если большой и малый круг лежат в одном контейнере, достаточно установить hitArea и mouseChildren для контейнера
Код AS3:
var small:Sprite = new Sprite();
var big:Sprite = new Sprite();
var container:Sprite = new Sprite();
container.addChild(big);
container.addChild(small);
container.hitArea = small;
container.mouseChildren = false;
container.addEventListener(MouseEvent.CLICK, trace);

Старый 01.11.2010, 23:59
vinch вне форума Посмотреть профиль Отправить личное сообщение для vinch Найти все сообщения от vinch
  № 5  
Ответить с цитированием
vinch

Регистрация: Feb 2010
Сообщений: 95
bav , спасибо, но у меня big сверху. В принципе, на этом примере, если поставить big.mouseEnabled = false - работает; но у меня big - анимированные мувиклип круглой формы с множеством детей - может из-за этого у меня проблемы?

Мне казался верным такой вариант:
Код AS3:
(sprite.getChildByName("main") as MovieClip).addEventListener(MouseEvent.MOUSE_DOWN, startSpriteDrag);
(sprite.getChildByName("big") as MovieClip).mouseEnabled = false;
(sprite.getChildByName("big") as MovieClip).mouseChildren = false;
Но так вообще не двигается.
А так:
Код AS3:
sprite.addEventListener(MouseEvent.MOUSE_DOWN, startSpriteDrag);
(sprite.getChildByName("big") as MovieClip).mouseEnabled = false;
(sprite.getChildByName("big") as MovieClip).mouseChildren = false;
Двигается и за big.

f.g.programmer, огромное спасибо, помогло; не знай о таком свойстве


Последний раз редактировалось vinch; 02.11.2010 в 00:04.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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