我目前正在开发一个非常基础的“推箱子”游戏。我正在尝试为循环做这个,但似乎无法完成它。我的目标是执行下面的移动代码的示例,我觉得我的语法是错误的添加另一个条件,它说“(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--;
}
答案 0 :(得分:11)
有一些问题。
表达式i < (diamondlist.Count) & (Playerlist.Count)
的评估结果为:
(i < diamondlist.Count) & Playerlist.Count
表达式的第一部分(i < diamondlist.Count
)是bool
,但第二部分(Playerlist.Count
)是int
。这是抱怨,因为&
不接受两种不同的类型。
然后您尝试应用&
(对于整数)bitwise AND operator。如果两种类型相同,这将起作用,但它可能导致花费不必要的CPU周期,并且通常不在布尔表达式中使用。您可能希望使用&&
- logical or conditional and operator。
请改为尝试:
for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++)
{
...
}
答案 1 :(得分:5)
如何简化测试条件?
int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
for (int i = 0; i < maxValue; i++)
答案 2 :(得分:2)
每项检查都是相互独立的。你必须明确你正在检查什么。当你说“我少于diamondlist.Count和playerList.Count ”时,你的意思是“我比diamondlist.Count少,而且我比playerlist.Count 少。” p>
for (int i = 0; (i < diamondlist.Count) && (i < Playerlist.Count); i++)
....
答案 3 :(得分:0)
for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++)
答案 4 :(得分:0)
我不确定你想要达到的目标,但我认为这就是你想要的:
for(int i = 0; i&lt;(diamondlist.Count&amp;&amp; i&lt; Playerlist.Count; i ++)
答案 5 :(得分:0)
您可以尝试:for (int i = 0; i < (diamondlist.Count) & i < (Playerlist.COunt); i++)
。
您收到的错误似乎表明i < (diamondlist.Count) & (Playerlist.Count)
正在执行比较i < (diamondlist.Count)
并执行&
(Playlist.Count)
,这是一个int
答案 6 :(得分:0)
如果您打算检查这两个条件,那么它将如下所示:
for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) ...
&安培;&安培;是逻辑AND运算符。 &安培;是按位AND运算符。
答案 7 :(得分:0)
将此视为计算机。它需要一个在那里评估为真或假的东西。用英语,你有:
IF (i is less than this) AND (this)
它无法评估第二个表达式,因为没有比较(虽然似乎是人类)。所以你必须让它更广泛,并做:
IF (i is less than this) AND (i is less than this)