2014-04-20 76 views
0

我目前在方法中有一个关于局部变量的问题。由该方法生成一个行方精灵沿着屏幕的屏幕,代码底部目前看起来像这样:局部变量不变

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(); 
      } 
     } 
    } 

目前,当游戏分辨率七百二十零分之一千二百八十○,游戏派生在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是一家民营Vector2在wallManager类中启动时的值为(1,1)

回答

0

它不可能告诉什么根据您发布的代码打破使用的那一个。这个问题很可能在如何创建Wall。我敢打赌,positionModifier.X实际上并没有对墙的x位置做任何事情,或者墙的x位置的起始值为0,并且在方法调用中将其与positionModifier相乘,它仍为0.

+0

Yeap。原来,position.x的起始值为0.设置为纹理宽度并使用整个矢量代替floorStart的Y值后,该脚本按预期工作。谢啦 – CraigGame

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(); 
     } 
    } 
} 
+0

怕这没有用。就像我说的,x的值根本没有改变,即使它应该循环通过值0-40。自那以后,现在localVal始终保持0。 作为FYI,floorSize的值设置为水平分辨率,在此情况下为1280,即 – CraigGame