亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何盡量減少 else if 語句的使用?

我如何盡量減少 else if 語句的使用?

C#
鳳凰求蠱 2022-07-10 10:08:41
如何設置方向的值而不必拋出所有其他選項?if (Input.GetKey(right_button)) { direction = 1; }else if(Input.GetKey(left_button)) { direction = -1; }        else { direction = 0; }if (direction!=0) { rb.velocity = new Vector2(player_speed*direction, rb.velocity.y);  }我需要將玩家輸入轉化為運動。我不能使用軸,因為我不能像使用這種方法那樣輕松地修改它們。如何優化這段代碼?
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

在沒有 if/else 的情況下編寫上述內容的另一種方法如下:


direction = Input.GetKey(right_button) 

                ? 1

                : Input.GetKey(left_button)

                      ? -1 

                      : 0;

我不知道這是否更具可讀性。在這種情況下,我認為這是您希望如何編寫這段代碼的偏好,而不是確定更具可讀性。換句話說,我不認為 if/else 語句不可讀——作為一個小小的修改,我建議你將正文放在另一行而不是同一行——但這又是個人喜好:)。


if (Input.GetKey(right_button)) 

    direction = 1; 

}

else if(Input.GetKey(left_button)) 

    direction = -1; 

}

else 

    direction = 0; 

}

關于您的第二個問題,您的代碼中沒有任何性能問題。


另一種方法如下:


// set the value of 0 to direction from the start and change it if it is needed

direction = 0;

if (Input.GetKey(right_button)) 

    direction = 1; 

}

if(Input.GetKey(left_button)) 

    direction = -1; 

}

本質上direction,我們從一開始就將 的值設置為 0,并且僅在需要時才重新設置該值(Input.GetKey(right_button)或者Input.GetKey(left_button)返回 true)。


查看完整回答
反對 回復 2022-07-10
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您對優化的擔憂還為時過早。就性能而言,@Christos 的答案是最好的(復制如下)


// set the value of 0 to direction from the start and change it if it is needed

direction = 0;

if (Input.GetKey(right_button)) 

    direction = 1; 

}

if(Input.GetKey(left_button)) 

    direction = -1; 

}

這是唯一的優化,因為它從代碼路徑中刪除了一個分支。


我想說的是風格和可讀性,遠離三元運算符(使用 bool ? 1 : 0 語法)。對于返回具有明確條件的清晰可讀值的任何內容,它們通常會導致更混亂的代碼。


在這些不同的實現中要考慮的事情是,如果您希望您的角色僅移動四個方向(假設您可能會向上和向下添加)或支持對角線移動。刪除代碼中的“else”語句將使您可以沿對角線移動。如果您保留“else if”,那么您將只能在基本方向上移動。如果您只想左右移動,則需要考慮同時按下兩者時會發生什么。玩家無處可去?玩家是否朝著最后一次按下的方向移動?如果向上和向下相加,如果按下了 3 個按鈕,如何跟蹤?


查看完整回答
反對 回復 2022-07-10
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

您可以定義一個集合來確定哪些輸入提供哪個方向:


var directionMap = new List<(bool isInputPressed, int directionalValue)>

{

    (Input.GetKey(right_button), 1),

    (Input.GetKey(left_button), -1)

};

然后要獲得方向,您只需directionalValue從集合中的記錄中獲取isInputPressed正確的位置:


var direction = directionMap.Where(x => x.isInputPressed).Sum(x => x.directionalValue);

如果同時按下兩個按鈕,在此處使用.Where()可能會產生意想不到的結果。如果這永遠不會發生,您可以更改上面的內容以使用.SingleOrDefault():


var direction = directionMap.SingleOrDefault(x => x.isInputPressed).directionalValue;

請注意,如果一次按下多個按鈕,這將產生異常。您可以在 try/catch 塊中處理此異常?;蛘吣梢栽谡{用之前驗證是否只按下了一個.SingleOrDefault(),然后相應地繼續。


查看完整回答
反對 回復 2022-07-10
  • 3 回答
  • 0 關注
  • 245 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號