Пятница, 29 Марта 2024, 03:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение NPC(спрайты) (Решено)
Движение NPC(спрайты)
RekerДата: Вторник, 17 Июля 2018, 03:59 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Сделал путь для нпс и в step написал
Код

if (direction==90) {  
sprite_index=spr_up; }

if (direction==0) {
sprite_index=spr_right; }

if (direction==270) {
sprite_index=spr_down; }

if (direction==180) {
sprite_index=spr_left; }


но идёт воспроизводит НПС анимацию spr_right и всё.


Сообщение отредактировал Reker - Четверг, 19 Июля 2018, 15:23
BrightSpotДата: Вторник, 17 Июля 2018, 12:48 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
direction редко совпадает точно - проверяй диапазоны(вместо "==90" ">=45 && < 135" и т.д)


Более мощный компьютер глючит быстрее и точнее.
RekerДата: Среда, 18 Июля 2018, 12:42 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Эх. Не работает. Мож кто знает, как сделать смену спрайтов при движении в разные стороны у НПС?
Raven84Дата: Среда, 18 Июля 2018, 14:02 | Сообщение # 4
старожил
Сейчас нет на сайте
Reker, для начала неплохо было бы знать как это самое движение реализовано у тебя. Потому что даже твой вариант в топике может адекватно и правильно сменять спрайт при определенной смене движения игрока.

Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
RekerДата: Среда, 18 Июля 2018, 15:14 | Сообщение # 5
почетный гость
Сейчас нет на сайте
У игрока спрайты нормально работают. Мне нужно для НПС которых я создал. Чтоб при движении оных в разные стороны менялись спрайты. Например я задал путь для нпс и надо чтобы он менял спрайты, когда меняет направление или следует за тобой и в зависимости в какую сторону он следует за тобой меняется спрайт. Использую физику
Raven84Дата: Среда, 18 Июля 2018, 19:44 | Сообщение # 6
старожил
Сейчас нет на сайте
Reker, Погоди. Я не понял. Так ты используешь для NPC заранее созданные пути (path) и так же в комнате включена реальная физика box2d?

Добавлено (18 Июля 2018, 19:43)
---------------------------------------------
NPC ходят как? Чисто строго в четырех направлениях: юг, север, запад, восток? Т.е. строго вниз, строго вверх, вправо и влево под углами в 90гр все? Или они плавно меняют свой угол на поворотах?

Добавлено (18 Июля 2018, 19:44)
---------------------------------------------
Расскажешь, а там попытаемся помочь. Ну или скрин плюсом кидани. Не знаю как другие, но я визуально инфу лучше воспринимаю. :D


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Среда, 18 Июля 2018, 19:45
DivESДата: Среда, 18 Июля 2018, 20:38 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Raven84, очевидно, если он использует пути, спрайт всегда будет выставлен "так, как он есть". То есть поворот будет равен 0 градусов, а значит будет проигрываться анимация движения вправо - spr_right :D
Я не знаю, какими средствами обладает GMS, но как альтернативу предложил бы написать функцию, которая бы возвращала направление, в котором движется спрайт: -x, x, -y, y. И уже в зависимости от этого менялась бы и анимация :)
RekerДата: Среда, 18 Июля 2018, 22:46 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Цитата DivES ()
очевидно, если он использует пути, спрайт всегда будет выставлен "так, как он есть"

Есть ещё второй НПС и он не по пути ходить, а просто следует за персонажем и он тоже не хочет юзать другую анимацию
Код
phy_position_x += sign(obj_player.x - x);
phy_position_y += sign(obj_player.y - y);

if (direction >=45  < 135) {  
sprite_index=spr_up; }

if (direction >=315 < 45) {
sprite_index=spr_right; }

if (direction >=225 < 315) {
sprite_index=spr_down; }

if (direction >=135 < 225 ) {
sprite_index=spr_left; }


вот код который он использует.

Добавлено (18 Июля 2018, 22:46)
---------------------------------------------
Цитата Raven84 ()
NPC ходят как? Чисто строго в четырех направлениях: юг, север, запад, восток? Т.е. строго вниз, строго вверх, вправо и влево под углами в 90гр все? Или они плавно меняют свой угол на поворотах?
Код

