OOとゲームプログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/11/07 23:55ID:HnYWCQK1行うことが出来るのか語り合うスレです。
00022
01/11/07 23:56ID:???0003名無しさん@お腹いっぱい。
01/11/07 23:57ID:???0004名無しさん@お腹いっぱい。
01/11/07 23:59ID:???http://game.2ch.net/test/read.cgi/gamedev/1005040025/
0005名無しさん@お腹いっぱい。
01/11/08 00:10ID:???でなければ挫折します。
0006名無しさん@お腹いっぱい。
01/11/08 10:17ID:dMTEmYa40007名無しさん@お腹いっぱい。
01/11/08 11:57ID:kAK1Gifs0008名無しさん@お腹いっぱい。
01/11/08 12:27ID:???PS2ってgccでないの?
>>7
そういうのを突っ込むのは板違い
0009名無しさん@お腹いっぱい。
01/11/08 13:35ID:hsQUKhnQOO的思考はイイんだけど
いざ実装するときにC++とかだと
コンパイラ腐っててできねえ!とかあるわよねえ。
コンパイラ特有の変な制限あったり。
マニュアル見たらテンプレートクラスはファイル1つにブチ込めゴルア!
・・・だそうな。鬱死
0010名無しさん@お腹いっぱい。
01/11/08 16:53ID:???0011アマプログラマ
01/11/09 04:02ID:Adk7Pup5switch文とかで分けて処理するとかしたらなーんかいつもながーい
ループが出来上がっちゃうんですが、
みなさんどうされてるんですか?
0012名無しさん@お腹いっぱい。
01/11/09 04:08ID:???この辺とか
ttp://www.hh.iij4u.or.jp/~peto/Games/games_top.html
タスクシステムって、原始的なOOかも。
0013名無しさん@お腹いっぱい。
01/11/09 06:22ID:???状態をオブジェクトにする。
そうすると、ゲームのメインループは有限状態マシンとしてモデル化できて
ゲームに依存しないフレームワークを作ることができる。
有限状態マシンのモデル化は、ちょっとしたオブジェクト指向入門書になら
書いてあるでしょう。
0014名無しさん@お腹いっぱい。
01/11/09 09:06ID:???その辺を参考にするといいかもです、はい。
0015名無しさん@お腹いっぱい。
01/11/09 19:35ID:???アマプログラマと名乗っているなら似非タスク処理を作るのが良いと思う。
0016名無しさん@お腹いっぱい。
01/11/09 20:52ID:???0017アマプログラマ
01/11/09 21:51ID:P26OayTWぜんっぜん思いも寄らなかったけど
>>15読むと時代の流れは先に行ってるようですが、
どないなんでしょう?
0018名無しさん@お腹いっぱい。
01/11/09 21:53ID:???自分なりに力技な方法でやってもいいんじゃないでしょうか。
あまり考えすぎると、理屈倒れのなんとやらになるかもです。
0019名無しさん@お腹いっぱい。
01/11/09 22:05ID:f17v7fRlWndProcでコールバックされた後やるswich文をMessageHandle用クラスに
持たせて多態化させて、デザパタのStateパターンっぽくやろうと試みてます。
Menu選択とか、ダイアログとかのMessageHandle関係全般につかえるよう
ある程度汎用的に・・・と構想してます。
とりあえずの目標はシンプルである程度汎用的なフレームワークを作って、
DirectXやOpenGLをいじくろうと思っているんですが・・・・
こういうことって、既にみんなやってるモンでしょうか?
0020名無しさん@お腹いっぱい。
01/11/10 01:13ID:N+CvjlCZやってると思いますよ。
ゲーム作るのなら必須でしょう。
002119
01/11/10 02:02ID:???面白いです。確かに原始的なOOPという感じです。
TCBを見てるとクラス化したくなってしまいますが、
長年培われてきた(?)型だけに、下手な設計ではOO化は
逆効果になりそうですね。
デザパタではState,Strategy,Flyweightあたりがまず不可欠
でしょうねー。
002219
01/11/10 02:05ID:uyB6mt6Sなのでしょうか?
C++でやってるのは余裕のある大手くらいってかんじですか?
0023名無しさん@お腹いっぱい。
01/11/10 03:17ID:EV3x96b10024_
01/11/10 03:21ID:weMvVVDKマジ?
XboxはVC++がデフォだって聞いたけど。
0025名無しさん@お腹いっぱい。
01/11/10 03:24ID:???こういうことを言う奴はシッタカ君
0027名無しさん@お腹いっぱい。
01/11/10 03:26ID:EV3x96b1そうか?
継承するとパフォーマンスが悲惨なんだが
そんな事はないか?
0028名無しさん@お腹いっぱい。
01/11/10 03:29ID:???0029アマグラマ
01/11/10 03:33ID:???try-Ace PlayStation Foundation Class Library
とかなんか誇らしげに表示されてるのは見たですが。
0030名無しさん@お腹いっぱい。
01/11/10 03:34ID:EV3x96b1我がマシンでは数倍違う
003119
01/11/10 03:49ID:???私もOOやC++崇拝者なわけではないんだけど。
C++がCと比べてオーバヘッドあるのは事実だと思うけど、Cの手法だって
インライン関数だってインラインアセンブラだって使えるわけだし。
深すぎる継承を使わないとかクリティカルなところでは伝統的な手法を
使ってゆけば、使い物にならん、ってことはないいんじゃないかと。
0032名無しさん@お腹いっぱい。
01/11/10 03:59ID:???まさにシッタカ君
全然何も分かってないらしいな
プラットフォームとは関係ない
しょうがないから本を一冊薦めといてやる
「C++/C プログラム改善法」
ただしトッパンはもうつぶれてしまった
仕方ないので
「Efficient C++」
で代用
こちらはピアソン・エデュケーションだからまだ
売ってるだろう
0033名無しさん@お腹いっぱい。
01/11/10 04:19ID:EV3x96b1そうだとすればC++は使い物にならないという事だな。
0034名無しさん@お腹いっぱい。
01/11/10 04:27ID:lPeuTMQg0035名無しさん@お腹いっぱい。
01/11/10 04:29ID:EV3x96b1同じ会社の(クラス)ライブラリが
CとC++でそう違うものなのか?
0036とむ ◆TMwDpCZo
01/11/10 05:10ID:???相性良くないような気がしています…。
昔はいいと思ったんだけどね…。
0037_
01/11/10 05:36ID:/4YFolbK延々とグローバル関数作りまくり・・
STL無いし・・
0038名無しさん@お腹いっぱい。
01/11/10 06:46ID:???call [v_table+n]
程度じゃない?
どちらかといえば、インスタンスの生成破棄を
無頓着に行うと効率さがるよね。そんなことは
Effecient C++ レベルにでも書いて有るようなことだし。
0039名無しさん@お腹いっぱい。
01/11/10 06:56ID:???コード量が約2倍になる。コードの書き方を間違えなければ、
Cと等速のコードも書ける。
0040名無しさん@お腹いっぱい。
01/11/10 07:12ID:???一人でシコシコ作る分には無理に移行する必要無しと思われ。
0041名無しさん@お腹いっぱい。
01/11/10 09:20ID:???0042名無しさん@お腹いっぱい。
01/11/10 09:49ID:???OOを完全にマスターしているか、必要以上に使わないなら、
大丈夫かと。中途半端に使うと非効率なんで。
0043名無しさん@お腹いっぱい。
01/11/10 11:20ID:???なんとなくって書いてるところにつっこむのはアレだけど、
どのへんが相性よくないと思ってる?
0044名無しさん@お腹いっぱい。
01/11/10 12:11ID:???オレはむしろOOは中途半端がいいと思う。
業務アプリみたいに、完璧なOOPではやはり速度的に厳しいんじゃないか?
OOは中途半端にいいとこだけ使って、古いやり方をラッピング+部品化ってのが
いいじゃないか。
効果的にやるのにOOの理解は中途半端じゃ困るが。
0045名無しさん@お腹いっぱい。
01/11/10 12:15ID:lDT42030最後のはなんじゃい、ってのはナシね。アポーに言ってくれ
0046とむ ◆TMwDpCZo
01/11/10 12:47ID:???難しいなあ…。本当に感覚的な問題なんだけども…。
私は、OOPは何かを分散的に処理するのに向いているような気が
している。分散的ってのは、例えばWindowsのように、多数のタスク
を同時に動かしたりするようなものね。
で、ゲームもまさにそういう分散的なアプリケーションで、確かにそう
いう面ではOOPと良く親和する部分もあると思います。でも、ゲーム
の場合突如として様々なタスクを一元的に管理する(つまり分散的の
逆)必要が出てくる場合があります。このような時、Cのような単純な
言語に比べてちょっとめんどくさいような気がするのですよ。ほんとに
なんとなくなんだけど。
ま、C++は言語仕様上OOPというスタイルが可能になっているだけ
で、Cと全く同じスタイルで組む事は出来ますし、逆にCでもある程度
まではオブジェクト指向なスタイルで組む事も可能は可能ですから、
要は組み方の問題なんですけどね。
単に私の腕がヘボだからそう思うのかも知れません。クラスのスコー
プを考えて、何をどのファイルに入れるかで死ぬほど悩みますから(笑)。
Cの時はここまで悩まなかったのに…って。
0047名無しさん@お腹いっぱい。
01/11/10 13:19ID:lDT42030正直、私もCでゴーリゴリやっていた(今でもそう)んで、
OO的設計に馴染めない自分ってのが居る(笑)
OOに限らず、場合によっては中身が見えないハコって
不安でしょうがない(笑)
0048名無しさん@お腹いっぱい。
01/11/10 13:28ID:???>でも、ゲーム
>の場合突如として様々なタスクを一元的に管理する(つまり分散的の
>逆)必要が出てくる場合があります。
いや、俺は逆にこの辺のことをスマートにできるからOOPLがいいと思ってるんだが。
タスクって要するに抽象クラスなわけで、そういうことをするのに言語の支援が受け
られるなら、そっちのほうがいいと思うし。
まぁ、もちろん、OOは概念なんだから、実装は一番やりやすいのでやればいいんだけどね。
(Cでも、ゲーム作ってるとOOに近くならない?
>クラスのスコー
>プを考えて、何をどのファイルに入れるかで死ぬほど悩みますから(笑)。
>Cの時はここまで悩まなかったのに…って。
これは激しく同意。
宣言の順序とか考えなきゃならないときもあって激しく萎える。
C++はこれだから…。
0049名無しさん@お腹いっぱい。
01/11/10 13:35ID:???中身が見えないのはOOとは関係ないなぁ。
C++だってソース公開すればブラックボックスじゃないし、
システムが複雑になってくるとクラス図にしやすい分C++の方がよさげ。
0050とむ ◆TMwDpCZo
01/11/10 13:37ID:???まだC等の非オブジェクト志向言語での制作スタイルから脱しきれて
いないからでしょう。これらの言語を何と呼ぶのかな? 良くわからな
いけど、とりあえず私は「処理志向」なんだよね。
本来、OOPというのは、オブジェクトが先にあって、それが動作すべき
処理が従になるのが正しいのだと思います。
しかし、私は頭が古いから、実現したい処理の方ばかりに考えが行って
しまうのですね。で、例えば今動作しているオブジェクト(ここで言うオブ
ジェクトは、ゲームにおけるオブジェクトね)全てに影響する処理、など
というものを考えた時に、処理が主で、クラスが従という考え方をしてし
まうのです。ある処理のためにクラスを使おう、などと思ってしまうと、
処理がプログラム全体のあちこちに散らばっていると、問題とするクラス
をどこにインクルードするかというスコープの問題で頭を抱えてしまう
のです…。
ああ、なんか自分で書いてて良くわからなくなってしまった(笑)。
ヘボコテハンの独り言だと思って下され。
0051とむ ◆TMwDpCZo
01/11/10 13:44ID:???Cで遊んでた時は、書いたコードが、アセンブラで言うところのどんな
コードに直されるか、うっすら予測しながら書いてたよ。もちろん完璧
じゃないけどね。大体どう書けばどういうループが組まれるか、とかそん
な感じでなんとなーく考えながらコードを組んでた。提供されるライブラ
リも、何がどう処理されるかとか半分くらい予測つくしね。
でもC++の場合、パッと見で「現実にはどういう処理がなされるか」と
いうのが分かりづらいんだよね。パッと見っつーか、良く見てもさっぱり
わからない。あるコードを書いた時、どこをどう参照してどういうコード
にコンパイルされるのか、ほとんど予測つかない。
「別にアセンブラのコードを予測しなくていいよ」というのが正解なんで
しょうが、例えばハードにちょっと近い処理をしたい時に、書かれるコード
の応答性がどうかとか、メモリ管理がクリティカルになる可能性があるの
かどうか、ワイルドな入力に対して堅牢なのかどうかとか、予測つかない
と不安なんだよね…。古い人だから(笑)。
0052名無しさん@お腹いっぱい。
01/11/10 13:45ID:???はは。
俺も、まだメインループ等全体にかかわることは、OOの外だよ。
どこまでをOOにするのかは意見の分かれる処なのかもしれん。
コリジョンの処理とかどこでやろう?とか、いまだに悩むよ。
0053名無しさん@お腹いっぱい。
01/11/10 13:50ID:???たぶんそれはオブジェクト指向の「すべての対象はオブジェクトです」みたいな
理想論を見てひいてしまってる感じじゃない?
そういう理想論は結局理想であって、OOPでやっても「全てに影響する」なん
てのは「処理ルーチンをクラス化して順番に解決する」という結局本質的には
>>50のやり方と大差ないものだったりするよ。
0054とむ ◆TMwDpCZo
01/11/10 13:53ID:???>>53
そうだね、現実的に考えれば、そういった広範囲に及ぶ処理はOO
の外に追い出すのが普通だね。
でも私は理想主義者なのかな?(笑) 例えば設計時に、色んな
物を美しくクラス化して、完全なヘッダを設計したりするでしょ。
けど、結局上記のような問題にぶち当たり、仕方なくそれらのクラス
を呼び出す関数を作り、広範囲な処理時にはその関数を更に呼び
出すような仕掛けにしてしまい、「これじゃC++の意味ないじゃん!」
と机を叩くわけです(笑)。
0055名無しさん@お腹いっぱい。
01/11/10 14:27ID:???「すべてがオブジェクト」ってのはOOPL自身の設計の話なので、
(しかも言語の効率とか、複雑性とかの話なので)ちょっとちがうかも。
>>54
「すべてに影響する」ってのを実現するにはVisitorパターンを使うわけだけども、
あれは、諸刃の剣だからあぁ。
どっちにしろ、「処理」だってオブジェクトなわけで、そのように設計するかしないかは
あとは慣れだろうな。
0056名無しさん@お腹いっぱい。
01/11/10 15:40ID:Pfrth29iそら、Cよりもオーバーヘッドがあるかもしれないけど、そんなに問題にならんでしょうに。
もしなるとしたら、それは実装に問題ありと思うが。
それに、無理して全部C++で書く必要もないでしょう。
最下位レベルだけアセンブラでかけばいいのでないのか。
0057とむ ◆TMwDpCZo
01/11/10 15:58ID:???間違ってない気がするのですが…。
0058がばろん@Mたんちゅきちゅき
01/11/10 16:02ID:???たぶんCなどの言語の総称は「構造化プログラミング言語」。
C++が、どんなマシン語のコードに変換されるかは、
いちどCでオブジェクト指向的なプログラムを組んでみると、
理解しやすいんじゃないでしょうか。
たしかプログラム板のどこかのスレに、そういう話題があったとおもいます。
virtual function tableとかで検索かければ見つかるかも。
あとオブジェクト指向の内部よりな話なら下の本が、おすすめ。
「 ゲーム&&オブジェクト指向プログラミング」塚越 一雄
>>27たん。
継承より問題は多態性じゃない?
それにしたって考慮するほどのものじゃないけれど。
// スレと関係ないけど、いま名前をいれて書き込んだら
// 「ERROR:名前いれてちょ。」って言われたよ。(TT
■ このスレッドは過去ログ倉庫に格納されています