【发布时间】:2015-07-16 04:37:16
【问题描述】:
我有一个保龄球游戏,它获取保龄球列表,然后通过这段代码运行它们以生成一个穿过 UI 上的帧的字符串。如果用户击球 (0) 或击球 (10),则代码可以正常工作。但是,如果它介于 1 和 9 之间,则无法生成字符串。为什么是这样?我已经搜索并尝试了许多其他方法来做到这一点,但这似乎是唯一可行的方法。
public static StringBuilder FormatRolls (List<int> rolls) {
StringBuilder output = new StringBuilder();
for (int i=0; i < rolls.Count; i++) {
if (rolls.Count >= 19 && rolls[i] == 10) { //Bonus End-Frame Strike
output.Append ("X");
} else if (rolls[i] == 0) { //Gutter
output.Append ("-");
} else if (rolls[i-1] + rolls[i] == 10 && rolls.Count > 1) { //Spare
output.Append ("/");
} else if (rolls[i] == 10 && rolls[i+1] == 0) { //Strike
output.Append ("X");
} else { //Normal bowls 1-9
output.Append (rolls[i].ToString());
}
}
output.ToString();
return output;
}
这是写入所有帧的代码:
public void FillRolls (List<int> rolls) {
StringBuilder scoresString = FormatRolls(rolls);
for (int i=0; i<scoresString.Length; i++) {
frameText[i].text = scoresString[i].ToString();
}
}
非常感谢任何帮助,我已经被困了好几天试图让它工作......
【问题讨论】:
-
你确定你还有其他值吗?
-
值会在调用脚本之前添加到卷中,因此卷中总会有一些东西。不,不是休息,但我确实有一个 try-catch 方法可以跳过填充字符串,以防
FillRolls()失败try { scoreDisplay.FillRolls(rolls); scoreDisplay.FillFrames (ScoreMaster.ScoreCumulative(rolls)); } catch { Debug.LogWarning("FillRollCard failed"); } -
对于这样的代码,通常最简单的方法是在 if-else 级联中添加一些
Console.WriteLine语句并查看执行了哪些分支。在每次循环迭代中输出rolls[i]的值也有帮助。 -
在 Unity 3D 中,您可能希望使用
Debug.Log或 (LogWarning,LogError) 而不是Console.WriteLine。
标签: c# string list unity3d stringbuilder