if (direction >=45  < 135) {  
sprite_index=spr_up; }

if (direction >=315 < 45) {
sprite_index=spr_right; }

if (direction >=225 < 315) {
sprite_index=spr_down; }

if (direction >=135 < 225 ) {
sprite_index=spr_left; }
path_start(path_1, 1, 0, 0);


Я ещё смотрел одного разработчика, но он использовал систему с макросами, а по скольку он на иглише был я её не совсем понял, других вариантов найти не могу, но всё ещё пытаюсь. Сколько не смотрю, люди показывают лишь как враг следует за игроком, но смены анимации нет.


Сообщение отредактировал Reker - Среда, 18 Июля 2018, 22:47
DivESДата: Среда, 18 Июля 2018, 22:47 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Reker, вот именно! Он просто следует за персонажем. Но при этом поворот (direction) персонажа он не повторяет.
Тебе нужно, чтобы npc меняли свою ориентацию (поворот, direction). Как можно сделать это?

Есть функция, которая определяет скорость передвижения спрайта?


Сообщение отредактировал DivES - Среда, 18 Июля 2018, 22:50
RekerДата: Среда, 18 Июля 2018, 22:50 | Сообщение # 10
почетный гость
Сейчас нет на сайте
И да, ходят они плавно по этому пути, но даже если путь сделать строгим это ничего не меняет

Добавлено (18 Июля 2018, 22:50)
---------------------------------------------

Цитата DivES ()
Как можно сделать это?

я занимаюсь разработкой игры только с конца прошлого года и многого не знаю, но может image_angel, хотя она изменяет только направление спрайта. Наверное point_direction, сейчас попробую.
DivESДата: Среда, 18 Июля 2018, 23:36 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Reker, я залез в справку и вот что могу написать:
Там у экземпляров объекта есть hspeed и vspeed, - скорость перемещения по горизонтали и по вертикали.
Не знаю твоего уровня владения языком программирования, который там используется, но попробуй реализовать вот что:
Код
if (hspeed>0) {
    sprite_index=spr_right; }

То есть, если скорость перемещения по горизонтали > 0, значит, что персонаж движется вправо, не так ли? Значит ставим соответствующую анимацию.
То же самое для остальных направлений движения...
if (hspeed<0) {} - для движения влево
if (vspeed>0) {} - для движения вверх и так далее!

Я не совсем знаю, как там оси координат направлены, так что, если что, скорректируй!

Добавлено (18 Июля 2018, 23:36)
---------------------------------------------
Ну как, получается что-нибудь? :)

Сообщение отредактировал DivES - Среда, 18 Июля 2018, 23:16
RekerДата: Среда, 18 Июля 2018, 23:47 | Сообщение # 12
почетный гость
Сейчас нет на сайте
Цитата DivES ()
Пока нет, но ещё пытаюсь, что нибудь провернуть. Я использую физику и сейчас пробую так
Код
phy_position_x += phy_hspeed;
phy_position_y += phy_vspeed; phy_position_x += sign(obj_player.x - x);
phy_position_y += sign(obj_player.y - y);

if (phy_hspeed>0) {
    sprite_index=spr_right}
if (phy_hspeed<0) {
    sprite_index=spr_left}
if (phy_vspeed<0) {
    sprite_index=spr_up}
    
if (phy_vspeed>0) {
    sprite_index=spr_down}

пока не работает, но руки всё ещё не упали. Держу в курсе

Добавлено (18 Июля 2018, 23:47)
---------------------------------------------
Тк нету Phy_hspeed и phy_vspeed, то создал переменные и прировнял их к нулю

DivESДата: Среда, 18 Июля 2018, 23:48 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
Reker, а вид в игре какой? Уместна ли тут физика. И что такое "phy_"? Так происходит обращение к экземпляру?
RekerДата: Среда, 18 Июля 2018, 23:57 | Сообщение # 14
почетный гость
Сейчас нет на сайте
В геймейкере можно включить физику, тип будешь толкать обьекты автоматичести и т.д. Мне сложно объяснить понятнее, тк я только поверхностно понимаю это. Включенная физика определяет твой дальнейший код. Пример. Движение к игроку
Код

