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

あなたのアプローチには問題があり、変更すると物事が簡単になるかもしれません。1つは、画像ごとに1つのコピーのみを保存する必要がある場合に、アバターごとに画像のコピーを保存することです。これは小さなプログラムでは問題ありませんが、拡張性は高くありません。コンパイラは各画像を1回だけ保存するのに十分賢いかもしれませんが、多くの冗長データを作成する可能性が高く、コンパイラがこれを処理することを信頼するべきではありません。もちろん、これによりレンダリングアプローチが少し変わる可能性がありますが、キャッシュが改善され、プログラムの実行速度が少し速くなるはずです。

より良い解決策は、画像を1つの中央の場所に保存し、アバターの場合、使用する画像を示す単一のポインターを保存することです。

私は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 に答える