2017-09-26 107 views
1

我正在GMS 2中进行2D平台游戏,当我按下应该让他改变为拍摄和蹲伏姿势的按钮时,我的播放器对象不会改变精灵。我曾尝试将不同的姿势放入不同的精灵中,并将姿势放入同一精灵中的不同帧中。这些解决方案都没有工作,我有点绝望的一些帮助。对象不会改变精灵

目前的姿态是在单独的精灵和代码如下所示:

// Movement 
key_right = keyboard_check(ord(“D”)) 
key_left = keyboard_check(ord(“A”)) 
key_jump = keyboard_check(ord(“W”)) 
key_crouch = keyboard_check(ord(“S”)) // This button doesn’t work 

// Attacks 
key_shoot = keyboard_check(vk_space) // Neither does this one 
key_punch = keyboard_check(ord(“J”)) 
key_kick = keyboard_check(ord(“K”)) 

... 

if (!key_left) and (!key_right) { 
    sprite_index = spr_player_stand 
    image_speed = 0 
    image_index = 0 
} else if (key_left) and (key_right) { 
    sprite_index = spr_player_stand 
    image_speed = 0 
    image_index = 0 
} else if (key_left) { 
    xscale = -0.6 
    sprite_index = spr_player_run 
} else if (key_right) { 
    xscale = 0.6 
    sprite_index = spr_player_run 
} else if (key_crouch) { 
    sprite_index = spr_player_crouch 
} else if (key_shoot) { 
    sprite_index = spr_player_shoot 
} else if (key_punch) { 
    sprite_index = spr_player_punch 
} else if (key_kick) { 
    sprite_index = spr_player_kick 
} 

附:请不要纠正我在线路末尾缺少的“;”。我知道这是一个坏习惯,我知道我正在这样做,所以不要打扰我告诉我要阻止它。

回答

1

第一:这是一个程序员论坛,这就是为什么大家会建议你使用分号“;”在每次发言结束时;

如果语句只用一种方法工作,那么您实际上是其他代码,这意味着所有这些块中只有一个将在一次脚本执行中执行。

所以如果第一个块级别被执行,其他的被完全忽略。

因此,当else系统中的key_crouch为真时,它永远不会到达key_crouch块,因为它首先发现key_left和key_right是false;

所以我们需要分析一下如何让这个系统可靠地执行,以便能够执行所有的程序块,然后需要其他程序块的影响。

试着用这一个:

if (key_left) and (key_right) { 
    sprite_index = spr_player_stand; 
    image_speed = 0; 
    image_index = 0; 
} else if (key_left) { 
    xscale = -0.6; 
    sprite_index = spr_player_run; 
} else if (key_right) { 
    xscale = 0.6; 
    sprite_index = spr_player_run; 
} else if (key_crouch) { 
    sprite_index = spr_player_crouch; 
} else if (key_shoot) { 
    sprite_index = spr_player_shoot; 
} else if (key_punch) { 
    sprite_index = spr_player_punch; 
} else if (key_kick) { 
    sprite_index = spr_player_kick; 
} else { 
    sprite_index = spr_player_stand; 
    image_speed = 0; 
    image_index = 0; 
} 

我只是做了以下内容:

取出时,检查它的第一个块KEY_LEFT和KEY_RIGHT是负的,然后把它的结束系统就像交换机系统的默认语句一样。

+0

此外,我没有把“;”放在声明的最后是因为这是我学到的第一种语言,建议我这样做。 – Shock9616

+0

这是一个加号,为什么你应该尝试总是把它,所以当你切换到另一种语言如java例如(我建议你尝试一下,因为很容易学习和面向对象) –

+0

好的。感谢您的输入! – Shock9616