Среда, 19 Мая 2021, 06:32

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Движение NPC(спрайты) (Решено)
Движение 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, да.
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Движение NPC(спрайты) (Решено)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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