move_toward_point(obj_player.x, obj_player.y, 1) //двигается к кординатам ху игрока со скоростью 1

Но если использовать физику
Код

phy_position_x += sign(obj_player.x - x);
phy_position_y += sign(obj_player.y - y);

Добавлено (18 Июля 2018, 23:57)
---------------------------------------------
камера как в Undertale

DivESДата: Четверг, 19 Июля 2018, 00:02 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Цитата Reker ()
Тк нету Phy_hspeed и phy_vspeed, то создал переменные и прировнял их к нулю

так их и нет. Нужны именно hspeed и vspeed... Ты пробовал так, как я писал выше?
RekerДата: Четверг, 19 Июля 2018, 00:18 | Сообщение # 16
почетный гость
Сейчас нет на сайте
Цитата DivES ()
как я писал выше?

Да, попробовал, вообще не реагирует

Добавлено (19 Июля 2018, 00:18)
---------------------------------------------
Казалось бы! Такая простая вещь! Анимация для объекта. Почти в каждой игре есть, но вот ответ так трудно найти. Хехе, вот начал заниматься всем этим с декабря и как же мне это всё нравиться.

DivESДата: Четверг, 19 Июля 2018, 00:22 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
Reker, я бы с радостью потестировал, почему не откликается, но у меня нет GM. Ведь судя по справке, hspeed и vspeed наряду с direction - атрибуты объекта... Ты ведь понимаешь, что мы пытаемся сделать? В зависимости от скорости поставить нужную анимацию %)
Но почему же не работает?
Код
if (hspeed>0) {  
sprite_index=spr_up; }

if (hspeed<0) {
sprite_index=spr_right; }

if (vspeed>0) {
sprite_index=spr_down; }

if (vspeed<0) {
sprite_index=spr_left; }

Это ведь в step прописывал? А может быть это и не в step прописывать надо..
RekerДата: Четверг, 19 Июля 2018, 00:28 | Сообщение # 18
почетный гость
Сейчас нет на сайте
Цитата DivES ()
А может быть это и не в step прописывать надо..

Да как не в степ? Ведь нужно постоянно проверять, в какую сторону движется. Да, я понял, что мы хотим сделать. Чтоб развеять твои возможные сомнения или, может быть, показать как я ошибаюсь. Естесна hspeed>0 означает, что вертикальная скорость больше 0, а следовательно он движется вертикально, то используем спрайт вверх. С другими так же. Надеюсь я правильно понял
DivESДата: Четверг, 19 Июля 2018, 00:38 | Сообщение # 19
заслуженный участник
Сейчас нет на сайте
Цитата Reker ()
Естесна hspeed>0 означает, что вертикальная скорость больше 0

Да, только горизонтальная ^_^
Давай так... Создай ещё одного npc. Но оставь его на месте, то есть ни к каким путям не привязывай. И ему в step сделай всё то же самое, что и тут
Цитата DivES ()
if (hspeed>0) {  
sprite_index=spr_up; }

if (hspeed<0) {
sprite_index=spr_right; }

if (vspeed>0) {
sprite_index=spr_down; }

if (vspeed<0) {
sprite_index=spr_left; }


Только вместо hspeed и vspeed напиши obj_player.hspeed и obj_player.vspeed! А потом попробуй походить главным героем и посмотри, будет ли меняться спрайт у этого нового npc. Я занимаюсь такими вещами, чтобы понять, от чего стоит отталкиваться :)
RekerДата: Четверг, 19 Июля 2018, 00:43 | Сообщение # 20
почетный гость
Сейчас нет на сайте
Цитата DivES ()
А потом попробуй походить главным героем и посмотри, будет ли меняться спрайт у этого нового npc

Неа, не меняется. Чтоб не напутать, вот что писал
Код

if (obj_player.hspeed>0) {  
sprite_index=spr=_up; }

if (obj_player.hspeed<0) {
sprite_index=spr=_right; }

if (obj_player.vspeed>0) {
sprite_index=spr=_down; }

if (obj_player.vspeed<0) {
sprite_index=spr=_left; }
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение NPC(спрайты) (Решено)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг