|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Плавный поворот |
Страницы: 1 2 Next>> |
Автор | Сообщение | ||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 14-05-2006 01:16 | ||
Как сделать плавный поворот объекта в сторону другого? Например сделал пушку и монстра, надо чтоб пушка сама поворачивалась в сторону монстра, но не более чем на 5 градусов за шаг. |
|||
Mitrul гроссмейстер Группа: Сообщество GM Сообщений: 254 |
Добавлено: 14-05-2006 01:49 | ||
У пушки в степе: target_direction = point_direction(x, y, монстр.x, монстр.y); direction = target_direction; image_single = direction * image_number / 360; |
|||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 14-05-2006 03:52 | ||
Тут всё неправильно. Что за target_direction, в 6.1 этого нет и он здесь не нужен (direction=point_direction(x,y,монстр.x монстр.y))- получиться то же самое. И где тут 5 градусов за шаг? |
|||
Paradox магистр Группа: Сообщество 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} плюс минус дополнения. |
|||
Mitrul гроссмейстер Группа: Сообщество GM Сообщений: 254 |
Добавлено: 14-05-2006 13:45 | ||
Эт я из свой игры копировал... |
|||
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 14-05-2006 14:51 | ||
у тебя мнгновенный переход на нужное расстояние. | |||
ZAM гроссмейстер Группа: Сообщество GM Сообщений: 147 |
Добавлено: 14-05-2006 18:34 | ||
Я бы так сделал. 1) Определить направление, куда надо смотреть пушке. 2) Определить, куда смотрит пушка. 3) Если они не совпадают, то повернуть на пять градусов в ближайшую сторону. Ну всё это в step написать, и вперёд... тормозная пушка готова. . Только вот спрайт нужен из 72 картинок, если так делать . Возьми лучше по 10 градусов, тогда спрайт нужен из 36 картинок. |
|||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 14-05-2006 18:48 | ||
Можно как нибудь сделать чтоб в point_direction градусы не сбрасывались после 360, то есть 361,362,363...? | |||
ZAM гроссмейстер Группа: Сообщество GM Сообщений: 147 |
Добавлено: 14-05-2006 19:58 | ||
Это как это?? Эта функция считает направление от одной точки к другой в градусах. Тут уж ничего не придумаешь. (0-45-90...315-360(0)-45.. и т.д.). Вот если я не ошибаюсь.. То функции, которые используют направление как аргумент понимают градусы больше 360. | |||
Ka1miK Тут могла быть ваша реклама Группа: Сообщество GM Сообщений: 1014 |
Добавлено: 14-05-2006 21:36 | ||
И как ты это теоретически объяснишь? Что у на может быть больше 4 сторон света? |
|||
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 14-05-2006 22:20 | ||
он имеет виду, параметр накручивается, накручивается. Когда зашкаливает за 360, то он не обращается в 0, а продолжает расти. ЗЫ: нет, так нельзя.. =)) |
|||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 15-05-2006 00:19 | ||
ХА-ХА-ХА !!!!!!!!!!!!!!!!! качайте и смотрите- 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 Но может быть есть более правилньный способ??? |
|||
CRYSTALL m маэстро Группа: Сообщество 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 } } Вообщем что-то в этом духе. Поправте меня если что не так. |
|||
ZAM гроссмейстер Группа: Сообщество GM Сообщений: 147 |
Добавлено: 15-05-2006 12:25 | ||
К слову о математике предлагаю всё сделать в 3 строки : if (sin(угол на цель-направление пушки)<0) повернуть пушку по часовой стрелке; else повернуть против часовой стрелки; Я тут так прикинул, должно работать. Проверьте, если не работает, скажите - я додумаю. А, чуть не забыл, углы ставьте в радианах. |
|||
splean магистр Группа: Сообщество GM Сообщений: 443 |
Добавлено: 16-05-2006 09:10 | ||
:applause: | |||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 16-05-2006 18:02 | ||
Пробовал... У меня не получилось. Если не тяжело приведи пример. |
|||
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 16-05-2006 18:16 | ||
если это заработает, просто аплодисметы ! | |||
CH@$ER Дундук - не беспокоить! Группа: Модераторы Сообщений: 1435 |
Добавлено: 16-05-2006 18:37 | ||
А вот так:
Это у меня из танчиков с поворачивающейся башней:) tower_rotation - это поворот башни - у тебя - пушки. a - нужный угол (куда повернутся надо) |
|||
punker гроссмейстер Группа: Сообщество 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 Всё работает!!!!! НО ЕСТЬ ОДНА ПРОБЛЕМА - когда пушка "смотрит" в нужную сторону она трясётся!!! Кто знает как от этого избавиться??? |
|||
Paradox магистр Группа: Сообщество 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 Форум / Вопросы и Ответы (Для Опытных) / Плавный поворот |