3 回答

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)。

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 個按鈕,如何跟蹤?

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(),然后相應地繼續。
- 3 回答
- 0 關注
- 245 瀏覽
添加回答
舉報