我目前有一个关于方法中局部变量的问题。 该方法是在屏幕底部生成一排方形精灵,当前代码如下所示:

 public void spawnFloor()
    {
        for (int x = 0; x < floorSize / texture.Width; x++)
        {
            if (walls.Count < floorSize / texture.Width)
            {
                positionModifier.X = texture.Width * x;
                position.Y = floorStart.Y;
                spawnWall();
            }
        }
    }

当前,当游戏分辨率为1280/720时,游戏在屏幕的右下角产生40个正方形。 x的值显然始终为0。 有任何想法吗? 下面是整个类的代码,以防万一它是基于类的:

    public WallManager(Texture2D texture, Vector2 floorStart, int screenLength)
    {
        this.texture = texture;
        this.floorStart = floorStart;
        floorSize = screenLength;
    }

    public void spawnWall()
    {
        Wall thisWall = new Wall(position*positionModifier, texture);
        walls.Add(thisWall);
    }

    public void spawnTest()
    {
        if (walls.Count == 0)
        {
            position = new Vector2(0, 698);
            spawnWall();
        }
    }

    public void spawnFloor()
    {
        for (int x = 0; x < floorSize / texture.Width; x++)
        {
            if (walls.Count < floorSize / texture.Width)
            {
                positionModifier.X = texture.Width * x;
                position.Y = floorStart.Y;
                spawnWall();
            }
        }
    }
    public void Draw(SpriteBatch spriteBatch)
    {
        foreach(Wall wall in walls)

        wall.Draw(spriteBatch);
    }
}

编辑:根据建议,墙类已发布:

public Wall(Vector2 position, Texture2D texture)
    {
        wallPosition = position;
        wallTexture = texture;
    }

    public void Update(GameTime gameTime)
    {
        wallWidth = (int)Math.Round((double)wallTexture.Width);
        wallHeight = (int)Math.Round((double)wallTexture.Height);
        wallHitbox = new Rectangle((int)wallPosition.X, (int)wallPosition.Y, wallWidth, wallHeight);
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(wallTexture, wallPosition, wallColor);
    }

另外,positionModifier是wallManager类中的私有Vector2,启动时值为(1,1)

===============>>#1 票数:0

因为它在循环内执行Closures 复制x值的局部变量并将其存储为localVal (示例),然后在计算positionModifier时使用该变量

public void spawnFloor()
{
    for (int x = 0; x < floorSize / texture.Width; x++)
    {
        if (walls.Count < floorSize / texture.Width)
        {
            var localVal = x;
            positionModifier.X = texture.Width * localVal;
            position.Y = floorStart.Y;
            spawnWall();
        }
    }
}

===============>>#2 票数:0 已采纳

根据您发布的代码,无法分辨出什么损坏了。 问题很可能是如何创建Wall 我敢打赌, positionModifier.X实际上对墙的x位置没有任何作用,或者墙的x位置的起始值为0,并且在方法调用中将positionModifier乘以它时,它仍为0。

  ask by CraigGame translate from so

未解决问题?本站智能推荐:

3回复

分配时工作于Xna的局部变量

我需要使用局部变量,但是当我将它们用于计时器(减少时间直到满足条件)时,它不起作用 其他相关代码是我从中获取费率的地方 它没有计时器就可以工作,但是我不能那样做,因为我不希望每次有人按下键时都可以制造300台激光器。 据我所知,计时器设置为每帧的激光频率,因此它永远不会达到0(
5回复

C#局部变量

有人可以解释一下我为什么得到: “未分配的局部变量number_of_column的使用”用于:if(i <number_of_column -1) 最好的方法是什么?
4回复

C#局部变量

首先是代码: 现在,我尝试稍后参考D1。 例如this.label1.Text = D1; 该引用和定义字符串的if语句位于同一父块中,那么为什么不能使用D1?
3回复

使用未分配的局部变量

在我的代码中,出现以下错误: 使用未分配的局部变量“ nonrpeatedChar” 为什么会发生此错误,我该如何解决?
1回复

如何使用另一个局部变量声明局部变量? [重复]

这个问题已经在这里有了答案: 生成唯一随机数的智能方法 20个答案 生成随机唯一值C# 13回答 我是C#的初学者。 我可以使用局部变量声明局部变量吗? 我想生成4个不重复的唯一随机数0-100,但是现在我被这些变量所困扰。 我试图使用另一个
2回复

声明未知类型的局部变量

如何在此场景中初始化局部变量? 有没有更好的方法来写这个? 它没有通用的基本类型
4回复

从不使用Resharper局部变量

好吧,我有一个问题,Resharper让我疯了。 假设我创建了一个方法,如 当我输入方法时,Resharper采用变量dmid并声明它是一个“从不使用的局部变量”。 结果它改变了文本的颜色。 我怎么能抑制这个?
2回复

C#在if循环内使用未分配的局部变量

由于我是个流血的初学者,因此在这里需要一些帮助: 它说: 使用未分配的局部变量“ x01等...” 我理解该错误,并且知道x01只是在本地作用域中定义的,但不知道如何解决它,因为需要在if循环内定义x01等。 希望您能帮助我,谢谢。
1回复

如何在函数中将短局部变量设置为public

我正在Visual Studio 2015中构建一个WPF应用程序,我是Visual Studio和C#的新手,并且遇到了一个小问题。 我有一个功能(如下所示)。 在SelectionChanged事件上,我获得ClientList的值并将其设置为本地变量client。 尽管听起
1回复

C#和AForge-使用未分配的局部变量edgePoints

我正在尝试编译此代码(最后一个): http : //www.aforgenet.com/framework/features/blobs_processing.html 但它抛出: 使用未分配的局部变量'edgePoints' .. 这是代码: 这是他有问题的那条线: