![]() |
|
||||||||||
|
|||||
|
Допустим вот есть некий объект. Назовём его условно танк. У танка есть дуло. Дуло должно вращаться за мышкой. Сам танк должен управляться стрелками клавиатуры.
1) задача чтобы дуло не перескакивало когда градус задаётся больше 180 или -180. Тоесть чтобы дуло всегда вращалось по наименьшей дуге. 2) задача чтобы y и x танка изменялись в зависимости от деферента. Тоесть куда смотрит нос танка туда он и едет. Исходник прилагается. Посмотрите, пожалуйста, кто в тригонометрии разбирается.
__________________
Он манэ падмэ ХУМ! |
|
|||||
|
бородатые вопросы, однако..
в танке: function onMouseMove(){//дуло за мышой (дуло д.б. в {0,0} танка)
t_turet._rotation=180/Math.PI*Math.atan2(this._ymouse,this._xmouse)
}
var speed=2;
function onEnterFrame(){//едем по курсу
var d=0;
var r=0;
d+=Key.isDown(Key.UP);
d-=Key.isDown(Key.DOWN);
r-=Key.isDown(Key.LEFT);
r+=Key.isDown(Key.RIGHT);
_rotation+=r;
_x+=d*Math.cos(Math.PI*_rotation/180)*speed;
_y+=d*Math.sin(Math.PI*_rotation/180)*speed;
}
|
|
|||||
|
Спасибо за скрипт курса. А вот про пушку немного не то. Примерно тоже самое я уже написал. Правда более громоздко получилось. Идея в том чтобы пушка двигалась за мышкой с затухающиим отстованием, тоесть как будто с некой физикой. Как у меня в примере, но там есть одна проблема. Когда _rotation стаит например на 170 и скрипт задаёт -170 градусов для нового поворота то дуло совершает оборот не в 20 градусов как надо а в 340. Как это решить, ума не приложу. По идее надо найти самую короткую дугу и вычесть её из текущего градуса. Тоесть тут надо в радианах как то, а я в этом ни бум бум...
![]()
__________________
Он манэ падмэ ХУМ! |
|
|||||
|
ясно, надо просто 'длинные' (>180) повороты заменить 'короткими':
var speed=2;
function onEnterFrame(){
//едем по курсу
var d=0;
var r=0;
d+=Key.isDown(Key.UP);
d-=Key.isDown(Key.DOWN);
r-=Key.isDown(Key.LEFT);
r+=Key.isDown(Key.RIGHT);
_rotation+=r;
_x+=d*Math.cos(Math.PI*_rotation/180)*speed;
_y+=d*Math.sin(Math.PI*_rotation/180)*speed;
//крутим дулом
var targAngle=180/Math.PI*Math.atan2(this._ymouse,this._xmouse);
var currAngle=t_turet._rotation;
var da=(targAngle-currAngle);
if(da>180)da-=360;
if(da<-180)da+=360;
t_turet._rotation+=da/10;
}
|
|
|||||
|
Божемой - так просто...что то не то у меня с головой. Всё время ищу не там. Спасибо огромное...
![]()
__________________
Он манэ падмэ ХУМ! |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|