2013-05-01 51 views
0

因爲spriteBatch()只是沒有「點擊」我,所以我準備把我的頭髮撕掉。我似乎無法在網上找到任何東西,涵蓋了我在這種情況下的使用情況,這讓我相信我錯過了一件非常簡單的事情。不同類的Xna spriteBatch

我在我的XNA項目中有一個叫做player的類,它令人驚訝地控制着玩家,物理等等。但是我一次只做一步。第一步:在關卡中繪製玩家。等級代碼很好,不用擔心。但我無法讓玩家畫畫。

我有一個基本的Texutre2D紋理,我繪製了一個精靈畫圖。通過this教程去,我應該能夠做到以下幾點:

public void LoadContent() 
    { 
     spriteBatch = new SpriteBatch(GraphicsDevice); 
     playerSprite = Level.Content.Load<Texture2D>("player/pory"); 

    } 

public void Draw() 
    { 
     graphics.GraphicsDevice.Clear(Color.Beige); 

     // Draw the sprite. 
     spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); 
     spriteBatch.Draw(playerSprite, Position, Color.White); 
     spriteBatch.End(); 

    } 

它應該只是工作。但不是。我在這個玩家類中錯過了一些東西。 1)在LoadContent()中,我無法創建new SpriteBatch(),因爲GraphicsDevice不存在,無法創建。它出現在Game.cs中,並且初始化爲this這意味着遊戲本身。好的。但是我也無法引用Game.GraphicsDevice。

這基本上是整個問題,一切都源於此。我找不到解決辦法。有誰知道正確的方法來嘗試做到這一點?我似乎無法找到我錯過了什麼來實現這個目標。

+0

此代碼是Player.cs的一部分,它是項目中自己的文件。 – Eric 2013-05-01 21:36:32

+0

由於這個確切的問題,你的繪圖代碼不應該在你的播放器類中。所有的渲染代碼都應該爲此目的設計一個類。這個類應該只有一個實例和一個對象this.GraphicsDevice等必要對象的引用。 – ClassicThunder 2013-05-01 22:03:36

回答

1

解決此問題的最簡單方法是在您的Game類中創建它時,將Player類的GraphicsDevice和SpriteBatch實例傳遞給構造函數。

player = new Player(graphicsDevice, spriteBatch);