我正在使用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
}
P.S。请不要纠正我在行尾的缺乏“;”。我知道这是一个坏习惯,我知道我这样做,所以不要打扰告诉我阻止它。
答案 0 :(得分:0)
首先:这是一个程序员论坛,这就是为什么每个人都会建议你使用分号&#34 ;;"在每个陈述的最后;
如果语句仅使用一种方式,则实际上是else的代码,这意味着在一次脚本执行中只会执行所有这些块中的一个。
因此,如果执行第一个块级别,则完全忽略其他块级别。
所以当key_crouch在else if系统中为true时它永远不会到达key_crouch块,因为它首先发现key_left和key_right为false;
所以我们需要分析如何让这个系统可靠地阻止执行,然后需要whitout受其他块的影响。
试试这个:
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为负数时取出第一个块,然后将其作为系统的结尾,就像交换机系统的默认语句一样。