Game maker language 对象赢得’;不要换精灵

Game maker language 对象赢得’;不要换精灵,game-maker-language,game-maker-studio-2,Game Maker Language,Game Maker Studio 2,我正在GMS 2中制作一个2D平板游戏,当我按下按钮时,我的玩家对象不会改变精灵,而这些按钮应该会使他改变射击和蹲姿。我试着把不同的姿势放到不同的精灵中,把不同的姿势放到同一精灵的不同帧中。这两种解决方案都不起作用,我有点渴望得到一些帮助 当前,姿势在单独的精灵中,代码如下所示: // Movement key_right = keyboard_check(ord(“D”)) key_left = keyboard_check(ord(“A”)) key_jump = keyboard_chec

我正在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
}

另外,请不要费心纠正我在最后一行缺少“;”的错误。我知道这是一个坏习惯,我知道我正在这样做,所以不要麻烦告诉我停止它。

首先:这是一个程序员论坛,这就是为什么每个人都会建议你在每个语句的结尾使用分号“;”

实际上,else if语句的代码只能以一种方式工作,这意味着在一次脚本执行中只能执行所有这些块中的一个

因此,如果执行第一个块级别,其他块级别将被完全忽略

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

因此,我们需要分析如何使该系统可靠,以便能够在不受其他模块影响的情况下执行所需的所有模块

试试这个:

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;
}
我只是做了以下几点:


当它检查第一个块时,将其取出,左键和右键为负数,然后将其放在该系统的末尾,就像开关系统的默认语句一样。

首先:这是一个程序员论坛,这就是为什么每个人都会建议您在每个语句末尾使用分号“;”

实际上,else if语句的代码只能以一种方式工作,这意味着在一次脚本执行中只能执行所有这些块中的一个

因此,如果执行第一个块级别,其他块级别将被完全忽略

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

因此,我们需要分析如何使该系统可靠,以便能够在不受其他模块影响的情况下执行所需的所有模块

试试这个:

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\u left和key\u right是负数,然后将其放在该系统的末尾,就像开关系统的默认语句一样。

还有,我不放“;”在陈述的最后,这是因为这是我所学的第一种语言,它建议我这样做。这就是为什么你应该一直使用它的原因,所以当你切换到另一种语言,比如java(我建议你试试,因为它很容易学,而且是面向对象的)时,记得使用投票系统。你很好,伙计。很抱歉。另外,我没有在语句末尾加“;”的原因是因为这是我所学的第一种语言,建议我这样做。这就是为什么你应该总是加“;”的原因,所以当你切换到另一种语言,比如java时(我建议你尝试一下,因为它很容易学习,而且是面向对象的)记住使用投票系统。你是威康兄弟。对。很抱歉。