ページ 11

C++で複数の同じ敵をつくる場合の画像の管理について

Posted: 2012年12月19日(水) 01:08
by AliceCoder
環境 windows7 64bit
VC++2010

どうも、お世話になっております
今回の質問は、複数体の同じ種類の敵を出現させるとします
同じ種類の敵なので画像は同じものを使用しております
インスタンスごとに画像をメモリに割り当てたら無駄だと思うのですが
どのように画像を扱えばいいのでしょうか
staticでやるという考えがありましたが、解放ができないっぽいので適切な処理ではないと思っている
詳しくstatic理解していないけど、自分はstaticを、使えるスコープを限定したグローバル変数と覚えているため、このように思いました

画像の実体をどこにおくかというのが問題だと思うのですが
なにか王道てきな処理があると自分では思うのですが、どなたかおしえてください

Re: C++で複数の同じ敵をつくる場合の画像の管理について

Posted: 2012年12月19日(水) 07:49
by jay
なんかstaticの理解が若干おかしい気がしますけども、本題はそこじゃ無いですね


画像データをどこで管理するか、ですね
例えばシューティングゲームの自機のように、それが同時に複数存在しないオブジェクトなら同じクラスに組み込むのが分かりやすいでしょうが
雑魚敵など、同じものが複数存在することがあり得るならこの方法は無駄が多くて使えませんね

ですから僕ならGraphicクラスとか、そんな適当なクラスか構造体を作って纏めて入れておきます
後は敵に「画像の種類」の情報を持たせておき
描画する時にはGraphicクラス内の「画像の種類」に応じた画像を描画させる訳ですね

開放する必要がある時には(いつもDXライブラリを使うので)DeleteGraph関数使います


あ、これは僕が個人的にいいと思ってるやり方であって
王道かどうかは知りませんよ(苦笑)

Re: C++で複数の同じ敵をつくる場合の画像の管理について

Posted: 2012年12月19日(水) 16:15
by ISLe
リソースの最適化のために一つの画像に複数の種類の敵のイメージをまとめたりもするのですが、jayさんがおっしゃるようにイメージ管理クラスを用意するのが基本です。
あとは、イメージを参照するオブジェクトが所有権を取得して、それをカウントし、使われなくなった画像を自動的に解放する仕組みを入れれば完璧かと思います。

簡単なプログラムであれば、敵の種類ごとに画像をstaticで持つ方法でもかまわないと思います。
上記したように、所有権を持つインスタンスをカウントして、所有権を持つインスタンスが無くなったら解放すれば良いと思います。

Re: C++で複数の同じ敵をつくる場合の画像の管理について

Posted: 2012年12月19日(水) 23:20
by AliceCoder
回答ありがとうございます
画像管理のクラスを作ってみたいと思います