Форум 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)
-   -   Движение(2 вопроса) (http://www.flasher.ru/forum/showthread.php?t=98647)

en1gmat1c 18.07.2007 05:19

Движение(2 вопроса)
 
У меня к вам 2 вопроса(а точнее 2 варианта реализации . . .)
Есть космический корабль

1)Допустим юзер там шелкает куда кораблику переместится,сначала я его поворачиваю
Код:

(Math.atan2 (a["ships" + String (MyShip)]._y - y, a["ships" + String (MyShip)]._x - x) * 180 / Math.PI) + 270;
- поворачивается,все хорошо,но я не могу его остановить что бы он продолжил свое движение.Как мне остановить rotation мувика когда он уже повернулся в нужную сторону

2)Второй вариант,движение корабля происходит по программно созданной кривой,но увы я не знаю как привязать клип корабля к кривой,чтобы он по ней двигался.

Therion 18.07.2007 05:57

вот функция к первому вопросу
Код:

function spaceship(shipname) {
        onMouseDown = function () {
                X = _xmouse;
                Y = _ymouse;
        };
        shipname.onEnterFrame = function() {
                XD = this._x-X;
                YD = this._y-Y;
                R = Math.atan2(YD, XD)/(Math.PI/180);
                G = R-this._rotation;
                this._rotation += G/10;
        };
}

К 2-му варианту надо знать функцию кривой и потом както там с ней работать....:))

CorC 18.07.2007 10:20

1. останавливать так же как начинали движение (вы же не написали как)
2. использовать координаты точек этой же кривой (раз она програмно) в качестве координат скажем центра корабля.

Жень Шень 18.07.2007 12:00

Цитата:

Сообщение от en1gmat1c
...Есть космический корабль...

Лекция: Математика и физика Flash. Как раз в качестве примера комический караблик! Возможно лекция поможет по многим аспектам.

GreatRash 18.07.2007 12:51

Ух ты какая статья полезная!!! Спасибо большое :drinks:

P.S. Извините за offtop.

goarcade 18.07.2007 13:39

мне кажется, этот вариант реализации тоже подойдет:
Код:

createEmptyMovieClip("korablik",0);
korablik.beginFill(0xcccccc,100);
drawRect(korablik,-10,-5,20,10);
korablik.endFill();

createEmptyMovieClip("target",1);
target.beginFill(0xcc0000,100);
drawRect(target,-2,-2,4,4);
target.endFill();

korablik._x=100
korablik._y=100

function onMouseDown() {
        target._x = _xmouse;
        target._y = _ymouse;
        onEnterFrame = function () {
                goto(korablik,target._x,target._y,0.2,4)
        };
}
function goto(mc:MovieClip, gotoX:Number, gotoY:Number, w:Number, speed:Number) {
        var nx:Number = Math.cos(mc._rotation*Math.PI/180);
        var ny:Number = Math.sin(mc._rotation*Math.PI/180);
        var dx:Number = gotoX-mc._x;
        var dy:Number = gotoY-mc._y;
        //находим угол, между направлением мувика и точки{gotoX,gotoY}
        var theta:Number = Math.atan2(nx*dy-ny*dx, nx*dx+ny*dy);
        //w - коэффициент вращения от 0 до 1
        mc._rotation += w*theta*180/Math.PI;
        mc._x += nx*speed;
        mc._y += ny*speed;
}
function drawRect(mc:MovieClip,x:Number,y:Number,w:Number,h:Number)
{
        mc.moveTo(x  ,y  );
        mc.lineTo(x+w,y  );
        mc.lineTo(x+w,y+h);
        mc.lineTo(x  ,y+h);
        mc.lineTo(x  ,y  );
}



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

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