Движение NPC(спрайты)
|
|
DivES | Дата: Четверг, 19 Июля 2018, 00:48 | Сообщение # 21 |
заслуженный участник
Сейчас нет на сайте
| Цитата Reker ( ) sprite_index=spr=_up Что означает двойное присваивание?
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 00:51 | Сообщение # 22 |
почетный гость
Сейчас нет на сайте
| Как я понял. Услышал сейчас в одном видео, мы не можем использовать hspeed и vspeed тк я использую физическую систему.
|
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 00:53 | Сообщение # 23 |
заслуженный участник
Сейчас нет на сайте
| Reker, тогда посмотри в API, какие есть атрибуты для скорости динамического объекта. Желательно опять же в двух осях!
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 00:53 | Сообщение # 24 |
почетный гость
Сейчас нет на сайте
| Упс, очепятка, но в коде я её не написал. Просто в коде у меня длинное название и я просто сократил тут, но вместо удалить нажал на =. Моя ошибка
|
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:01 | Сообщение # 25 |
заслуженный участник
Сейчас нет на сайте
| Reker, а у npc тоже физика включена? Когда они по пути движутся? Но ведь direction должен быть даже у физ. объектов, не так ли?
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:07 | Сообщение # 26 |
почетный гость
Сейчас нет на сайте
| Сейчас смотрю видео и там человек для ходьбы персонажа использует как раз физическую систему и вот код
Код В Crete hsp = 0; vsp = 0; len = 0; Step //get axis var xaxis = (right_key - left_key); var yaxix = (down_key - up_key); //get direction var dir = point_direction(0, 0, xaxis, yaxis); //get length if (xaxis == 0 and yaxis = 0) { len = 0; } else { len = sp //скорость } //get hsp and vsp hsp = lengthdir_x(len, dir); vsp = lengthdir_y(len, dir); //move phy_position_x +=hsp; phy_position_y +=vsp;
Наверное тут и кроется ответ
Добавлено (19 Июля 2018, 01:04) --------------------------------------------- Да, без включенной физики он крашит игру
Добавлено (19 Июля 2018, 01:07) --------------------------------------------- ах! Вот забыл ещё написать Код //control sprite image_speed = sign(len) *2; if (len == 0) image_undex = 0; //vertical sprite if (vsp > 0) { sprite_index = spr_player_down } else if (vsp < 0) { sprite_index = spr_player_up } //hor sprites if (hsp > 0) { sprite_index = spr_player_right } else if (hsp < 0) { sprite_index = spr_player_left }
Сообщение отредактировал Reker - Четверг, 19 Июля 2018, 01:08 |
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:11 | Сообщение # 27 |
заслуженный участник
Сейчас нет на сайте
| Так, давай по порядку.
Код var xaxis = (right_key - left_key); Принимает значение 1, если нажата кнопка -> и -1, если нажата кнопка <-. Аналогично с yaxis... Далее находим ориентацию и длину пройденного пути (вроде бы). Только вот length = sp - не слишком понятно. sp ранее объявлена?Добавлено (19 Июля 2018, 01:11) ---------------------------------------------
Цитата Reker ( ) ах! Вот забыл ещё написать
Ну, всё прям точно так же, как мы и писали до этого! Только с введёнными новыми переменными
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:12 | Сообщение # 28 |
почетный гость
Сейчас нет на сайте
| Цитата DivES ( ) sp ранее объявлена? Ох. Моя оплошность, просто так привык уже к переменной sp. sp- скорость. У него она sp = 2;Добавлено (19 Июля 2018, 01:12) ---------------------------------------------
Цитата DivES ( ) Только с введёнными новыми переменными Да! Вот он и сказал, что hspeed и vspeed нельзя, тк физическая система, вот он и использует переменные hsp и vsp
|
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:14 | Сообщение # 29 |
заслуженный участник
Сейчас нет на сайте
| Reker, таааак, мы уже близко! Что теперь не работает? Ведь тот скрипт, что ты привёл - достаточно рабочий, насколько я могу судить!
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:19 | Сообщение # 30 |
почетный гость
Сейчас нет на сайте
| Если ты про этот код Код //control sprite image_speed = sign(len) *2; if (len == 0) image_index = 0; //vertical sprite if (vsp > 0) { sprite_index = spr_player_down } else if (vsp < 0) { sprite_index = spr_player_up } //hor sprites if (hsp > 0) { sprite_index = spr_player_right } else if (hsp < 0) { sprite_index = spr_player_left }
то всё равно нет!
Сообщение отредактировал Reker - Четверг, 19 Июля 2018, 01:20 |
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:20 | Сообщение # 31 |
заслуженный участник
Сейчас нет на сайте
| Цитата Reker ( ) image_undex = 0; опечатка, нет? Ну ты ведь адаптировал этот скрипт под свои переменные?
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:22 | Сообщение # 32 |
почетный гость
Сейчас нет на сайте
| Опечатка, в коде её нет) Да, переменные я задал.
|
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:24 | Сообщение # 33 |
заслуженный участник
Сейчас нет на сайте
| Reker, скинь полностью весь твой код, который должен работать, но не работает
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:37 | Сообщение # 34 |
почетный гость
Сейчас нет на сайте
| DivES, Код Create phy_fixed_rotation = true;//не обращай внимания var mymessage;// на это тоже
hsp = 0; vsp = 0; len = 0;
Step depth = -y;
phy_position_x += sign(obj_player.x - x); phy_position_y += sign(obj_player.y - y);
//control sprite image_speed = sign(len) *2; if (len == 0) image_index = 0; //vertical sprite if (vsp > 0) { sprite_index = spr_player_down } else if (vsp < 0) { sprite_index = spr_player_up } //hor sprites if (hsp > 0) { sprite_index = spr_player_right } else if (hsp < 0) { sprite_index = spr_player_left }
Добавлено (19 Июля 2018, 01:36) --------------------------------------------- Похоже я нашёл ошибку, надо задать xaxis и yaxix, но я не знаю что там писать. У него var xaxis = (right_key - left_key); var yaxix = (down_key - up_key), но тут для игрока. Добавлено (19 Июля 2018, 01:37) ---------------------------------------------
Код //get axis var xaxis = (right_key - left_key);// не понимаю, что писать, тк у меня не игрок а нпс var yaxix = (down_key - up_key); //get direction var dir = point_direction(0, 0, xaxis, yaxis); //нужно задать xaxis и yaxis //get length if (xaxis == 0 and yaxis = 0) { len = 0; } else { len = sp //скорость } //get hsp and vsp hsp = lengthdir_x(len, dir);// нужно задать dir vsp = lengthdir_y(len, dir);
Сообщение отредактировал Reker - Четверг, 19 Июля 2018, 01:26 |
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:40 | Сообщение # 35 |
заслуженный участник
Сейчас нет на сайте
| Reker, ну почему не работает - вижу. У нас vsp и hsp вообще не изменяются. То есть они как были 0, так и остаются всё время 0..
Код hsp = lengthdir_x(len, direction); vsp = lengthdir_y(len, direction); Попробуй вот это добавить перед //control sprite, это во-вторых. Во-первых, при объявлении переменных vsp, hsp и len, len = 2 (наша скорость).Добавлено (19 Июля 2018, 01:40) ---------------------------------------------
Цитата Reker ( ) Похоже я нашёл ошибку, надо задать xaxis и yaxix, но я не знаю что там писать. У него var xaxis = (right_key - left_key); var yaxix = (down_key - up_key), но тут для игрока.
Да, в этом ошибка, грубо говоря! Но в нашем случае с npc, мы можем напрямую получить direction. (можем ведь? :D) А он xaxis и yaxis использовал именно для получения direction персонажа.
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:42 | Сообщение # 36 |
почетный гость
Сейчас нет на сайте
| Хмм. Прогресс есть. Теперь он поменял спрайт, НО он использует только spr_right
|
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 01:45 | Сообщение # 37 |
заслуженный участник
Сейчас нет на сайте
| Reker, а всё потому что direction до сих пор не меняется.. Как было 0, так и есть. Блин. а ведь точно. Я и забываю об этом... Вот ты мне скажи, как мы можем узнать направление движения npc? Потому что нам только это и нужно. Для персонажа мы узнавали через xaxis и yaxis через нажатия клавиш. В случае с npc как? Не используя hspeed и vspeed..
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 01:53 | Сообщение # 38 |
почетный гость
Сейчас нет на сайте
| DivES, Вот мы и вернулись в самое начало) Я вот тоже сидел и думал, как? Добавлено (19 Июля 2018, 01:53) --------------------------------------------- решил добавить Код direction = point_direction(phy_position_x, phy_position_y, phy_position_xprevious, phy_position_yprevious); И он начал реагировать, но только меняет с права на лево, не использует анимацию хождения вниз и вверх
|
|
| |
DivES | Дата: Четверг, 19 Июля 2018, 02:00 | Сообщение # 39 |
заслуженный участник
Сейчас нет на сайте
| Цитата Reker ( ) решил добавить Отличная идея! Сам сидел писал через "x" и "xprevious"... То есть меняется только анимация по горизонтали, не затрагивая вертикальную?
|
|
| |
Reker | Дата: Четверг, 19 Июля 2018, 02:04 | Сообщение # 40 |
почетный гость
Сейчас нет на сайте
| DivES, да.
|
|
| |