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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 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.
Создать новую тему   Часовой пояс GMT +4, время: 14:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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