这是我的代码:
private void CheckObjectAttackPoints(Point AttackPoint){
Point ObjectAttackPoint = AttackPoint;
ObjectAttackPoint.X -= 1;
int count=0; //This variable for reading how many tiles are false
//Check tiles active and ObjectAttackPoint is exist in List
for (int i=0; i < 1;i++) {
if (GameManager.AllPoints.Contains (ObjectAttackPoint)) {
if (!GameManager.TileColliders [ObjectAttackPoint.X, ObjectAttackPoint.Y].activeSelf) {
count++;
ObjectAttackPoints [i] = ObjectAttackPoint;
Debug.Log (ObjectAttackPoints [i].X +", " + ObjectAttackPoints [i].Y);
}
}
if (i == 1) {
break;
}
ObjectAttackPoint.X += 2;
}
if (count > 0) {
Debug.Log ("Object can attack " + count + " points");
}
}
因此,该方法需要AttackPoint
已经AttackPoint.Y-1
有价值,我们只需要检查其中是否AttackPoint.X
存在List
并检查此时对象是否处于活动状态即可。在方法开始时,AttackPoint.X
将其值减小1。
我的问题是,即使两个磁贴处于非活动状态,控制台也仅返回一个点(示例图像:0,0和0,2磁贴处于非活动状态,控制台仅返回count = 1且具有Point 0,0的磁贴),这意味着方法仅检查一个图块,并且我的代码有错误,但是我不知道它在哪里。有人能帮我吗?
您的for
循环始终完全执行一次,方法的代码与此等效:
private void CheckObjectAttackPoints(Point AttackPoint) {
Point ObjectAttackPoint = AttackPoint;
ObjectAttackPoint.X -= 1;
int count = 0; //This variable for reading how many tiles are false
//Check tiles active and ObjectAttackPoint is exist in List
if (GameManager.AllPoints.Contains(ObjectAttackPoint)) {
if (!GameManager.TileColliders[ObjectAttackPoint.X, ObjectAttackPoint.Y].activeSelf) {
count++;
ObjectAttackPoints[0] = ObjectAttackPoint;
Debug.Log(ObjectAttackPoints[0].X + ", " + ObjectAttackPoints[0].Y);
}
}
ObjectAttackPoint.X += 2;
if (count > 0) {
Debug.Log("Object can attack " + count + " points");
}
}
如果您想循环浏览的所有元素ObjectAttackPoint
,则应使用
如果是List
:
for (int i=0; i < ObjectAttackPoint.Count;i++)
如果是array
:
for (int i=0; i < ObjectAttackPoint.Length;i++)
编辑:无论如何,break
条件的使用是什么i==1
?即使您扩展了for循环,也if
将在两个循环之后(即在fori == 0
和执行之后)完全中断循环i == 1
。您应该更深入地解释什么ObjectAttackPoints
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句