【问题标题】:Object won’t change sprites对象不会改变精灵
【发布时间】:2018-03-08 00:33:09
【问题描述】:

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

附:请不要费心纠正我缺少“;”在行尾。我知道这是一个坏习惯,而且我知道我正在这样做,所以不要费心告诉我要停止它。

【问题讨论】:

    标签: game-maker-language game-maker-studio-2


    【解决方案1】:

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

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

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

    所以当 key_crouch 在 else if 系统中为真时,它永远不会到达 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_left和key_right是否定的,然后像switch系统的默认语句一样把它放在系统的末尾。

    【讨论】:

    • 另外,我没有放“;”的原因在陈述的最后是因为这是我学到的第一种建议我这样做的语言。
    • 这是一个加分项,为什么您应该始终尝试使用它,因此当您切换到另一种语言(例如 java)时(我建议您尝试一下,因为它很容易学习并且是面向对象的)
    • 记得使用投票系统。你是好朋友。
    • 对。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多