Движение 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 Совершенно верно сказано выше, при включенной физике (хотя не совсем понимаю, зачем ее включать в обычном топ-даун шутере, или что у тебя там, все равно ничего почти из физики скорее всего использовать не будешь со своими базовыми знаниями) не работают стандартные в ГМС функции коллизий, передвижений и т.д. Т.е. 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; } и спрайт тут же переключится на изображение походки вниз. Т.е. фактически он и будет отображаться всегда идущим вниз в моем описанном случае. Это будет смотреться так, будто персонаж смотрит вниз, а сам движется быстро вправо, боком как будто.
Добавлено (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) --------------------------------------------- Блин, меня аж бомбит! Зачем ты физику включил-то?! Ведь судя по твоему коду (ну по тому куску, что ты скидывал), у тебя даже коллизии физические обрабатываться не будут, так как ты просто принудительно меняешь его физические x и y ! Коллизии будут обрабатываться, только если ты двигаешь объекты силой (force), тогда он будет адевкатно сталкиваться со стенами и т.д. Но при принудительной смене физических координат, объект будет тупо наезжать на стены даже! Т.е. прийдется еще свои обработки коллизий отдельно писать! И это в том движке, где это уже все написано. Физику чаще всего включают именно, чтобы не париться с просчетом коллизий, а в этом коде даже это не будет использоваться! Зачем тогда она (физика)???!!!
Добавлено (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) --------------------------------------------- А так появятся вопросы, спрашивай. Правда я тут редко бываю, сейчас все болше в ВК сижу параллельно разрабатывая несколько игрушек. Но в случае чего тут комьюнити по ГМС довольно отзывчивое. Я бы и с этим кодом помог, но не вижу смысла. Иначе всю игру прийдется за тебя переписать. Лучше ты начни сам (по примерам там или еще как), а если возникнет затык, то уже спрашивай. Вообще как по мне в интернете уже должно быть довольно много уроков и примеров для ГМС. Не знаю, не искал давно. Справки хватает почти в 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 |
почетный гость
Сейчас нет на сайте
| Ещё раз спасибо
|
|
| |
|