2016-01-24 119 views
1

好吧,所以我是新來的編碼我對c#有一個非常基本的理解,但我正在製作一個磚破碎機遊戲/磚破壞者在我的情況。但是,我有這個問題,我需要在10.0f的速度之後讓球精靈從我的基本白球變成我的另一個精靈。根據我所教程中看到我想出了這個代碼如何讓精靈變化速度

if (ballSpeed > 10f) 
    { 
     ballImage = Content.Load<Texture2D>("fireball"); 
    } 

我不知道這是差得遠,但任何想法的人嗎?

編輯:當我去把球球=新球(內容);它帶來了一個錯誤,它希望我改變它(內容:);

EDIT2:謝謝大家,到目前爲止是試圖幫助,但是這是行不通的斯努克斯除了最終的工作方法(閱讀上面編輯)

其他人的方法是投擲左,右例外。任何更多的想法

+0

所以我有這些類:Ball.cs,Brick.cs和Paddle.cs 球類我的代碼添加到ball.cs還是game2.cs? –

回答

1

你仍然必須加載圖像LoadContent()或球構造函數。因爲你希望遊戲在可能被使用之前在其內存中有精靈。

所以在Ball.cs構造函數中,您將加載精靈。

public Ball(ContentManager Content) 
{ 
    textureBall = Content.Load<Texture2D>("fireball"); 
    ... 
} 

您現在可以選擇做你的邏輯在game2.cs,或者你可以在你可以在你的主Draw方法調用ball.cs一個單獨Draw方法(位於game2.cs),其會給你一些更好的cohesion。雖然你並不需要小項目,但最好從一開始就學習好的習慣。

所以這就是ball.cs中的新方法的外觀。

public void Draw(GameTime gameTime, SpriteBatch spriteBatch) 
    { 
     ... 
     if (ballSpeed > 10.0f) 
     { 
      spriteBatch.Begin(); 
      spriteBatch.Draw(fireball, ballPosition, null, Color.White); 
      spriteBatch.End(); 
     } 
     ... 
    } 

現在,如果你還沒有準備好,申報球遊戲對象在game2.cs

Ball ball = new Ball(Content); 

現在你可以叫ball.Draw(gameTime, spriteBatch)在主game2.cs類的Draw循環。圍繞球的任何邏輯將位於Ball.cs

我唯一不清楚的是:「10幀的速度。」我認爲你的意思是10.0浮點數,因爲在幀中測量速度將是一個完全不同的故事。最好找到適合您需求的速度的浮點值,並以此方式給球定位。

+0

好吧,我想那個F代表着幀:P –

+0

讓我知道這是否正常工作,是否能解決您的問題,你可以記住我的答案作爲解決方案。這將有助於其他人在未來遇到類似的問題。 – Snookik

+0

這樣一個問題,什麼是textureBall變種,因爲我沒有看到它被使用了或者說假設說火球做? –

1

在Draw()或Update()過程中加載內容可能相當成問題。最好的做法是根據球的速度先加載兩個紋理,並決定在運行時既紋理LoadContent畫出其中一個

負荷()

protected override void LoadContent() 
{ 
    //... 
    texture = Content.Load<Texture2D>("whiteball"); 
    fireTexture = Content.Load<Texture2D>("fireball"); 
    //... 
} 

繪製在繪圖(不同質地)

protected override void Draw(GameTime gameTime) 
{ 
    spriteBatch.Begin(); 
    // Draw things before ball ... 
    if (ballSpeed > 10f) 
    { 
     spriteBatch.Draw(fireTexture, ballPosition, null, Color.White); 
    } 
    else 
    { 
     spriteBatch.Draw(texture, ballPosition, null, Color.White); 
    } 
    // Draw the other things... 
    spriteBatch.End(); 
} 

在你的情況,你應該改變球的構造和引用傳遞到兩個紋理,像

public Ball(Texture2D white, Texture2D fire, Rectangle screenBounds) 
{ 
    // ... 
    this.texture = white; 
    this.fireTexture = fire; 
    // ... 
} 

當然,你需要添加一個字段存儲的參考

Texture2D fireTexture; 
+0

好的,我會嘗試你的方法。但是你能解釋一下當我聲明球=新球(內容)時拋出的異常嗎?它希望我將其更改爲Ball ball = new Ball(Content :); –

+0

^^^^^對不起,我總是忘記的名字我的意見後 –

+0

好,我感謝你的幫助,但離開它只是拋出異常,右 –