Здравствуйте! Начал использовать GM недавно, так что в GML полный нуб... Помогите реализовать такую схему:
1) Постоянное перемещение объекта мышью, как будто это курсор. 2) При движении мыши объект должен плавно начинать двигаться, а когда мышь останавливается, так же тормозить (как по льду). 3) При приближении к границе комнаты, он должен плавно тормозить вплоть до полной остановки у самой границы.
у объекта в creat пишешь какую либо переменную например s=0 (это скорость с которой будет двигаться объект) s=distance_to_point(mouse_x,mouse_y)/6(где 6 может быть любое число в зависимости на сколько ты хочешь замедлить движение объекта) move_towards_point(mouse_x,mouse_y,s) все чем могу....возможно есть другие способы.....может это даже не работает
S.P.Q.R.
Сообщение отредактировал MegaGameMaster - Понедельник, 19 Ноября 2012, 00:20
у объекта в creat пишешь какую либо переменную например s=0 (это скорость с которой будет двигаться объект) s=distance_to_point(mouse_x,mouse_y)/6(где 6 может быть любое число в зависимости на сколько ты хочешь замедлить движение объекта) move_towards_point(mouse_x,mouse_y,s) все чем могу....возможно есть другие способы.....может это даже не работает
Спасибо, всё работает Держи + The order comes in the chaos
а у меня вот имеется космосим, в нем кораблик летит за курсором ,а мне вот интересно:как сделать так чтоб кораблик не моментально поворачивал за курсором,а плавно"как по льду"типа ? проект Mysterious Space. The losted moment
zaicev9797, просто в step кораблика пишешь move_towards_point(mouse_x,mouse_y,100) где 100 -скорость кораблика может быть любое значение. или ты имеешь в виду чтобы кораблик двигался по траектории по которой прошел курсор? S.P.Q.R.
вы меня немного неправильно поняли,мне нужно чтобы у моего кораблика была опр.управляемость, ато получается если курсор пронести через середину спрайта то он мгновенно развернется на180,а мне надо чтобы он разворачивался медленней проект Mysterious Space. The losted moment
Добавлено (23.11.2012, 12:41) --------------------------------------------- а можно сделать так чтобы хотябы враги не могли так резко менять направление?
В нормальных движках вроде как есть такое понятие как локальные координаты. В этом случае надо сохранять тягу вперёд в локальных координатах. То есть он всё время сохраняет движение вперёд но по мере поворота вектор вперёд меняется и получается дуга.
Вот как примеру я делал во флеше в недоделанной леталке (шифт форсаж на короткое время, мышь направление и стрельба) https://dl.dropbox.com/u/26347574/gamez/stepshooter.swf [не обращайте внимание на землю, что она в воздухе -> тестировал и отлаживал систему повреждения, ну и серый прямоугольник вокруг самолёта - визуализированный хит бокс].
Если локальных координат нет то можно зная какая скорость вперёд через синусы и косинусы получить скорость по осям.
Сообщение отредактировал ShadowZi - Пятница, 07 Декабря 2012, 09:34
или может быть можно как-то замутить через роут спид?
Попробуй в ГМ, я не силён. Но решение с раскладкой по осям прокатит везде.
Есть кстати ещё одна вещь, когда вспомнил про манёвренность. Если просто задавать скорость, то он будет разворачиваться не на месте а по дуге. Тот код как я понял постоянно держит в прицеле объект. В итоге дуга может получится очень маленькой может даже в виде точки.
Возможно ещё одним способом получить скорость разворота, которую я там тоже использовал (чтобы можно было прокачивать типа манёвренность). Узнай есть ли функции которые в ГМ разворачивают объект с определённой скоростью. Во флеше такого нет, поэтому у меня там каждый кадр(физики нет вообще всё свой родное)), я поворачиваю спрайт на определённый угол, до тех пор пока угол поворота спрайта, не станет близко в каких-то пределах углу который составляет направление на мышку и вектор строго вправо в глобальных координатах (благо во флеше есть функция, которая позволяет это узнать, но если что через синусы и косинусы можно получить и его зная координаты мышки и текущего положения спрайта)). Варьируя ту прибавку каждый кадр, получаем разное время с которым разворачивается спрайт и тем самым разную манёвренность)
Второй день в гм. Пытаюсь сделать игру в изометрии. вот как тут ГГерой будет поворачиваться в 8 направлениях.
Подскажите, пожалуйста, как сделать, чтобы герой поворачивался за курсором мыши. А точнее, чтобы менялись спрайты, когда я водил мышью вокруг него.
Можно высчитывать по углам от оси Х героя до курсора иыши. от 0 до 45 градусов - спрайт_1 от 45 до 90 градусов - спрайт 3 от 90 до 135 градусов - спрайт_3 и т.д.
Но как можно посчитать угол?
Добавлено (13.04.2014, 14:16) --------------------------------------------- Все. разобрался. Через point_direction
2) При движении мыши объект должен плавно начинать двигаться, а когда мышь останавливается, так же тормозить (как по льду).
Я знаю как сделать, чтобы при движении мыши происходило действие: Нужно в событии create сделать три переменные: mousebotx=0 mouseboty=0 time_mouse=0 Затем в этом же объекте в событии степ написать код:
time_mouse+=1 if time_mouse=1{mousebotx=mouse_x mouseboty=mouse_y} if time_mouse>2{if mouse_x!=mousebotx or mouse_y!=mouseboty{...Действие...} time_mouse=0}
Если подумать, то из этого можно сделать и наоборот, когда мышь стоит на месте... Вместо if mouse_x!=mousebotx or mouse_y!=mouseboty написать if mouse_x=mousebotx and mouse_y=mouseboty Думаю как тормозить и плавно двигаться ты знаешь.
Сообщение отредактировал Ямейкер - Понедельник, 23 Апреля 2018, 02:19