2015-01-23 2 views
1

첫 번째 레벨 버튼을 제외하고 레벨을 선택하는 버튼이 게임에있는 메뉴를 가졌습니다. 다른 모든 버튼은 "잠겨"있기 때문에 회색 텍스처를 사용합니다. 예를 들어 레벨 1을 이길 때 레벨 선택 메뉴로 돌아가고 레벨 2는 잠금 해제되어 있지만 잠금 해제되었을 때 다른 텍스처를 사용하기를 원하므로이 메소드를 메인의 Update 메소드에 추가하려고했습니다. 게임 클래스이지만 여전히 회색 텍스처를 사용합니다.이미로드 된 콘텐츠의 질감을 변경하는 방법은 무엇입니까?

  if (level2.Unlocked == true) 
      { 
       level2Button = Content.Load<Texture2D>("GUI\\level2"); 
      } 
      level2Button.Update(gameTime); 
+0

버튼 클래스가 있습니까? 어떤 텍스처가 사용되어야 하는지를 나타내는 속성을 가지고 있습니까? level2Button이란 무엇입니까? – user3256944

+0

아래의 Feux의 훌륭한 답변에 따라 데이터가 CPU에서 GPU로 전송되어야하기 때문에 그리기 루프 중에 새 텍스처를 만들거나 업데이트하는 것이 '느린'것입니다. CPU-GPU 메모리 버스는 이미 GPU에 업로드/생성 된 데이터에 액세스하는 것과 비교할 때 매우 느립니다. Offtopic하지만 게임 루프 중에 텍스처를 업데이트해도 괜찮은지 생각할 수있는 유일한 시간은 렌더링 타겟을 사용하는 것입니다.하지만 다시 GPU에서 모든 일이 발생합니다. – MickyD

답변

0

을 Fuex와 roxik0에 감사 드리며, 두 가지 제안을 모두 사용하여 해결했습니다. 나는 두 개의 텍스처 변수를 만들어 내 버튼 클래스에서 내가 텍스처 업데이트하는 방법 추가 :

public void UpdateTexture(Texture2D texture) 
    { 
     this.texture = texture; 
    } 

이 방법은 레벨이 잠금 해제하고 적절한 텍스처를 사용하도록 업데이트하는 경우가 확인 버튼을 그립니다 전에 :

if (level2.Unlocked) 
       { 
        level2button.UpdateTexture(level2buttonNormal); 
       } 
level2button.Draw(spriteBatch); 
+0

이 통합 답변을 게시해야합니까? – MickyD

3

"채움"단계에서 적절한 질감을 선택해야합니다. 다른 옵션은 없습니다.

+0

이 질문에 대한 답을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – GLES

+0

내 대답은 sollution을 제공합니다 : 2 개의 텍스처와 무대에서 선택. – roxik0

3

정말 업데이트 방법으로로드하지 않는 것이 좋습니다. 좋은 방법은 아닙니다. 부작용으로 인해 프레임 속도 저하 (지연) 및 기타 원하지 않는 동작이 발생할 수 있습니다. 그래서 내 조언은 LoadContent 방법을로드하는 것입니다 :

protected override void LoadContent() { 
    spriteBatch = new SpriteBatch(GraphicsDevice); 

    //... 
    level2ButtonUnlocked = Content.Load<Texture2D>("GUI\\level2"); 
} 

그리고 다음 업데이트 방법에 할당 :

protected override void Update(GameTime gameTime) { 
    if (level2.Unlocked == true){ 
     level2Button = level2ButtonUnlocked; 
    } 
} 

그래서이는 방법 중 하나입니다. 나는 Dictionary<string, Texture2D> 또는 레벨텍스처 속성을 포함하는 List<Level>처럼 깨끗하고 똑똑 하나를 사용하십시오하고 필드를 IsLocked 모든 인덱스는 같은 수준의 수를 나타냅니다

class Level { 
    public Texture2D Texture { 
     get { 
     if(IsLocked) 
      return lockedTexture; 

     return unlockedTexture; 
     } 
    } 

    public bool IsLocked = true; 
    private Texture2D lockedTexture, unlockedTexture; 

    public LoadContent(ContentManager content, string lockedPath, string unlockedPath){ 
     lockedTexture = content.Load<Texture2D>(lockedPath); 
     unlockedTexture = content.Load<Texture2D>(unlockedPath); 
    } 
} 
관련 문제