我正在制作一个团结的游戏,我有这个' if statement'通过每5波我的商店菜单将变得可见。代码确实有效,但我确信我做错了什么或者做得更好!
if (waveCount == 5 || waveCount == 10 || waveCount == 15 || waveCount == 20 || waveCount == 25 || waveCount == 30 || waveCount == 35 || waveCount == 40 || waveCount == 45 || waveCount == 50)
{
// yield return new WaitForSeconds(shopWait);
shopPanel.SetActive(true);
}
正如您所看到的那样,语句'不是很好,通常它一直持续到waveCount == 100
,但我把它切掉了。必须有一个更简单或更简洁的方法来做到这一点:/但我无法绕过它:(
修改1 :
谢谢,我对模数知之甚少,知道我知道我要阅读的内容:)
答案 0 :(得分:6)
您可以使用模运算:
if (waveCount % 5 == 0)
答案 1 :(得分:2)
是的,确实有更简单的方法。如果你使用一些数学和逻辑,你可以想出来。
由于您要检查waveCount
的值是否为5的倍数,您可以使用%
来获取waveCount / 5
的提醒。如果该提醒为0,则waveCount
是5的倍数。
if (waveCount % 5 == 0 && waveCount <= 100)
当waveCount <= 100
大于100时,我添加waveCount
来复制代码的行为,即不进入if语句。
或者,您可以将所有值放入列表中:
var list = new List<int>();
for (int i = 1 ; i <= 20 ; i++) {
list.Add(i * 5);
}
然后检查列表中是否包含数字:
if (list.Contains(waveNumber))
这样做的好处是,如果您决定改变游戏的工作方式,并说可以在第9,52和77波打开商店菜单,您只需将数字添加到列表中,而无需修改if语句。这提供了很大的灵活性。
答案 2 :(得分:2)
if (waveCount % 5 == 0 && waveCount <= 50) {
//...code
}
答案 3 :(得分:1)
如果你的“if”语句的正文只包含shopPanel.SetActive(true);
,你就可以在不使用“if”的情况下做到这一点。
shopPanel.SetActive(waveCount % 5 == 0 && waveCount <= 50);
答案 4 :(得分:0)
试一试
if (waveCount % 5 == 0 && waveCount <= 50)
答案 5 :(得分:0)
使用modulo - 运算符:
// POST: api/Events
[HttpPost]
public ActionResult PostEvent([FromBody] object savedEvent)
{
Event addedEvent = JsonConvert.DeserializeObject<Event>(savedEvent.ToString());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
运算符计算整数除法的余数。在您的情况下,该语句应返回零,表示您的数字除以if(waveCount % 5 == 0 && waveCount <= 100) ...
没有余数。
答案 6 :(得分:0)
只是概括:如果您拥有的数据与模式不匹配,您可以在集合中放置所有要匹配的内容,然后测试该集合的成员资格:
var thingsToMatch = Set(2, 5, 8, 14, 23, 80, 274...);
if (someNumber in thingsToMatch) {...}
只要您知道每次调用函数时都没有重新创建集合,这已被证明相当快。如果您的语言没有自动缓存该集,则可以将其设置为该函数的静态变量。
答案 7 :(得分:0)
您可以使用余数运算符:
if (waveCount % 5 == 0 && waveCount > 0 && waveCount <= 50)
{
//yield return new WaitForSeconds(shopWait);
shopPanel.SetActive(true);
}
答案 8 :(得分:0)
您可以测试除以5的除数是否为0,这意味着该数字可以被5整除。
if (waveCount % 5 == 0 && waveCount >= 5 && waveCount <= 50)
C#对整数类型(int
,long
,uint
,...)执行整数数学。
例如:
13 / 5 = 2
即。你永远不会得到小数部分。互补操作是模运算。它为您提供了这个部门的其余部分:
13 % 5 = 3
即,13/5是2加上余数3.一起,除法和模运算允许你执行相反的操作。
(5 * (13 / 5)) + (13 % 5) =
(5 * 2 ) + ( 3 ) = 13
如果您有不规则的数字,则使用switch
语句的方法完全不同:
switch (waveCount) {
case 5:
case 10:
case 15:
case 20:
case 25:
case 30:
case 35:
case 40:
case 45:
case 50:
shopPanel.SetActive(true);
break;
}
或允许值数组:
private static readonly int[] AllowedValues =
new int[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 };
if(Array.IndexOf(AllowedValues, waveCount) >= 0) { ... }