![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+3 24.04.07]
Регистрация: Apr 2007
Сообщений: 38
|
Здраствуйте у меня проблема с организацией движение из одной точки в другую с определенной скоростью
вот код приведу весь класс 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 |
|
|||||
|
F1->Класс Tween.
Там все есть |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
А классик-то крякнутый, похоже.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Поздравляем goder с плюсом.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:25. |
|
|
« Предыдущая тема | Следующая тема » |
|
|