Плавный поворот

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Плавный поворот

Страницы: 1 2 Next>> новая тема

Автор Сообщение

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 14-05-2006 01:16
Как сделать плавный поворот объекта в сторону другого? Например сделал пушку и монстра, надо чтоб пушка сама поворачивалась в
сторону монстра, но не более чем на 5 градусов за шаг.

гроссмейстер
Группа: Сообщество GM
Сообщений: 254
Добавлено: 14-05-2006 01:49
У пушки в степе:

target_direction = point_direction(x, y, монстр.x, монстр.y);
direction = target_direction;
image_single = direction * image_number / 360;

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 14-05-2006 03:52
У пушки в степе:

target_direction = point_direction(x, y, монстр.x, монстр.y);
direction = target_direction;
image_single = direction * image_number / 360;

Тут всё неправильно.
Что за target_direction, в 6.1 этого нет и он здесь не нужен (direction=point_direction(x,y,монстр.x монстр.y))- получиться то же самое.
И где тут 5 градусов за шаг?

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 14-05-2006 06:34
target_direction - это переменная, которую ты вел сам. Насчет плавного - тут сложно. Тут играет разница, что градусы выше 30 считаются уже от 0-ля. Вот примерный код
D=direction-dir
if D>180{D-=360}
if D<-180{D+=360}
if D>0{direction+=5}
if D<0{direction-=5}
плюс минус дополнения.

гроссмейстер
Группа: Сообщество GM
Сообщений: 254
Добавлено: 14-05-2006 13:45
Тут всё неправильно.
Что за target_direction, в 6.1 этого нет и он здесь не нужен (direction=point_direction(x,y,монстр.x монстр.y))- получиться то же самое.
И где тут 5 градусов за шаг?

Эт я из свой игры копировал...

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 14-05-2006 14:51
у тебя мнгновенный переход на нужное расстояние.

гроссмейстер
Группа: Сообщество GM
Сообщений: 147
Добавлено: 14-05-2006 18:34
Я бы так сделал.
1) Определить направление, куда надо смотреть пушке.
2) Определить, куда смотрит пушка.
3) Если они не совпадают, то повернуть на пять градусов в ближайшую сторону.
Ну всё это в step написать, и вперёд... тормозная пушка готова. . Только вот спрайт нужен из 72 картинок, если так делать . Возьми лучше по 10 градусов, тогда спрайт нужен из 36 картинок.

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 14-05-2006 18:48
Можно как нибудь сделать чтоб в point_direction градусы не сбрасывались после 360, то есть 361,362,363...?

гроссмейстер
Группа: Сообщество GM
Сообщений: 147
Добавлено: 14-05-2006 19:58
Это как это?? Эта функция считает направление от одной точки к другой в градусах. Тут уж ничего не придумаешь. (0-45-90...315-360(0)-45.. и т.д.). Вот если я не ошибаюсь.. То функции, которые используют направление как аргумент понимают градусы больше 360.

Тут могла быть ваша реклама
Группа: Сообщество GM
Сообщений: 1014
Добавлено: 14-05-2006 21:36
Можно как нибудь сделать чтоб в point_direction градусы не сбрасывались после 360, то есть 361,362,363...?

И как ты это теоретически объяснишь? Что у на может быть больше 4 сторон света?

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 14-05-2006 22:20
он имеет виду, параметр накручивается, накручивается. Когда зашкаливает за 360, то он не обращается в 0, а продолжает расти.
ЗЫ: нет, так нельзя.. =))

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 15-05-2006 00:19
Это как это?? Эта функция считает направление от одной точки к другой в градусах. Тут уж ничего не придумаешь. (0-45-90...315-360(0)-45.. и т.д.). Вот если я не ошибаюсь.. То функции, которые используют направление как аргумент понимают градусы больше 360.

И как ты это теоретически объяснишь? Что у на может быть больше 4 сторон света?

он имеет виду, параметр накручивается, накручивается. Когда зашкаливает за 360, то он не обращается в 0, а продолжает расти.
ЗЫ: нет, так нельзя.. =))


ХА-ХА-ХА !!!!!!!!!!!!!!!!!
качайте и смотрите-

www.megaultra.narod.ru/gun.gm6-19.5кб

Я СДЕЛАЛ ЭТО!!!
8 часов просидел, но всё таки СДЕЛАЛ!

Вот:

