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

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

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

Регистрация: Nov 2009
Сообщений: 176
По умолчанию drag в рамках круга

Приветствую!

как можно драгать мувик в рамках круга?

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

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Зависит от сложности мувика, и от требуемой точности.

Старый 22.05.2012, 16:31
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 3  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
мувик который надо драгать прямоугольник

Старый 22.05.2012, 16:45
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Перемещайте по MOUSE_MOVE, с учетом ограничений (если дальше радиуса, то не двигать, например), в чем проблема?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 22.05.2012, 17:45
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в обще-то не такая тривиальная задачка, если нужно, чтобы прямоугольник скользил углами по внутренней кромке круга, например..
у меня такой вариант нарисовался, он не оптимальный по количеству вычислений, но понятный зато
Код AS3:
public class Main extends Sprite 
{
 
	private var center:Point = new Point(200, 200);
	private var R:Number = 100;
 
 
	private var sample:Sprite = new Sprite();
	private var prevMousePoint:Point;
	public function Main():void 
	{
		graphics.beginFill(0x000000, 0.1);
		graphics.drawCircle(center.x, center.y, R);
 
		sample.buttonMode = true;
		sample.graphics.beginFill(0x008000);
		sample.graphics.drawRect(0, 0, 60, 40);
		sample.x = 200;
		sample.y = 200;
		sample.rotation = 30;
 
		addChild(sample);
		sample.addEventListener(MouseEvent.MOUSE_DOWN, sample_mouseDown);
 
	}
 
 
	private function sample_mouseDown(e:MouseEvent):void 
	{
		stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
		stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUp);
		// если нужна потеря драга при уводе мышки
		//sample.addEventListener(MouseEvent.MOUSE_OUT, stage_mouseUp);
		prevMousePoint = new Point(mouseX, mouseY);
	}
 
 
	private function stage_mouseUp(e:MouseEvent):void 
	{
		stage.removeEventListener(MouseEvent.MOUSE_UP, stage_mouseUp);
		stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
 
	}
 
	private function stage_mouseMove(e:MouseEvent):void 
	{
		// двигаем как в обычном драге
		sample.x += mouseX - prevMousePoint.x;
		sample.y += mouseY - prevMousePoint.y;
		prevMousePoint = new Point(mouseX, mouseY);
 
 
		// сдвигаем, чтоб все углы вместились
		var rec:Rectangle = sample.getBounds(sample);
		var corners:Array = [
			sample.localToGlobal(rec.topLeft), 
			sample.localToGlobal(new Point(rec.right, rec.top)), 
			sample.localToGlobal(rec.bottomRight), 
			sample.localToGlobal(new Point(rec.left, rec.bottom))
		];
		var dir:Number = Math.atan2(sample.y - center.y, sample.x - center.x);
		var dX:Number = Math.cos(dir);
		var dY:Number = Math.sin(dir);
 
		for (var i:int = 0; i < 4; i++)
		{
			var p:Point = corners[i];
			while (Point.distance(center, p) > R) 
			{
				p.x -= dX;
				p.y -= dY;
				sample.x -= dX;
				sample.y -= dY;
			}
		}
 
	}
}

Старый 22.05.2012, 18:10
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 6  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
большое спасибо!!!

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

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

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


 


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


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