我目前正在修补我最近发布的游戏。
我有一个类的列表,名为AppliedEffects。从该类创建的列表名为appliedEffects。 我想访问此列表并在索引中查找特定值,然后根据列表中是否存在该值来使bool为true或false。它适用于上电系统,其中列表是当前活动的所有上电。例如,射击子弹的代码将搜索列表中是否有ID为1的项目,因为这是双子弹启动的ID。
我走到这一步,只有一个小问题:
int ndx = PlayerStatus.appliedEffects.FindIndex(PlayerStatus.FindAE(XX,1);
XX在哪里,我不知道该放什么。我编辑了这个:
int ndx = Books.FindIndex(FindComputer);
private static bool FindComputer(Book bk)
{
if (bk.Genre == "Computer")
{
return true;
}
else
{
return false;
}
}
因为在代码示例中,我无法发送我想要搜索的参数。编辑后的代码如下所示:
public static bool FindAE(AppliedEffects ae, int id)
{
if (ae.id == id)
{
return true;
}
else
{
return false;
}
}
我创建一个int,它将获取列表的索引,其中值为ID 1的项存在,然后如果该值为1,因为ID为1,它将bool设置为true,并且为false如果不。 我想发送ID的参数,示例没有,这样我就可以重用该函数进行其他ID检查。但是当我输入参数时,我不知道应该放什么作为appliedEffect(这就是我放XX的原因)。
我也试过这个:
if (PlayerStatus.appliedEffects.Exists(x => x.id == 1))
{
PlayerStatus.doubleBullets = true;
}
哪个不起作用,不知道为什么。我不完全理解.Exists和.FindIndex的概念,所以也许这就是为什么我不知道如何使用它。 基本上我只是希望能够检查列表中是否有一个具有特定ID的项目,这样游戏就会知道我有特定的启动并且可以将bool设置为true然后设置为false。 注意:ID不是索引,ID是我的AppliedEffects类中的int,它知道它是哪个powerup。 我有点累,所以如果有任何想法/疑虑,请写在主题中,我会订阅该主题。
答案 0 :(得分:0)
int ndx = PlayerStatus.appliedEffects.FindIndex(ae => PlayerStatus.FindAE(ae, 1));
FindIndex的参数是一个带有一个参数的方法/ lambda。在这种情况下,创建一个lambda,它接受一个参数ae
,并返回FindAE(ae, 1)
。
不需要FindAE
方法。这可能更容易:
int ndx = PlayerStatus.appliedEffects.FindIndex(ae => ae.index == 1);
答案 1 :(得分:0)
请注意,如果找不到请求的元素,FindIndex
将返回-1
。因此,你必须这样做:
if(PlayerStatus.appliedEffects.FindIndex(ae => PlayerStatus.FindAE(ae, 1)) != -1)
{
PlayerStatus.doubleBullets = true;
}
在你的情况下使用Exists
可能更有意义,就像你提到的那样。试试这个:
if(PlayerStatus.appliedEffects.Exists(ae => PlayerStatus.FindAE(ae, 1)))
{
PlayerStatus.doubleBullets = true;
}