D=point_direction(x,y,monster.x,monster.y)+PD
if D-DIR<(-180)then
{
PD+=360;
DIR+=5;
}
if D-DIR>(180)then
{
PD-=360;
DIR-=5;
}
if DIR<(D)then DIR+=5
if DIR>(D)then DIR-=5
image_angle=DIR

Но может быть есть более правилньный способ???

маэстро
Группа: Сообщество GM
Сообщений: 812
Добавлено: 15-05-2006 04:10
Математику учить лучше надо! вместе с геометрией.
Кстати я почти то же самое(учёт перехода через 0 и 360) сделал за 1-2 часа. Тоже парился долго. Вроде лёгкая вещь, а на деле реализовать сложно. Можно было бы написать так:

near=instance_nearest(x,y,target)
if point_direction(x,y,target.x,target.y)>direction+5 then direction-=5
if point_direction(x,y,target.x,target.y)<direction-5 then direction+=5

Вот такой код не катит.Да и вон там тоже не совсем правильно.
Нужно вот так:

near=instance_nearest(x,y,target)
pd=point_direction(target.x,target.y,Obj2.x,Obj2.y);
kkk=5;
if pd<180 then
{
if drr<pd+180 and drr>pd then
{
drr-=kkk;
}
if drr>pd+180 then
{
if drr<360 then
{
drr+=kkk;
}
else
{
drr=0;
}
}
if drr<pd then drr+=kkk;
}
else
{
if drr>pd-180 and drr<pd then
{
drr+=kkk;
}
if drr<pd-180 then
{
if drr>0 then
{
drr-=kkk;
}
else
{
drr=360;
}
}
if drr>pd then
{
drr-=kkk
}
}

Вообщем что-то в этом духе. Поправте меня если что не так.

гроссмейстер
Группа: Сообщество GM
Сообщений: 147
Добавлено: 15-05-2006 12:25
К слову о математике предлагаю всё сделать в 3 строки
:

if (sin(угол на цель-направление пушки)<0)
повернуть пушку по часовой стрелке;
else повернуть против часовой стрелки;

Я тут так прикинул, должно работать.
Проверьте, если не работает, скажите - я додумаю.

А, чуть не забыл, углы ставьте в радианах.

магистр
Группа: Сообщество GM
Сообщений: 443
Добавлено: 16-05-2006 09:10
:applause:

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 16-05-2006 18:02
К слову о математике предлагаю всё сделать в 3 строки
:

if (sin(угол на цель-направление пушки)<0)
повернуть пушку по часовой стрелке;
else повернуть против часовой стрелки;

Я тут так прикинул, должно работать.
Проверьте, если не работает, скажите - я додумаю.

А, чуть не забыл, углы ставьте в радианах.

Пробовал... У меня не получилось.
Если не тяжело приведи пример.

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 16-05-2006 18:16
если это заработает, просто аплодисметы !

Дундук - не беспокоить!
Группа: Модераторы
Сообщений: 1435
Добавлено: 16-05-2006 18:37
А вот так:
for (i=0; i<8 i+=1)
begin
a=point_direction(x,y,mouse_x,mouse_y)
b=tower_rotation
w=a-b
//image_angle=tower_rotation
if w>0.1 and w<180 tower_rotation+=0.1
if w<-180 tower_rotation+=0.1
if w<-0.1 and w>-180 tower_rotation-=0.1
if w>180 tower_rotation-=0.1
end;

Это у меня из танчиков с поворачивающейся башней:) tower_rotation - это поворот башни - у тебя - пушки.
a - нужный угол (куда повернутся надо)

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 16-05-2006 22:00
ZAM ты ГЕНИЙ !!!!!!!!!!!

if sin(degtorad(point_direction(x,y,mouse_x,mouse_y)-direction)<0
then direction-=5
else direction+=5
image_angle=direction

Всё работает!!!!!

НО ЕСТЬ ОДНА ПРОБЛЕМА - когда пушка "смотрит" в нужную сторону она трясётся!!!
Кто знает как от этого избавиться???

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 16-05-2006 23:02
if sin(degtorad(point_direction(x,y,mouse_x,mouse_y)-direction)<-0.1{direction-=5}
if sin(degtorad(point_direction(x,y,mouse_x,mouse_y)-direction)>0.1{direction+=5}
image_angle=direction

Страницы: 1 2 Next>> новая тема
Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Плавный поворот

Отвечать на темы в данном разделе могут только зарегистрированные пользователи

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU