オブジェクトに生成について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
JugS

オブジェクトに生成について

#1

投稿記事 by JugS » 17年前

最近、オブジェクト指向について勉強しているのですが、
勉強といっても「C++で学ぶオブジェクト指向プログラミング」 湯田幸八 著
を読んでみた程度ですが、

オブジェクト指向で「勇者のくせになまいきだ」というソフトを、
部分的に再現してみようかなと思っているのですが、

このゲームは味方が100体以上になることもあるのですが
この場合、
味方を1つのオブジェクトとすると、100体味方を召喚すると、
100体分オブジェクトを生成するのでしょうか?

なんだかデータが膨大になってしまいそうな気がするのですが、

Justy

Re:オブジェクトに生成について

#2

投稿記事 by Justy » 17年前


>味方を1つのオブジェクトとすると、100体味方を召喚すると、
>100体分オブジェクトを生成するのでしょうか?

 そうです。



>なんだかデータが膨大になってしまいそうな気がするのですが

 100体でデータが膨大過ぎるというのであれば、体数を減らすか
1体あたりのデータ量を減らすしかないかと。


 ・・・って 100体くらいでそんな膨大になるのでしょうか?

JugS

Re:オブジェクトに生成について

#3

投稿記事 by JugS » 17年前

実際は分からないので、適当に考えてみたのですが、

データメンバ
画像、体力、攻撃力、フラグ数種

メンバ関数
攻撃、移動、体力管理、描画

あ、書き出したら結構少ないですね。
まぁ、かなり適当ですが、

数の問題はどうにかなるようですね。
では、味方オブジェクトは

最初から味方の最大数まで生成しておき召喚するたびに空いているオブジェクトに割り当てるのか、
それとも
召喚するたびにオブジェクトを生成するのか、
どちらがいいでしょうか?

私的には後者が良いと思うんですが、

YuO

Re:オブジェクトに生成について

#4

投稿記事 by YuO » 17年前

> 最初から味方の最大数まで生成しておき召喚するたびに空いているオブジェクトに割り当てるのか、
> それとも
> 召喚するたびにオブジェクトを生成するのか、
> どちらがいいでしょうか?

速度とメモリ管理の簡略化のどちらをとるかです。
基本的に,newは重い処理なので,速度が出ないのであればnewを削る方向になると思います。

で,100程度のオブジェクトであれば,std::vector<T>で管理してしまって問題ないと思います。
おそらく,capacityが128まで大きくなって,あとはそのままになると思います。
# つまり,メモリアロケートが発生しない。

lbfuvab

Re:オブジェクトに生成について

#5

投稿記事 by lbfuvab » 17年前

配列で最大数用意しておいて生成する毎に割り当てるのが楽だとは思いますが・・・

J

Re:オブジェクトに生成について

#6

投稿記事 by J » 17年前

「勇者のくせに生意気だ」というゲームが何なのかは知りませんが、
ここは敵の数が100固定ではないと思うので、
可変配列vectorを使ってみてはどうでしょう。

気になさっていた膨大なデータも最小限にできると思います。
確かvectorのメンバ関数にreserveやresize等があったはずです。
これで敵データの個数ぴったし分だけ簡単かつ動的に用意できます。
もし、vectorの使い方が分からないようであれば、
http://www.cppll.jp/cppreference/
を参照するといいと思います。

バグ

Re:オブジェクトに生成について

#7

投稿記事 by バグ » 17年前

std::listでもいいんじゃないかな?

たかぎ

Re:オブジェクトに生成について

#8

投稿記事 by たかぎ » 17年前

最大数が高々数百程度であれば、その都度デフォルトのnewで割り付けるより、その分のメモリを事前に用意しておいて、メモリプールを作る方がよいでしょう。
その際、std::vectorでもよいですが、operator newを多重定義した方が利便性が高いと思います。

Justy

Re:オブジェクトに生成について

#9

投稿記事 by Justy » 17年前


>最初から味方の最大数まで生成しておき召喚するたびに空いているオブジェクトに割り当てるのか、
>それとも召喚するたびにオブジェクトを生成するのか、どちらがいいでしょうか?

 基本的には、後者でいいと思います。
 前者も有りといえば有りですが、味方オブジェクトが1種類(1クラス)で
なくなった場合、その分の空いているオブジェクトリストが必要になってしまうかも
しれません。

JugS

Re:オブジェクトに生成について

#10

投稿記事 by JugS » 17年前

vectorを使う場合
コンテナについては、ほとんど知らないのですが、
自分はコンテナは関数付きの配列みたいなものと思ってたんですが、
コンテナの要素として、味方オブジェクトを召喚するたびに入れていくと言うことですか?

konacchi

Re:オブジェクトに生成について

#11

投稿記事 by konacchi » 17年前

そのゲームのことは何も知りませんが、
味方が100人も出るのですか?!!

同時に出ないのであれば100人分を確保する必要はないと思いますが、
出てくる味方のみのオブジェクト生成→描画→破棄 でいいのでは??

Mist

Re:オブジェクトに生成について

#12

投稿記事 by Mist » 17年前

> 勇者のくせになまいきだ
紹介ページ
http://watch.impress.co.jp/game%2Fdocs/ ... 7/nama.htm

絵が(わざと)ファミコンレベルなんだけど、ゲームシステムが秀逸で結構面白ですよ。

konacchi

Re:オブジェクトに生成について

#13

投稿記事 by konacchi » 17年前

どこかのフリーゲームかと思いきや PSPですか、プレイできませんねorz

スクリンショットを見ただけですが、
モンスターサイドのゲームということで中々面白そうです。

とりあえずは上限100でしたら、100体のオブジェクトを生成して描画してみてはどうでしょうか。
それで重ければ、また次の方法を考えればよろしいかと思います。

yuuki++

Re:オブジェクトに生成について

#14

投稿記事 by yuuki++ » 17年前

あるいは、100体作っておいて足りなくなったらnewする、とか
生成のタイミングが頻繁なら、予め確保したほうが良さそうですね。
間が開くなら1つずつ動的確保の方がループ数の削減になりますね。

もしくは、配列のフラグ検索でループ数を食わないように
・配列の要素を消したら、最後尾の要素を消した部分にコピー
・有効な要素数をカウンタとして保存
みたいなことをすればちょっとは節約になったり・・・笑

JugS

Re:オブジェクトに生成について

#15

投稿記事 by JugS » 17年前

たくさんの意見ありがとうございます。

とりあえず、オブジェクトを作ってどの程度の処理速度になるか等、
実験的なプログラムを組んで模索していきたいと思います。


こんなふわふわした質問にも答えていただき、

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る