sprite_index не работает gamemaker studio 2 (GML) - PullRequest
0 голосов
/ 18 сентября 2018

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

 if (key_right)
    {
    sprite_index = playerRightSpr;//<-------------
    image_speed = 1;                           //|
    }                                          //|
    if (key_left)                              //|
    {                                          //|
    sprite_index = playerLeftSpr;              //|
    image_speed = 1;                           //|
    }                                          //|
    if (key_left) && (key_right)               //|
    {                                          //|
    sprite_index = playerSpr;                  //|
    image_speed = 0;                           //|
    }                                          //|
    if (!key_right or key_left) //add this and this, doesn't work
    {                           //but it does when I remove this code.
    sprite_index = playerSpr;
    image_speed = 0;
    }

Есть ли другой способ сказать, стоя на месте, сделать sprite playerSpr, потому что кажется, что я пытаюсь попробоватьвызвать конфликт.Заранее спасибо Bhodi

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вот мое второе решение.Это произошло из моего собственного проекта, поэтому требует изменения всего кода.

Я объяснил каждый раздел комментариями рядом с каждой строкой.

Событие шага:

var hinput = 0; //hinput = Horizontal Input
hinput = keyboard_check(vk_right) - keyboard_check(vk_left); //the trick I've used to declare the movement system, based on the arrow keys. 
                                                             //pressing right = 1, pressing left = -1, pressing both or none = 0.

if (hinput != 0) //it is not 0, so the player is moving
{
    sprite_index = s_player_walk; //changes the current sprite to the walking animation
    image_xscale = hinput;        //changes the direction it's facing: 1 = right, -1 = left.
                                  //when it's 0, it keeps the last direction it faced.
} 
else //the player is not moving
{
    sprite_index = s_player_idle; //changes the current sprite to the idle animation
}

Что касается самих изображений.Для этого я использовал 2 отдельных спрайта:
s_player_idle, который существует только из 1 кадра, и
s_player_walk, который существует из 3 циклов.

Скорость изображения ужеопределяется в редакторе изображений для каждого отдельного спрайта, поэтому его не нужно снова определять в коде.

0 голосов
/ 19 сентября 2018

Если ваша сущность движется, вы можете просто использовать переменную скорости, чтобы сделать это.Например:

  • если ваша сущность имеет положительную скорость (идите направо), вы будете использовать PlayerRightSpr

  • , если ваша сущность имеет отрицательную скорость (идите налево) вы будете использовать PlayerLeftSpr

  • И если скорость равна 0, вы используете PlayerSpr

(Вместо двух разных спрайтов вы можете использовать image_xscaleтоже)

image_xscale = 1; (normal sprite)

image_xscale = -1; (flip on x axis : mirror)

И, наконец, вместо этого:

if (!key_right or key_left)

Используйте это:

if (!key_right || !key_left)

Или это:

if (key_right == 0 || key_left == 0)

Но вы правы, это не правильный способ сделать это

Надеюсь, этот способ хорош

...