Показать сообщение отдельно
Старый 03.04.2013, 07:25
Dalass13 вне форума Посмотреть профиль Отправить личное сообщение для Dalass13 Найти все сообщения от Dalass13
  № 5  
Ответить с цитированием
Dalass13
 
Аватар для Dalass13

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
Добавлено через 2 минуты
Ну, если я спрашиваю, значит смысл - таки есть. Задача стоит такая - движение по щелчку и удерживанию ЛКМ, а при удерживании Shift, объект стоит на месте. С мышью реализовал алгоритм, но, опять же, непонятно - можно ли сделать это проще?

Код AS3:
import flash.events.MouseEvent;
import flash.events.Event;
 
var toX,toY;
var characterSpeed = 5;
var mouseIsToggled = false; // зажата ЛКМ
var mouseIsClicked = false;  // клик мыши
 
function mouseClick(event:MouseEvent):void
{
	mouseIsClicked = true;
 
	if (event.target != mc)
	{
		mouseIsToggled = true;
 
		removeEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);
 
		toX = event.stageX;
		toY = event.stageY;
		addEventListener(Event.ENTER_FRAME, onEnterFrame);
	}
}
 
function mouseUnclick(event:MouseEvent):void
{
	mouseIsToggled = false;
}
 
 
function mouseToggled(event:MouseEvent):void
{
	if ( mouseIsClicked && mouseIsToggled && event.target != mc)
	{
		toX = event.stageX;
		toY = event.stageY;
		addEventListener(Event.ENTER_FRAME, onEnterFrame);
	}
	else
	{
		stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);
	}
}
 
function onEnterFrame(e:Event)
{
	moveToCoordinates(toX, toY);
}
 
function moveToCoordinates(toX:Number, toY:Number)
{
	var theta = Math.atan2 (toY - mc.y, toX - mc.x);
	mc.x += Math.cos (theta) * (characterSpeed);
	mc.y += Math.sin (theta) * (characterSpeed);
 
	if (Math.abs(mc.y - toY) < 5 && Math.abs(mc.x - toX) < 5)
	{
		removeEventListener(Event.ENTER_FRAME, onEnterFrame);
		if (! mouseIsToggled)
		{
			mouseIsClicked = false;
		}
	}
}
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUnclick);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseToggled);


Последний раз редактировалось Dalass13; 03.04.2013 в 08:30.