C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 複数のpictureBoxを一度に動かす方法


(過去ログ 75 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■44078 / inTopicNo.1)  複数のpictureBoxを一度に動かす方法
  
□投稿者/ sun (1回)-(2009/11/26(Thu) 18:27:29)

分類:[C#] 

はじめまして。初投稿です。
初心者ですが、よろしくお願いします。

今、C#でシューティングゲームのようなものを作ろうと思っています。
が、あわからないことがありましたので、質問させていただきます。

敵の弾をpictureBoxに表示して移動させているのですが、
   pictureBox1.Location.left = pictureBox1.Location.left + 1;
   pictureBox2.Location.left = pictureBox2.Location.left + 1;
pictureBox3.Location.left = pictureBox3.Location.left + 1;
.
.
.
と言う記述しか思い浮かばず、複数となると大変だなぁと考えています。
配列のようなものを使うのでしょうか?
上手い方法を教えてください。


それと、ほかのサイトで調べている中で、
「画面がちらつくようになる」
とあったのですが、その対処法もできればお願いします。


よろしくお願いしますm(__)m
引用返信 編集キー/
■44079 / inTopicNo.2)  Re[1]: 複数のpictureBoxを一度に動かす方法
□投稿者/ Jitta on the way (481回)-(2009/11/26(Thu) 18:47:48)
No44078 (sun さん) に返信
> はじめまして。初投稿です。
> 初心者ですが、よろしくお願いします。
>
> 今、C#でシューティングゲームのようなものを作ろうと思っています。
> が、あわからないことがありましたので、質問させていただきます。
>
> 敵の弾をpictureBoxに表示して移動させているのですが、
>    pictureBox1.Location.left = pictureBox1.Location.left + 1;
>    pictureBox2.Location.left = pictureBox2.Location.left + 1;
> pictureBox3.Location.left = pictureBox3.Location.left + 1;
> .
> .
> .
> と言う記述しか思い浮かばず、複数となると大変だなぁと考えています。

なにが大変なのでしょう?

> 配列のようなものを使うのでしょうか?
> 上手い方法を教えてください。

仕様によって変わります。

>
>
> それと、ほかのサイトで調べている中で、
> 「画面がちらつくようになる」
> とあったのですが、その対処法もできればお願いします。

実際にちらついたら対策を考えれば良いと思います。
引用返信 編集キー/
■44081 / inTopicNo.3)  Re[2]: 複数のpictureBoxを一度に動かす方法
□投稿者/ sun (2回)-(2009/11/26(Thu) 19:12:01)
sun さんの Web サイト
すみません、「大変」では伝わりませんねw

弾の数が数十個になったとき、一つひとつ
pictureBox1.Location.left = pictureBox1.Location.left + 1;
↑これを書かなくてはいけなくなるので、
もっと簡単に数を弾の数を増やす方法があれば、教えてください。


C言語をやっていたのですが、そのときやっていたのは、
敵を構造体にしてそれを複数宣言する
と言う方法でした。

C#でそれを再現しようとしましたが、pictureBoxを配列として扱えるのかわからなかったので。
やり方を教えていただけないでしょうか?


確かに。ちらつき対策はまた後日します。
引用返信 編集キー/
■44087 / inTopicNo.4)  Re[3]: 複数のpictureBoxを一度に動かす方法
□投稿者/ たくボン (298回)-(2009/11/26(Thu) 21:13:27)
No44081 (sun さん) に返信
> 弾の数が数十個になったとき、一つひとつ
> pictureBox1.Location.left = pictureBox1.Location.left + 1;
> ↑これを書かなくてはいけなくなるので、
> もっと簡単に数を弾の数を増やす方法があれば、教えてください。

弾とかは現在の座標位置、速度、方向とかを持っていればいいだけなので、PictureBoxのImageプロパティにセットして表示するより配列にしておいた方が楽。

描画については、背景画像の描画後に描画してやるとOK。

複雑な描画処理(弾だけでなく、星や戦闘機とか)も描画したいなら描画するクラスをCompositパターンにしておいて、描画のメソッドはVisitorパターンを使って書き出す。ダブルディスパッチになるから関数のオーバーヘッドが気になるけど、いくつ描画するインスタンス(この場合だと弾や星)が出来上がるかわからない場合は、この方法が簡単でいいかな。

Visitorパターンを使うもう一つの理由は、弾道計算や当たり判定、画面の領域外に出た弾のインスタンス回収とか色々に使えるから。さらに言えば描画順序や当たり判定時の優先順位とかも統一できるし。

同じ処理を何度も書くよりはかなりすっきりするはず。

ちらつきについても、個々のインスタンスが直前描画した部分を管理するならちらつきは少ないかな。
引用返信 編集キー/
■44122 / inTopicNo.5)  Re[3]: 複数のpictureBoxを一度に動かす方法
□投稿者/ Jitta on the way (484回)-(2009/11/29(Sun) 10:46:07)
No44081 (sun さん) に返信
> すみません、「大変」では伝わりませんねw
>
> 弾の数が数十個になったとき、一つひとつ
> pictureBox1.Location.left = pictureBox1.Location.left + 1;
> ↑これを書かなくてはいけなくなるので、
> もっと簡単に数を弾の数を増やす方法があれば、教えてください。
>
>
> C言語をやっていたのですが、そのときやっていたのは、
> 敵を構造体にしてそれを複数宣言する
> と言う方法でした。
それと同じ方法でよいのでは?
1つの弾、1つの敵(のクラス)が、自分を描写する picturebox を(クラス メンバーとして)持てば、敵や弾に「自分を描写しろ」とメッセージを送ればいいですよね?敵や弾を配列(よりもリストが良いと思います)にすることは、できますよね?



> C#でそれを再現しようとしましたが、pictureBoxを配列として扱えるのかわからなかったので。
> やり方を教えていただけないでしょうか?
>
>
> 確かに。ちらつき対策はまた後日します。

たぶん、picturebox を動かすなら、チラツキはないと思います。
チラツクのは、描いてあるものを消して、描き直すからです。
たくボンさんが書かれている方法だと、チラツク可能性が有ります。が、リソース使用量は、かなり抑えられます。
引用返信 編集キー/
■44348 / inTopicNo.6)  Re[4]: 複数のpictureBoxを一度に動かす方法
□投稿者/ sun (3回)-(2009/12/06(Sun) 10:42:55)
sun さんの Web サイト
すみませんっ、返信遅くなりました!

教えて頂いたことを参考に調べてみました。
自分はまだC#を始めたばかりで、オブジェクトを配列で宣言できることを知りませんでした;。

もっとC#の基礎から勉強しなくては、、、。

Jitta on the wayさん
たくボンさん

ありがとうございました。
またお世話になるかもしれません。
その時はよろしくお願いしますm(_ _)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -