所以我在C#(XNA)中有以下代码
foreach (Target i in Target.List)
{
//just distance calculating with pythagoras
if (Math.Sqrt(Math.Pow((Tpos.X - i.pos.X), 2) + Math.Pow((Tpos.Y - i.pos.Y), 2)) <= 100)
{
intersect = true;
}
else
{
intersect = false;
}
}
这些“目标”中的每一个都是这样创建的:
Tower.List.Add(new Tower(Tpos));
问题是它似乎只适用于最后创建的目标。但是,通过类似的foreach循环,它们中的每一个都被正确绘制。
有什么不同?
答案 0 :(得分:2)
我假设您只想测试列表中的Target
是否与变量Tpos
相交。
您应该在循环之前使用intersect
初始化false
,并且在循环内部,只需删除else
语句。
这样,如果元素不相交但您的intersect
变量已设置为true
,则不会将其重置为false
。
此外,您可能需要在break
后if
内添加intersect = true
语句,因为一旦找到与Target
相交的Tpos
},您不需要测试其余数据是否相交:
foreach (Target i in Target.List)
{
//just distance calculating with pythagoras
if (Math.Sqrt(Math.Pow((Tpos.X - i.pos.X), 2) + Math.Pow((Tpos.Y - i.pos.Y), 2)) <= 100)
{
intersect = true;
break;
}
}
答案 1 :(得分:1)
我可能错了,但它可能与你只输出一个变量这一事实有关,所以它会被每个循环覆盖。
即
intersect = true;
intersect = false;
因此intersect = false。
编辑:尝试写入列表中的变量。这样你就可以拥有同一个变量的多个副本。