Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Движение от точки х1 у1 в точку х2 у2 (http://www.flasher.ru/forum/showthread.php?t=94963)

goder 24.04.2007 15:09

Движение от точки х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

Tardos Mors 24.04.2007 16:09

F1->Класс Tween.
Там все есть

Kikasso 24.04.2007 16:14

А классик-то крякнутый, похоже.

etc 24.04.2007 21:25

Поздравляем goder с плюсом.


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

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