2012-11-26 10 views
0

所以我已經瀏覽了一些以前的解決方案,但迄今爲止還沒有看到任何解決我的問題。我試圖在點擊圖片框時更改玩家的頭像。我有一個圖像列表,像這樣:使用列表的IF語句<Bitmap>

List<Bitmap> avatars = new List<Bitmap>(); 

private void GameForm_Load(object sender, EventArgs e) 
{ 
    avatars.Add(Properties.Resources.Head1); 
    avatars.Add(Properties.Resources.Head2); 
    avatars.Add(Properties.Resources.Head3); 
    avatars.Add(Properties.Resources.Head4); 
} 

而這正是我試圖在改變它:

private void pictureBoxAvatar1_Click(object sender, EventArgs e) 
{ 

    if(pictureBoxAvatar1.Image == avatars.ElementAt(0)) 
    { 
    pictureBoxAvatar1.Image = avatars.ElementAt(1); 
    } 
    //I have four total possibilities, but just have this one statement until I figure it out 

} 

我的問題是,我無法找到評估切換圖像的條件。

回答

0

你的方法有問題,如果改變,可能會使事情變得更容易。首先,對於每個頭像,如果您只需要爲每個圖像存儲一個副本,則會存儲該圖像的副本。雖然這在小程序中很好,但不會很好地擴展。雖然編譯器可能會足夠聰明,只能將每個圖像存儲一次,但您很有可能創建大量冗餘數據,我們不應該相信編譯器會爲我們處理這些問題。當然,這可能會改變我們的渲染方法,但它應該改善緩存並使程序運行得更快一些。

更好的解決方案是將圖像存儲在一箇中心位置,併爲頭像存儲指示要使用哪些圖像的單個指針。

我會改變pictureBoxAvatar1.Image的東西沿着線,然後你的函數應該成爲像

private void pictureBoxAvatar1_Click(object sender, EventArgs e) 
{ 
    pictureBoxAvatar1.ImagePointer = (pictureBoxAvatar1.ImagePointer + 1) % avatars.size(); 
} 
+0

該方法奏效!感謝您的建議和批評,我一直在尋找更好的方法。 –

0

喜歡的東西

int avIndex = avatars.IndexOf(picturebox1.image); 
avIndex++; 
if (avIndex >= avatars.Count) 
{ 
    avIndex = 0; 
} 
picturebox1.image = avatars[avIndex]; 

或等值積分,取決於什麼替身的。