微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – for循环始终只执行ONCE

简要信息图片,我的代码做了什么:

enter image description here


这是我的代码

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.Y-1值的AttackPoint,我们只需要检查List中是否存在AttackPoint.X并检查此时对象是否处于活动状态.在方法启动时,AttackPoint.X将其值减1.

我的问题是,即使两个图块不活动,控制台也只返回一个点(示例图像:0,0和0,2图块不活动,控制台仅返回count = 1并且使用点0,0图块),这意味着方法只检查一个tile并且我的代码错误,但我无法理解它在哪里.
有人能帮我吗?

解决方法:

你的for循环总是完全执行ONCE,你的方法代码等同于:

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++)

如果它是一个数组:

for (int i=0; i < ObjectAttackPoint.Length;i++)

编辑:当i == 1时,休息条件的用途是什么?即使你扩展了for循环,if会在两个循环之后完全打破循环(即在i == 0和i == 1之后执行它).你应该更深入地解释什么是ObjectAttackPoints.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