0

所以我浏览了一些以前的解决方案,但到目前为止还没有看到任何解决我的问题的方法。我试图在玩家点击图片框时更改他们的头像。我有一个像这样的图像列表:

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

}

我的问题是我找不到评估切换图像的条件。

4

2 回答 2

0

您的方法存在问题,如果改变可能会使事情变得更容易。首先,当您只需要为每个图像存储一个副本时,您可以为每个化身存储一个图像的副本。虽然这在小程序中很好,但它不会很好地扩展。虽然编译器可能足够聪明,可以只存储每个图像一次,但您很有可能会创建大量冗余数据,我们不应该相信编译器会为我们处理这些。当然,这可能会稍微改变我们的渲染方法,但它应该会改善缓存并让程序运行得更快一些。

更好的解决方案是将图像存储在一个中央位置,并为化身存储一个指示要使用哪些图像的指针。

我会改成pictureBoxAvatar1.Image类似的东西pictureBoxAvatar1.ImagePointer,然后你的功能应该变成类似

private void pictureBoxAvatar1_Click(object sender, EventArgs e)
{
   pictureBoxAvatar1.ImagePointer = (pictureBoxAvatar1.ImagePointer + 1) % avatars.size(); 
}
于 2012-11-26T18:01:03.560 回答
0

就像是

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

或等效的,具体取决于化身是什么。

于 2012-11-26T18:04:10.987 回答