Просмотр полной версии : движение по направлению клипа.
Денис Фет
03.07.2007, 18:36
Подскажите пожалуйста начинающему флешеру. Есть некий мувклип lodka, который нужно заставить плавать по поверхности озера. Все это вид сверху. Притом при нажатии кнопок влево и вправо лодка должна менять направление (это я понял что делается просто через изменения значения _rotation). А вот при нажатии вверх лодка должна плыть в ту сторону, в которую направлена ее корма (т.е. в ту сторону в которую она повернута) с неким ускорением (у меня пока стоит вверх). При нажатии клавиши вниз ускорение должно падать и лодка должна остановиться. Лодка не должна выплыть за пределы экрана. Хотелось бы еще наличие энерции при движении, повороте и остановке. Вот собственно и все. Наверняка для вас эта задачка окажется не сложной, но меня она поставила в тупик :-( Код у меня пока написан самый что ни наесть простой:
onClipEvent (enterFrame) {
if (Key.isDown(Key.UP))
{
_y = _y-2;
}
if (Key.isDown(Key.DOWN))
{
_y = _y+2;
}
if (Key.isDown(Key.LEFT))
{
_rotation = _rotation-3;
}
if (Key.isDown(Key.RIGHT))
{
_rotation = _rotation+3;
}
}
подскажите пожалуйства в каком направлении дигаться, какой нужен алгоритм? я запутался.
Денис Фет, физику учи дорогой... а точнее кинематику... :) ну и геометрия тебе в помощь...
//////////////////////////////////
/////создаём машинку =)///////////
//////////////////////////////////
this.createEmptyMovieClip("mc", 1);//здесь мы создаенм муви-клип оболочку, это не так обязательно просто изврат =) вы можете использовать свой обьект нарисованный в мувике дав ему на сцене имя //"mc"
with (this.mc) {//здесь мы рисуем то что будет в нашей оболочке муви-клипе с именем "mc"
lineStyle(2, 0x000000, 100);
beginFill(0x6633CC);
moveTo(-25, -25);
lineTo(-25, -25);
lineTo(25, -25);
lineTo(25, 25);
lineTo(-25, 25);
endFill();
}
///////////////////////////////////
///////задаем координаты на поле///
///////////////////////////////////
this.mc._x = 275;//здесь задаем первоначальные координаты расположения на по оси икс
this.mc._y = 200;//здесь по игрику
this.mc._rotation = -90;//этой командой мы задаем поворот нашей машинки если мы этого несделаем то она может ездить боком =) если машинка нарисована не програмно это необязательно развернуть можно вручную
////////////////////////////////////
////////задаём управление///////////
////////////////////////////////////
this.mc.onEnterFrame = function() {//этим мы создаем блок в котором будем писать команды которые будет выполнять наша машинка
if (Key.isDown(Key.RIGHT)) {//этой командой мы крутим машинку вправо
this._rotation += 3;//_rotation значит вращать
}
if (Key.isDown(Key.LEFT)) {//этой командай задаем поворот влево
this._rotation -= 3;
}
if (Key.isDown(Key.UP)) {//задаем движение вперед
this._y += 4*Math.sin(this._rotation*(Math.PI/180));//вычисляем синус
this._x += 4*Math.cos(this._rotation*(Math.PI/180));//вычисляем косинус угла поворота машинки переводя его в радианы,так же обратите внимание число 4 отвечает за величену радиуса поворота тоесть тем выше число тем больше радиус
}
if (Key.isDown(Key.DOWN)) {//задаем движение назад при этом скорость уменьшаем в 2 раза
this._y -= (4*Math.sin(this._rotation*(Math.PI/180)))/2;
this._x -= (4*Math.cos(this._rotation*(Math.PI/180)))/2;
}
};
:)
Денис Фет
03.07.2007, 20:06
Денис Фет, физику учи дорогой... а точнее кинематику... :) ну и геометрия тебе в помощь...
правду говоришь, помниться еще в школе мне говорили преподаватели учи физику учи, а я все не учил и не учил :-)
Денис Фет
03.07.2007, 20:16
D12 огромное спасибо, теперь картина для меня стала намного яснее. Код работает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.