4

我目前正在开发一个非常基础的“推箱子”游戏。我正在尝试制作这个 for 循环,但似乎无法完成它。我的目标是执行下面的移动代码示例,我觉得我的语法在添加另一个条件时是错误的,其中显示“(diamondlist.Count)和(Playerlist.Count)。我得到的错误是“操作员'&' 不能应用于 'bool' 和 'int' 类型的操作数。我试图添加双“&&”,但这也不能解决它,感谢任何帮助 - 谢谢:D

    protected override void Update(GameTime gameTime)
    {
        for (int i = 0; i < (diamondlist.Count) & (Playerlist.Count); i++)
        {
            if ((Playerlist[i].Position == diamondlist[i].Position) && kb_old.IsKeyDown(Keys.W))
            {
                if (currentMap.isWalkable(new Point(diamondlist[i].m_position.X, diamondlist[i].m_position.Y - 1)))
                    diamondlist[i].m_position.Y--;
            }
4

8 回答 8

12

有几个问题。

  1. 表达式i < (diamondlist.Count) & (Playerlist.Count)被评估为:

    (i < diamondlist.Count) & Playerlist.Count
    

    表达式 ( i < diamondlist.Count) 的第一部分是 a bool,但第二部分 ( Playerlist.Count) 是 a int。它在抱怨,因为&它不接受这样的两种不同类型。

  2. 然后,您尝试应用&which (for integers) is a bitwise AND operator。如果两种类型相同,这将起作用,但它可能导致花费不必要的 CPU 周期,并且通常不用于布尔表达式。您可能想要使用&&-逻辑或条件与运算符

试试这个:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++)
{
    ...
}
于 2013-05-01T19:09:33.457 回答
5

简化您的测试条件怎么样?

int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
for (int i = 0; i < maxValue; i++)
于 2013-05-01T19:09:35.983 回答
2

每个检查都是相互独立的。你必须明确你正在检查的内容。当您说“ i 小于 diamondlist.Count 和 playerList.Count ”时,您的意思是“ i 小于 diamondlist.Count 并且 i 小于 playerlist.Count ”。

for (int i = 0; (i < diamondlist.Count) && (i < Playerlist.Count); i++)
....
于 2013-05-01T19:09:25.363 回答
0
for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++)
于 2013-05-01T19:09:19.057 回答
0

我不确定你想要达到什么目标,但我认为这就是你想要的:

for (int i = 0; i < (diamondlist.Count && i < Playerlist.Count; i++)

于 2013-05-01T19:10:59.723 回答
0

你可以试试:for (int i = 0; i < (diamondlist.Count) & i < (Playerlist.COunt); i++)

您收到的错误似乎表明i < (diamondlist.Count) & (Playerlist.Count)正在执行比较i < (diamondlist.Count)和执行&with (Playlist.Count),这是一个 int。

于 2013-05-01T19:11:21.737 回答
0

如果您打算检查这两个条件,那么它看起来像这样:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) ...

&& 是逻辑与运算符。& 是按位与运算符。

于 2013-05-01T19:11:58.617 回答
0

把它想象成一台电脑。它需要一个在那里评估为真或假的东西。用英语,你有:

IF (i is less than this) AND (this)

它无法评估第二个表达式,因为没有进行比较(尽管对于人类来说似乎存在)。因此,您必须使其更广泛,并执行以下操作:

IF (i is less than this) AND (i is less than this)
于 2013-05-01T19:14:38.820 回答