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

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

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

Регистрация: Feb 2010
Сообщений: 14
По умолчанию плавное перемещение мувмка к мышке.

в общем есть муви клип (обычный круг 5х5px) у клипа в Linkage прописано main.Cor

Вот содержимое main/Cor.as
Код AS3:
package main
{
	import flash.display.MovieClip;
	import flash.events.*;
 
	public class Cor extends MovieClip
	{
		var step:int = 1;
		var o:Boolean = false;
		var fx,fy,stepx,stepy:Number = 0;
 
		function Cor():void
		{
			stage.addEventListener(MouseEvent.CLICK,EventMouseClick);
			stage.addEventListener(Event.ENTER_FRAME,EventEneterFrame);
			this.fx = this.x;
			this.fy = this.y;
			this.x = Math.floor(this.x);
			this.y = Math.floor(this.y);
		}
 
		function EventMouseClick(eve:MouseEvent):void
		{
			this.o=false;
			this.fx = Math.floor(eve.localX);
			this.fy = Math.floor(eve.localY);
			var tx:Number = fx - this.x;
			var ty:Number = fy - this.y;
 
			var countstep:Number = 0;
			if (Math.abs(tx) > Math.abs(ty))
			{
				countstep = tx/this.step;
				this.stepy = ty/countstep;
				this.stepx = tx/Math.abs(tx);
			}
			else
			{
				countstep = ty/this.step;
				this.stepy = ty/Math.abs(ty);
				this.stepx = tx/countstep;
			}
			trace('x: '+((this.stepx*countstep)==tx));
			trace('y: '+((this.stepy*countstep)==ty));
			this.o=true;
		}
 
		function EventEneterFrame(event:Event):void
		{
			if (this.o === true)
			{
				if (this.x != this.fx)
					this.x+=this.stepx;
 
				if (this.y != this.fy)
					this.y+=this.stepy;
			}
		}
 
	}
}
мне нужно чтоб как только я щелкал по области флешки (не по муви клипу) так сразу мувиклип постепенно перемещался к этой точке, но у меня проблемма в том что постоянно мувик либо проезжает точку либо не доежает.... помогите.

Старый 26.02.2010, 18:15
d_ruha вне форума Посмотреть профиль Отправить личное сообщение для d_ruha Найти все сообщения от d_ruha
  № 2  
Ответить с цитированием
d_ruha

Регистрация: Mar 2009
Сообщений: 19
Это проще реализовать твинами. После клика есть координаты мувика и координаты точки, куда его нужно перемещать.
Код AS3:
Tween(mov, "x", Strong.easeOut, this.x, stage.mouseX, 1, true);
Tween(mov, "y", Strong.easeOut, this.y, stage.mouseY, 1, true);
это если делать стандартным твином. Можно и сторонними реализациями.

Старый 26.02.2010, 18:21
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 3  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Код AS3:
package main
{
	import flash.display.MovieClip;
	import flash.events.*;
	import fl.transitions.Tween;
	import fl.transitions.TweenEvent;
	import fl.transitions.easing.None;
 
	public class Cor extends MovieClip
	{
		private const _speed:uint = 31; // устанавливаем скорость движения в px/сек
		private var _xTween:Tween;
		private var _yTween:Tween;
 
		public function Cor():void
		{
			stage.addEventListener(MouseEvent.CLICK,EventMouseClick);
		}
 
		private function EventMouseClick(e:MouseEvent):void
		{
			var dx:int = int(e.localX - this.x);
			var dy:int = int(e.localY - this.y);
			var timeForAnimation:Number = Math.sqrt(dx*dx + dy*dy) / _speed;
 
			_xTween = new Tween(this, "x", None.easeNone, thix.x, e.localX, timeForAnimation, true)
			_yTween = new Tween(this, "y", None.easeNone, thix.y, e.localY, timeForAnimation, true)
			_xTween.addEventListener(TweenEvent.MOTION_FINISH, onFinishHandler);
		{
 
		private function onFinishHandler(e:TweenEvent):void
		{
			e.target.removeEventListener(TweenEvent.MOTION_FINISH, onFinishHandler);
			_xTween = null;
			_yTween = null;
		{
	}
}
В данном примере будет происходить анимация твоего кружочка с одинаковой скоростью на любую дистанцию... и никаких недолетов/перелетов =)
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
еще, как вариант без сторонних твинов, имхо для таких вещей без них спокойнее
Код AS3:
package main
{
	import flash.display.*;
	import flash.events.*;
 
	public class Cor extends MovieClip
	{
 
		private var clickX:Number;
		private var clickY:Number;
 
		function Cor():void
		{
			//круг
			graphics.beginFill(0x0);
			graphics.drawCircle(0, 0, 5);
 
			addEventListener(Event.ADDED_TO_STAGE, onStage);
		}
 
		private function onStage(event:Event):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, onStage);
			stage.addEventListener(MouseEvent.CLICK, onStageClick);
			addEventListener(Event.ENTER_FRAME, onCorEneterFrame);
		}
 
		private function onStageClick(eve:MouseEvent):void
		{
			clickX = stage.mouseX;
			clickY = stage.mouseY;
		}
 
		private function onCorEneterFrame(event:Event):void
		{
			x += (clickX - x) / 4;//4 - на глаз, на вкус
			y += (clickY - y) / 4;
		}
 
	}
}

Старый 27.02.2010, 00:39
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Тут уж дело стиля =)
Мне напротив спокойней организовать твин по случаю, подтереть его после всех дел и никаких забот.
Кстати — в твоем примере стиль анимации будет типа easeOut. Но это красиво =)
Некрасиво только то, что анимация уже закончилась, а ENTER_FRAME еще работает, да еще и считает там что-то уже бесполезное. Но и это решается: проверил, выровнял, отписался.
Просто надо это все учесть.
__________________
Поймай яблоко 2!

Старый 27.02.2010, 01:58
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от sspy Посмотреть сообщение
обычный круг 5х5px
Улыбнуло. Насколько помню, у круга есть радиус и длина окружности.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 27.02.2010 в 02:08.
Создать новую тему Ответ Часовой пояс GMT +4, время: 04:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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