如何更好地组织混乱的IF语句?(避免嵌套)



我的代码如下(注意,这不是关于特定的代码,它更像是我从一个项目中偷来的一个例子):

if (colliding) { // On ground anims
if (playerData["xSpeed"] < 1 && playerData["xSpeed"] > -1) {
if (playerData["animState"] != "idle") {
if (playerData["lastDirection"] == 1) {
spriteSetAnimation(playerData["spriteId"], playerData["animIdleLeft"]);
} else {
spriteSetAnimation(playerData["spriteId"], playerData["animIdleRight"]);
}
playerData["animState"] = "idle";
}
} else if (playerData["xSpeed"] > 1) {
if (playerData["animState"] != "runRight") {
spriteSetAnimation(playerData["spriteId"], playerData["animRunCycleRight"]);
playerData["animState"] = "runRight";
playerData["lastDirection"] = 1;
}
} else if (playerData["xSpeed"] < -1) {
if (playerData["animState"] != "runLeft") {
spriteSetAnimation(playerData["spriteId"], playerData["animRunCycleLeft"]);
playerData["animState"] = "runLeft";
playerData["lastDirection"] = -1;
}
}
} else {
if (playerData["xSpeed"] < 0.5 && playerData["xSpeed"] > -0.5) {
if (playerData["animState"] != "jumpStraight") {
spriteSetAnimation(playerData["spriteId"], playerData["animJumpStraight"]);
playerData["animState"] = "jumpStraight";
}
} else if (playerData["xSpeed"] > 0.5) {
if (playerData["animState"] != "jumpRight") {
spriteSetAnimation(playerData["spriteId"], playerData["animJumpRight"]);
playerData["animState"] = "jumpRight";
}
} else if (playerData["xSpeed"] < -0.5) {
if (playerData["animState"] != "jumpLeft") {
spriteSetAnimation(playerData["spriteId"], playerData["animJumpLeft"]);
playerData["animState"] = "jumpLeft";
}
}
}

它没有返回任何东西,所以我不能使用反向检查。我仍然不知道如何修复这种面条面条代码。

将代码分解成函数可以更好地组织代码。例如,可以创建一个函数来处理玩家在地面上时的动画,可以创建一个单独的函数来处理玩家在空中时的动画。

可能像这样:

function runRight(xSpeed,animState,spriteId,animRunCycleRight){
if(xSpeed > 1){
if(animState != "runRight"){
spriteSetAnimation(spriteId,animRunCycleRight);
animState = "runRight";
}
}
}
function runLeft(xSpeed,animState,spriteId,animRunCycleLeft){
if(xSpeed < -1){
if(animState != "runLeft"){
spriteSetAnimation(spriteId,animRunCycleLeft);
animState = "runLeft";
}
}
}

最新更新