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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 24.04.2007, 15:09
goder вне форума Посмотреть профиль Отправить личное сообщение для goder Найти все сообщения от goder
  № 1  
goder
[+3 24.04.07]

Регистрация: Apr 2007
Сообщений: 38
По умолчанию Движение от точки х1 у1 в точку х2 у2

Здраствуйте у меня проблема с организацией движение из одной точки в другую с определенной скоростью
вот код приведу весь класс

Код:
class Sheep extends Object
{
	public var speed;
	public var linkMovie:MovieClip;
	public var linkSheep:MovieClip;
	public var linkMiniMap:MovieClip;
	public var linkMap:MovieClip;
	private var xa, inter, m_x, xd, m_y, yd, x_mov, y_mov;
	private var y_up = 0;
	private var x_up = 0;
	private var kadrtek = 1;
	private var path_dr=0;
	public function resize_sheep(angle,type)
	{
		if(type==1){
			
		linkSheep._height=linkSheep._height/angle
		
		linkSheep._width=linkSheep._width/angle
		}
		if(type==0){
		linkSheep._height=linkSheep._height*angle
		linkSheep._width=linkSheep._width*angle
		}
	}
	public function Sheep(Map:MovieClip)
	{
		this.linkMap = Map;
		//this.linkSheep = sheep;
	}
	public function go(gox, goy, path_draw)
	{
		
		var _loc3;
	
		path_dr=path_draw;
		xd = this.linkMovie._x + this.linkMovie._width / 2;
		yd = this.linkMovie._y + this.linkMovie._height / 2;
		xa = xd + 10;
		m_x = gox;
		m_y = goy;
		
		if (path_draw == 1)
		{
			
			//trace(this.linkMap)
		this.linkMap.clear();
		this.linkMap.lineStyle(1, 255, 100);
		this.linkMap.moveTo(xd, yd);
		this.linkMap.lineTo(m_x, m_y);
		this.linkMap.endFill();
			//draw_path();
		}
		_loc3 = Math.round(this.get_angle(xd, yd, m_x, m_y) * 3.333333E-001);
		clearInterval(inter);
		inter = setInterval(this, "play_rot", 20, _loc3);
		if (xd < m_x)
		{
			x_up = 1;
		}
		else
		{
			x_up = 0;
		}
		// end else if
		if (yd < m_y)
		{
			y_up = 1;
		}
		else
		{
			y_up = 0;
		}
		// end else if
	}
	// End of the function
	function get_angle(xc, yc, xm, ym)
	{
		var _loc5;
		var _loc6;
		var _loc8;
		var _loc3;
		_loc5 = Math.sqrt((xc - xm) * (xc - xm) + (yc - ym) * (yc - ym));
		_loc6 = Math.sqrt((xc - xa) * (xc - xa));
		_loc8 = Math.sqrt((xa - xm) * (xa - xm) + (yc - ym) * (yc - ym));
		_loc3 = Math.acos((_loc5 * _loc5 + _loc6 * _loc6 - _loc8 * _loc8) / (2 * _loc5 * _loc6)) * 5.729578E+001;
		if (ym > yc)
		{
			_loc3 = 360 - _loc3;
		}
		// end if   
		return (_loc3);
	}
	// End of the function
	function play_rot(kadr1)
	{
		var _loc4;
		var _loc3;
		var _loc2;
		
		_loc4 = this.get_nap_rotate(kadrtek, kadr1);
		if (kadrtek < kadr1)
		{
			if (_loc4 == 1)
			{
				if (kadrtek == 120)
				{
					kadrtek = 1;
				}
				// end if   
				kadrtek = kadrtek + 1;
			}
			else
			{
				if (kadrtek == 0)
				{
					kadrtek = 120;
				}
				// end if   
				kadrtek = kadrtek - 1;
			}
			// end else if
			this.linkSheep.gotoAndStop(kadrtek);
			if (kadrtek == kadr1)
			{
				clearInterval(inter);
				if (Math.abs(m_x - xd) > Math.abs(m_y - yd))
				{
					x_mov = speed;
					_loc3 = xd - m_x;
					y_mov = Math.abs((yd - m_y) / (_loc3 / x_mov));
				}
				else
				{
					y_mov = speed;
					_loc2 = yd - m_y;
					x_mov = Math.abs((xd - m_x) / (_loc2 / y_mov));
				}
				// end else if
				inter = setInterval(this, "move_sheep", 5);
			}
			// end if   
		}
		else
		{
			if (_loc4 == 1)
			{
				if (kadrtek == 0)
				{
					kadrtek = 120;
				}
				// end if   
				kadrtek = kadrtek - 1;
			}
			else
			{
				if (kadrtek == 120)
				{
					kadrtek = 1;
				}
				// end if   
				kadrtek = kadrtek + 1;
			}
			// end else if
			this.linkSheep.gotoAndStop(kadrtek);
			if (kadrtek == kadr1)
			{
				clearInterval(inter);
				if (Math.abs(m_x - xd) > Math.abs(m_y - yd))
				{
					x_mov = 1;
					_loc3 = xd - m_x;
					y_mov = Math.abs((yd - m_y) / (_loc3 / x_mov));
				}
				else
				{
					y_mov = 1;
					_loc2 = yd - m_y;
					x_mov = Math.abs((xd - m_x) / (_loc2 / y_mov));
				}
				// end else if
				inter = setInterval(this, "move_sheep", 20);
			}
			// end if   
		}
		// end else if
	}
	// End of the function
	function get_nap_rotate(tek_kletka, kletka)
	{
		var _loc3;
		var _loc2;
		if (tek_kletka <= 60)
		{
			_loc3 = Math.abs(kletka - tek_kletka);
			_loc2 = Math.abs(120 - kletka + tek_kletka);
		}
		else
		{
			_loc3 = Math.abs(kletka - tek_kletka);
			_loc2 = Math.abs(120 - tek_kletka + kletka);
		}
		// end else if
		if (_loc3 < _loc2)
		{
			return (1);
		}
		else
		{
			return (0);
		}
		// end else if
	}
	// End of the function
	function move_sheep()
	{
		var _loc4;
		var _loc3;
		var clear_p=0;
		_loc4 = linkMovie._x + linkMovie._width / 2;
		_loc3 = linkMovie._y + linkMovie._height / 2;
		if (path_dr==1){
		this.linkMap.clear();
		this.linkMap.lineStyle(1, 255, 100);
		this.linkMap.moveTo(_loc4, _loc3);
		this.linkMap.lineTo(m_x, m_y);
		this.linkMap.endFill();
		}
		if (_loc4 >= m_x)
		{
			linkMovie._x = linkMovie._x - x_mov;
		}
		else
		{
			linkMovie._x = linkMovie._x + x_mov;
		}
		// end else if
		if (_loc3 >= m_y)
		{
			linkMovie._y = linkMovie._y - y_mov;
		}
		else
		{
			linkMovie._y = linkMovie._y + y_mov;
		}
		linkMiniMap._x=linkMovie._x/ 12.8
		linkMiniMap._y=linkMovie._y/ 12.8
		// end else if
		_loc4 = linkMovie._x + linkMovie._width / 2;
		_loc3 = linkMovie._y + linkMovie._height / 2;
		if (x_up == 1 && y_up == 1 && (_loc4 >= m_x && _loc3 >= m_y))
		{
			clear_p=1
			clearInterval(inter);
		}
		// end if   
		if (x_up == 0 && y_up == 0 && (_loc4 <= m_x && _loc3 <= m_y))
		{
			//trace("stop");
			clear_p=1
			clearInterval(inter);
		}
		// end if   
		if (x_up == 0 && y_up == 1 && (_loc4 <= m_x && _loc3 >= m_y))
		{
			clear_p=1
			clearInterval(inter);
		}
		// end if   
		if (x_up == 1 && y_up == 0 && (_loc4 >= m_x && _loc3 <= m_y))
		{
			clear_p=1
			clearInterval(inter);
		}
		if(clear_p==1 && path_dr==1){
		this.linkMap.clear();
		}
		// end if   
	}
	// End of the function
	function draw_path()
	{
		trace(this.linkMap)
		this.linkMap.clear();
		this.linkMap.lineStyle(1, 255, 100);
		this.linkMap.moveTo(xd, yd);
		this.linkMap.lineTo(m_x, m_y);
		this.linkMap.endFill();
	}
	// End of the function
}
Вот тут я определяю по сколько прибавлять или отнимать
а дальше в move_sheep()
определяю в какую сторону идти
Код:
if (Math.abs(m_x - xd) > Math.abs(m_y - yd))
				{
					x_mov = 1;
					_loc3 = xd - m_x;
					y_mov = Math.abs((yd - m_y) / (_loc3 / x_mov));
				}
				else
				{
					y_mov = 1;
					_loc2 = yd - m_y;
					x_mov = Math.abs((xd - m_x) / (_loc2 / y_mov));
				}
но проблема выходит серавно скорость не постоянная скачет сама по себе в чем проблема пример тут
http://middle-ages.ru/battletest.html

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

Регистрация: Jul 2006
Адрес: Новосибирск
Сообщений: 530
Отправить сообщение для Tardos Mors с помощью ICQ
F1->Класс Tween.
Там все есть

Старый 24.04.2007, 16:14
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 3  
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
А классик-то крякнутый, похоже.

Старый 24.04.2007, 21:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Поздравляем goder с плюсом.

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

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

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


 


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


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