Четверг, 28 Марта 2024, 18:04

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение NPC(спрайты) (Решено)
Движение NPC(спрайты)
DivESДата: Четверг, 19 Июля 2018, 02:16 | Сообщение # 41
заслуженный участник
Сейчас нет на сайте
Цитата Reker ()
direction = point_direction(phy_position_x, phy_position_y, phy_position_xprevious, phy_position_yprevious);

Постой ка.. Так ведь наоборот нужно! Стартовые координаты должны быть с previous, а конечные - обычными:
Код
direction = point_direction(phy_position_xprevious, phy_position_yprevious, phy_position_x, phy_position_y);

Добавлено (19 Июля 2018, 02:16)
---------------------------------------------
Или это не совсем влияет? %)

RekerДата: Четверг, 19 Июля 2018, 02:27 | Сообщение # 42
почетный гость
Сейчас нет на сайте
DivES, Он просто поменял спрайты местами, где надо spr_left использует spr_right
Raven84Дата: Четверг, 19 Июля 2018, 07:08 | Сообщение # 43
старожил
Сейчас нет на сайте
Нифига вы тут настрочили за ночь! :D :D :D
Совершенно верно сказано выше, при включенной физике (хотя не совсем понимаю, зачем ее включать в обычном топ-даун шутере, или что у тебя там, все равно ничего почти из физики скорее всего использовать не будешь со своими базовыми знаниями) не работают стандартные в ГМС функции коллизий, передвижений и т.д. Т.е. hspeed и vspeed можете забыть в этом случае. С включенной физикой box2D, есть аналоги скоростей phy_speed_x и phy_speed_y - это x и y компоненты вектора скорости физического объекта.
Скажу сразу, что без физики сделать все то, что ты хочешь - проще не куда. Так что действительно не понимаю зачем ты ее включил. Ведь дальше ты вообще запутаешься во всех физических параметрах и соединениях.

Добавлено (19 Июля 2018, 06:36)
---------------------------------------------
Вы тут про direction в объекте говорили, но автор топика просто отключил поворот персонажа в начале кода (phy_fixed_rotation = true;//не обращай внимания), т.е. phy_rotation (это физический аналог угла image_angle с отключенной физикой) будет всегда равен нулю. Т.е. в его примере делать смену спрайта отталкиваясь от направления поворота объекта сделать не получится простым способом. По этому, он изобретает велосипед с высчетом вектора направления объекта, отталкиваясь от его координат прежних и текущих.

Добавлено (19 Июля 2018, 06:45)
---------------------------------------------
Reker,
Код
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; }


В этом куске кода ошибки. Я понимаю, что с включенной физикой этот код не будет работать, но он и с выключенной не будет работать. ГМС не примет выражение, типа if (direction >=225 < 315)
Вместо этого нужно писать if (direction >=225 && direction < 315)
Ну это уже так, для общего развития и понимания синтаксиса кода.

Добавлено (19 Июля 2018, 06:50)
---------------------------------------------
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=10 а vspeed=1. В идеале должен включаться спрайт походки вправо, а не вниз, так как он больше вправо идет. Но так как код выполняется построчно, то сначала пройдет проверка if (hspeed>0) { sprite_index=spr_up; } (кстати даже тут опечатка, спрайт должен включаться не для движения вверх, а для движения вправо, hspeed же горизонтальная скорость). Так вот после проверки спрайт правильно включится для движения вправо. Но код ведь продолжит выполняться дальше и дойдет до строки if (vspeed>0) { sprite_index=spr_down; } и спрайт тут же переключится на изображение походки вниз. Т.е. фактически он и будет отображаться всегда идущим вниз в моем описанном случае. Это будет смотреться так, будто персонаж смотрит вниз, а сам движется быстро вправо, боком как будто. :D

Добавлено (19 Июля 2018, 06:52)
---------------------------------------------
По этому в данном случае лучше использовать конструкцию с проверкой углов, как тут например:
Код
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; }


Только без ошибок и с переносом кода на физические рельсы.

