2014-04-20 3 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(); 
      } 
     } 
    } 

, 게임 해상도가 720분의 1,280 일 때, 게임은 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이다 시작시 값 (1,1)이있는 wallManager 클래스에서

답변

0

그것의 당신의 positionModifier을 계산할 때 다음 한 것을 사용한다. 이 문제는 대부분 Wall의 생성 방법에 있습니다. positionModifier.X 중 하나가 벽의 x 위치에 실제로 아무 것도하지 않거나 벽 x 위치의 시작 값이 0이라고 내기하고 positionModifier에 메서드 호출을 곱하면 0이됩니다.

+0

Yeap. position.x의 시작 값이 0 이었음을 나타냅니다. 텍스처 폭으로 설정 한 후 floorStart의 Y 값 대신 전체 벡터를 사용하면 스크립트가 의도 한대로 작동합니다. 고마워. – CraigGame

0

루프 내부에 Closures이 수행 중이기 때문입니다. x의 값을 지역 변수를 복사 localVal (예)로 저장하고 당신이 게시 한 코드를 기반으로 깨진 무슨 말할 수 없습니다

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으로 유지됩니다. 참고로 floorSize의 값은 수평 해상도로 설정되며,이 경우 1280입니다. – CraigGame

관련 문제