PDA

Просмотр полной версии : Движение(2 вопроса)


en1gmat1c
18.07.2007, 05:19
У меня к вам 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
...Есть космический корабль...
Лекция: Математика и физика Flash (http://www.intuit.ru/department/internet/flashmxstudio/8/1.html). Как раз в качестве примера комический караблик! Возможно лекция поможет по многим аспектам.

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 );
}