Добавлено (19 Июля 2018, 06:57)
---------------------------------------------
Блин, меня аж бомбит! Зачем ты физику включил-то?! %) :D Ведь судя по твоему коду (ну по тому куску, что ты скидывал), у тебя даже коллизии физические обрабатываться не будут, так как ты просто принудительно меняешь его физические x и y ! Коллизии будут обрабатываться, только если ты двигаешь объекты силой (force), тогда он будет адевкатно сталкиваться со стенами и т.д. Но при принудительной смене физических координат, объект будет тупо наезжать на стены даже! Т.е. прийдется еще свои обработки коллизий отдельно писать! И это в том движке, где это уже все написано. Физику чаще всего включают именно, чтобы не париться с просчетом коллизий, а в этом коде даже это не будет использоваться! Зачем тогда она (физика)???!!! blink

Добавлено (19 Июля 2018, 07:00)
---------------------------------------------
Не иначе как себя только запутать и усложнить все до нельзя. Я иного оправдания не вижу тут.

Добавлено (19 Июля 2018, 07:08)
---------------------------------------------
Мой совет-не использоват чужой непонятный код, с кучей лишнего, адаптированного под нужды того, кто его писал, т.к. это тебе все равно не пригодится, а только запутает в понимании самого кода (если тем более ты только учишься). Я бы сел, и преписал все без физики. Поверь, в дальнейшем это тебя избавит от кучи еще больших головняков. Так как если ты с физикой не можешь просто спрайт направления поменять, то только подумай сам, когда ты перейдешь к более сложным вещам? Я бы советовал физику врубать, когда ты уже освоил сам ГМС (его встроенные упрощенные физические функции, те же vspeed, hspeed, direction и т.д.). Научившись хорошо работать с ними, ты с легкостью потом сможешь адаптироваться под физику.


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


Сообщение отредактировал Raven84 - Четверг, 19 Июля 2018, 07:09
RekerДата: Четверг, 19 Июля 2018, 07:51 | Сообщение # 44
почетный гость
Сейчас нет на сайте
Ух! Ну блин ребята! Прям спасибо вам большое. Действительно много узнал. Послушаю твой совет и вырублю я эту физику) Выручаете как только можете, я вам благодарен.

Добавлено (19 Июля 2018, 07:28)
---------------------------------------------
Сейчас кофейка набубеню и постараюсь сделать в лучшем виде!

Добавлено (19 Июля 2018, 07:51)
---------------------------------------------
Цитата Reker ()
Не иначе как себя только запутать и усложнить все до нельзя. Я иного оправдания не вижу тут.

И Raven84, Иногда люди совершают действия, которые сами не понимают. У меня было несколько планов на физическую систему да и мне было интересно переписывать код который я находил под физическую систему, искать как правильно написать, было интересно, но видимо пора упростить себе жизнь)


Сообщение отредактировал Reker - Четверг, 19 Июля 2018, 07:52
Raven84Дата: Четверг, 19 Июля 2018, 08:55 | Сообщение # 45
старожил
Сейчас нет на сайте
Reker,
Цитата
искать как правильно написать, было интересно

Ну не все то, что есть в интернете наисано как правильно! )) Вот этот твой кусок кода к примеру вообще не правильный. Я уже объяснял почему. Чувак, написавший его, просто перечеркивает встроенные коллизии одним махом, и видимо будет писать свои поверх в физическом движке. Ну может быть у него на то и были свои основания, но я не могу этого понять. )) Это как по мне не рационально и не очень логично.

Добавлено (19 Июля 2018, 08:55)
---------------------------------------------
А так появятся вопросы, спрашивай. Правда я тут редко бываю, сейчас все болше в ВК сижу параллельно разрабатывая несколько игрушек. Но в случае чего тут комьюнити по ГМС довольно отзывчивое. Я бы и с этим кодом помог, но не вижу смысла. Иначе всю игру прийдется за тебя переписать. :D Лучше ты начни сам (по примерам там или еще как), а если возникнет затык, то уже спрашивай. Вообще как по мне в интернете уже должно быть довольно много уроков и примеров для ГМС. Не знаю, не искал давно. Справки хватает почти в 80% случаев, когда более или менее освоишь сам язык ГМЛ.


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


Сообщение отредактировал Raven84 - Четверг, 19 Июля 2018, 08:52
RekerДата: Четверг, 19 Июля 2018, 15:02 | Сообщение # 46
почетный гость
Сейчас нет на сайте
Ещё раз спасибо
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение NPC(спрайты) (Решено)
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

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