具体的なゲーム名を挙げて、
どのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1155209226/
テンプレ追加事項あったらよろすく
探検
ゲームにおけるデータ構造・クラス設計・パターン2
■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
2008/05/23(金) 21:10:59ID:8M1gqhPX386名前は開発中のものです。
2008/11/13(木) 21:08:31ID:3NMFClPL387名前は開発中のものです。
2008/11/14(金) 01:18:47ID:USS/q0/d >>385
名前空間を分けるメリットが見当たらなければ分けないほうがいいでしょ。
名前空間を分けるメリットが見当たらなければ分けないほうがいいでしょ。
388名前は開発中のものです。
2008/11/16(日) 02:04:27ID:OW89wflh ライブラリ利用者の立場にたって、
どうなってると使いやすいかを考えて臨機応変に決める。
どうなってると使いやすいかを考えて臨機応変に決める。
389名前は開発中のものです。
2008/11/19(水) 20:47:58ID:oq/eqnIP >>382-384
まだ読んでいない俺には勉強になったthx
まだ読んでいない俺には勉強になったthx
390名前は開発中のものです。
2008/11/20(木) 09:17:22ID:jP0yKBYe >>384
のFirst Head本は、読み物形式で
悪いコードをよいコードに変更していきながら、解説しているようになっているので、
GOF本よりかなり読みやすいよ
ただ、いくつかのパターンが省略されて適当解説になっているので、注意。
適当になってる後半部分も解説されていたらかなり神本だった
(まああのペースで全部網羅すると、値段とページがすごいことになりそうだがw)
のFirst Head本は、読み物形式で
悪いコードをよいコードに変更していきながら、解説しているようになっているので、
GOF本よりかなり読みやすいよ
ただ、いくつかのパターンが省略されて適当解説になっているので、注意。
適当になってる後半部分も解説されていたらかなり神本だった
(まああのペースで全部網羅すると、値段とページがすごいことになりそうだがw)
391名前は開発中のものです。
2008/11/30(日) 20:02:56ID:GlMxgFAf すいませんというか疑問です。
特定の条件を満たしたら処理(入力の読み取り)を行う、という作業を内部で行う関数を作ろうと思ったのですが、疑問がいろいろ出てきました。
(1回のループの中に複数この関数を配置して、どこかで実際に実行する、というような使い方を想定してます。)
1、この関数を採用する場合、名前の付け方
Polls()、CanPoll()、IsPolling() …主目的が『必要ならば読み取る』なので何かしっくりしない。
2、何かよりよい代替の設計があるだろうか
何か設計が変な気がする、が、なぜそう思うのはわからない。
どなたか導きをお願いします
特定の条件を満たしたら処理(入力の読み取り)を行う、という作業を内部で行う関数を作ろうと思ったのですが、疑問がいろいろ出てきました。
(1回のループの中に複数この関数を配置して、どこかで実際に実行する、というような使い方を想定してます。)
1、この関数を採用する場合、名前の付け方
Polls()、CanPoll()、IsPolling() …主目的が『必要ならば読み取る』なので何かしっくりしない。
2、何かよりよい代替の設計があるだろうか
何か設計が変な気がする、が、なぜそう思うのはわからない。
どなたか導きをお願いします
392名前は開発中のものです。
2008/11/30(日) 20:03:41ID:GlMxgFAf なんかいっぱい改行が入ってるorz
393名前は開発中のものです。
2008/11/30(日) 20:44:16ID:O5396ILY >>391
関数の名前は内部での処理なんて割とどうでもいいので、
とにかくその関数の意味(挙動)がわかる名前にしたらいいんじゃね。
ちなみにJavaの場合、キーボードやマウスからの入力によってイベントが発生し、
そのイベントによって適切なリスナーの関数が起動されます。
プログラムの本流が直接読みに行くことなんてしません。
関数の名前は内部での処理なんて割とどうでもいいので、
とにかくその関数の意味(挙動)がわかる名前にしたらいいんじゃね。
ちなみにJavaの場合、キーボードやマウスからの入力によってイベントが発生し、
そのイベントによって適切なリスナーの関数が起動されます。
プログラムの本流が直接読みに行くことなんてしません。
394名前は開発中のものです。
2008/12/02(火) 23:03:37ID:QPPOGJkH395名前は開発中のものです。
2008/12/03(水) 00:00:25ID:QPPOGJkH ついでにスレを読み返してメモメモ、と思った情報をまとめてみた。
コルーチン、マイクロスレッド、ファイバ
>>145,>>146,>>162,>>164
楽だが応用性のないありがちな実装
>>159,>>160
分業とデバッグ
>>194-213
ADVの画面クリックとか
>>270,>>271
メニュー画面の管理とかシーン管理とか
>>59-71,>>207,>>273-276>>302,>>305-314・・・VMCはたぶんMCVのことだよね?
状態管理とか
>>318-325
priateとgetter、setter
>>277-301
設計Tips
>>352-357,>>358-367,>>382-384
コルーチン、マイクロスレッド、ファイバ
>>145,>>146,>>162,>>164
楽だが応用性のないありがちな実装
>>159,>>160
分業とデバッグ
>>194-213
ADVの画面クリックとか
>>270,>>271
メニュー画面の管理とかシーン管理とか
>>59-71,>>207,>>273-276>>302,>>305-314・・・VMCはたぶんMCVのことだよね?
状態管理とか
>>318-325
priateとgetter、setter
>>277-301
設計Tips
>>352-357,>>358-367,>>382-384
396名前は開発中のものです。
2008/12/13(土) 14:29:53ID:lcU0tpK0 ゲーム開発論を語るスレを立てようと思っていたんですが、すでに似たようなスレがあると聞いて相談にきました。
このスレがあるので必要ないのでは?という意見があり、新スレを立てるべきかどうか迷っています。
ご意見頂けないでしょうか?
↓ゲーム開発論スレ要望の経緯
http://pc11.2ch.net/test/read.cgi/gamedev/1206381315/
KONAMI、スクエニ、セガ、バンナム、コーエーの大手5社がゲーム開発現場の未来を再び討議
「5年後のゲーム開発現場を考える〜ゲーム会社技術開発の現場から2〜」
http://game.watch.impress.co.jp/docs/20080916/cedec_dev.htm
「Gears of War」はいかにして生まれたのか。Cliff Bleszinski氏が語る,有効なゲーム開発プロセス
http://www.4gamer.net/news/history/2007.03/20070309215934detail.html
Agile型開発でのゲームデザイン
http://www.4gamer.net/news/history/2007.03/20070311002313detail.html
このスレがあるので必要ないのでは?という意見があり、新スレを立てるべきかどうか迷っています。
ご意見頂けないでしょうか?
↓ゲーム開発論スレ要望の経緯
http://pc11.2ch.net/test/read.cgi/gamedev/1206381315/
KONAMI、スクエニ、セガ、バンナム、コーエーの大手5社がゲーム開発現場の未来を再び討議
「5年後のゲーム開発現場を考える〜ゲーム会社技術開発の現場から2〜」
http://game.watch.impress.co.jp/docs/20080916/cedec_dev.htm
「Gears of War」はいかにして生まれたのか。Cliff Bleszinski氏が語る,有効なゲーム開発プロセス
http://www.4gamer.net/news/history/2007.03/20070309215934detail.html
Agile型開発でのゲームデザイン
http://www.4gamer.net/news/history/2007.03/20070311002313detail.html
397名前は開発中のものです。
2008/12/14(日) 06:46:04ID:foB3PhGt398名前は開発中のものです。
2008/12/14(日) 06:47:43ID:3zIx1sHY 想定通りでワロタ
399名前は開発中のものです。
2008/12/15(月) 01:28:13ID:AODSdSoN >>395
ありがとう助かるよ
ありがとう助かるよ
400名前は開発中のものです。
2008/12/18(木) 23:54:28ID:QLMqRIYY キャラクタのデータはテキストファイルにゆだねて動的にできるけど
ふるまいはどうすればいいんだろう。
基本ふるまいをプログラムに実装して(静的)、テキストファイルで
その呼び出しを記述する(動的)とかなのかな。他に思いつかん。
ふるまいはどうすればいいんだろう。
基本ふるまいをプログラムに実装して(静的)、テキストファイルで
その呼び出しを記述する(動的)とかなのかな。他に思いつかん。
401名前は開発中のものです。
2008/12/19(金) 12:11:03ID:ygbWfkiR 俺はそうしてる。
402名前は開発中のものです。
2008/12/21(日) 09:35:05ID:7nb+zy1b つまりスクリプトですね。
403名前は開発中のものです。
2008/12/25(木) 19:24:07ID:QpPf00tD 知ってるよDIって言うんだよね
404名前は開発中のものです。
2008/12/26(金) 01:45:37ID:NBeqwEQB 最近でたセガのあれな本を読んで、自分がずっと詰まってたしょーもないことを勝手にメモ。
結論としては基本中の基本で、データと処理は独立させましょ、ってことなんだけど。
ゲーム中ができたけど、ポーズ機能を追加、ポーズメニュー表示関連をクラスで作って実装するには、という感じの想定。
こんな感じに管理してるとして(具体的にはもっと複雑だけど。)
class StgScene {
Mover movers[];
void Update() {
//A
for(・・・) {
movers[i].Move();
}
//他判定処理等
//B
for(・・・) {
movers[i].Draw();
}
//C
}
}
・A〜Bまでの処理はポーズ時すっ飛ばす、となる。ので、関数化するなりクラス化したい。
・対象性を考え、Menuクラスに対してA〜Cの処理をPlayingクラスにする。(つまりSTGSceneはデータのみ。)
・MenuクラスにもB〜Cの処理を書き、追加してMenu関連の処理も記述する。
こうすると、結果的にSTGシーンはデータしか持たなくなって、処理はPlayingクラスやMenuクラスに任せる形になる。
見通しが悪くならずに拡張できる。
今までずっと気づかなかった自分の頭の悪さに笑うしかないぜ。
結論としては基本中の基本で、データと処理は独立させましょ、ってことなんだけど。
ゲーム中ができたけど、ポーズ機能を追加、ポーズメニュー表示関連をクラスで作って実装するには、という感じの想定。
こんな感じに管理してるとして(具体的にはもっと複雑だけど。)
class StgScene {
Mover movers[];
void Update() {
//A
for(・・・) {
movers[i].Move();
}
//他判定処理等
//B
for(・・・) {
movers[i].Draw();
}
//C
}
}
・A〜Bまでの処理はポーズ時すっ飛ばす、となる。ので、関数化するなりクラス化したい。
・対象性を考え、Menuクラスに対してA〜Cの処理をPlayingクラスにする。(つまりSTGSceneはデータのみ。)
・MenuクラスにもB〜Cの処理を書き、追加してMenu関連の処理も記述する。
こうすると、結果的にSTGシーンはデータしか持たなくなって、処理はPlayingクラスやMenuクラスに任せる形になる。
見通しが悪くならずに拡張できる。
今までずっと気づかなかった自分の頭の悪さに笑うしかないぜ。
405名前は開発中のものです。
2008/12/26(金) 08:47:36ID:Y8oI6MzT 「勝手にメモ」を書き込んでくれる人(達?)の存在は、正直ありがたい
406名前は開発中のものです。
2008/12/28(日) 17:34:36ID:pzJs6/UU MVCでいうと、
M:StgScene
V,C:Menu,Playing
ってことなのだろうか?
Stateパターンという風にも捉えられる?
M:StgScene
V,C:Menu,Playing
ってことなのだろうか?
Stateパターンという風にも捉えられる?
407名前は開発中のものです。
2008/12/29(月) 00:45:07ID:THn3O3Oz Stateパターンだとこんなかんじかね?
struct StgScene {
void A();
void B();
void C();
};
class State {
virtual void Update(StgScene&) = 0;
};
class Playing : public State {
virtual void Update(StgScene& scene){
scene.A();
scene.B();
scene.C();
}
};
class Menu : public State {
virtual void Update(StgScene& scene){
scene.C();
}
};
struct StgScene {
void A();
void B();
void C();
};
class State {
virtual void Update(StgScene&) = 0;
};
class Playing : public State {
virtual void Update(StgScene& scene){
scene.A();
scene.B();
scene.C();
}
};
class Menu : public State {
virtual void Update(StgScene& scene){
scene.C();
}
};
408名前は開発中のものです。
2009/01/07(水) 23:21:00ID:rBsXmGd8 なんか話題無いなー的なので、>>404の続きでも。今回もセガのあれを参考にしました。
自分もまだ試作中だけど、かなり自由かつ堅実に作れる。
StgSceneクラスの考えをもう少し推し進めると、全てのシーンの汎化クラスであるSceneクラスが作れそう。
# child // フィールド。子シーンの保持。
# childTypes // フィールド。runやUpdateの戻り値が自分の子かどうか識別するためのもの。
# run(Scene parent) // メソッド。child == null のとき、自分が実行すべきシーンと認識してrunする。戻り値に次の遷移先シーンかnull返す。
# focusing // イベント。シーン遷移で自分が次にrunする場合の初期化処理。Update内のシーン遷移処理に際し呼ばれることが目的なので、abstractメソッドでもいいです。
# unfocusing // イベント。シーン遷移で別のシーンに移動する際の後始末。上と同様。戻り値に次の遷移先シーンかnull返す。
+Update(Scene parent) // childがいればchildのUpdateを呼び出し、そうでなければrunする。その後、遷移先シーン(つまりUpdateやrunの戻り値)に応じた遷移処理を行う。
Updateの実装内容について
1、シーンは線形リストを形成し、末端シーンのrunを実行するように記述する。(rootScene → StgGame → StgPlayingや、rootScene → TitleScene → TitleHighScoreといったリスト構造になる。)
2、runのreturnに意味を決める。そしてそれによって処理が分岐するように記述する。null、自分、兄弟シーン、親以上。
・nullは、runしたシーンに子が出来て、自分がフォーカスシーンで無いことを表す。
・原則として、自分の子供と祖先の子供以外には直接遷移できないとする。する必要も考えられないので。
・・・っとここまで書いて、ソースコードがないとどう考えても伝わらんだろと思った。
自分もまだ試作中だけど、かなり自由かつ堅実に作れる。
StgSceneクラスの考えをもう少し推し進めると、全てのシーンの汎化クラスであるSceneクラスが作れそう。
# child // フィールド。子シーンの保持。
# childTypes // フィールド。runやUpdateの戻り値が自分の子かどうか識別するためのもの。
# run(Scene parent) // メソッド。child == null のとき、自分が実行すべきシーンと認識してrunする。戻り値に次の遷移先シーンかnull返す。
# focusing // イベント。シーン遷移で自分が次にrunする場合の初期化処理。Update内のシーン遷移処理に際し呼ばれることが目的なので、abstractメソッドでもいいです。
# unfocusing // イベント。シーン遷移で別のシーンに移動する際の後始末。上と同様。戻り値に次の遷移先シーンかnull返す。
+Update(Scene parent) // childがいればchildのUpdateを呼び出し、そうでなければrunする。その後、遷移先シーン(つまりUpdateやrunの戻り値)に応じた遷移処理を行う。
Updateの実装内容について
1、シーンは線形リストを形成し、末端シーンのrunを実行するように記述する。(rootScene → StgGame → StgPlayingや、rootScene → TitleScene → TitleHighScoreといったリスト構造になる。)
2、runのreturnに意味を決める。そしてそれによって処理が分岐するように記述する。null、自分、兄弟シーン、親以上。
・nullは、runしたシーンに子が出来て、自分がフォーカスシーンで無いことを表す。
・原則として、自分の子供と祖先の子供以外には直接遷移できないとする。する必要も考えられないので。
・・・っとここまで書いて、ソースコードがないとどう考えても伝わらんだろと思った。
409名前は開発中のものです。
2009/01/07(水) 23:25:20ID:rBsXmGd8 しかもミスってる。
# unfocusing ・・・『戻り値に次の遷移先シーンかnull返す。』 ←×
正しくは、+Updateの行の後ろに『戻り値に次の遷移先シーンかnull返す。』と書くつもりでした。
# unfocusing ・・・『戻り値に次の遷移先シーンかnull返す。』 ←×
正しくは、+Updateの行の後ろに『戻り値に次の遷移先シーンかnull返す。』と書くつもりでした。
410名前は開発中のものです。
2009/01/09(金) 00:07:48ID:vYDzTrO8 自作の状態遷移クラスに似てるな。
・状態に親子関係がある。
・戻り値の意味によって遷移先を決める。
・自分の子、先祖の子以外は直接遷移できない。
ってあたり、ほぼ同じっぽい。
戻り値って具体的に何を返しているの?
自分の場合、STAGE_CLEARとかの定数を返している。
その値をみて、さらに親へ遷移(戻り値を返す)したり、子供へ遷移したりしてる。
・状態に親子関係がある。
・戻り値の意味によって遷移先を決める。
・自分の子、先祖の子以外は直接遷移できない。
ってあたり、ほぼ同じっぽい。
戻り値って具体的に何を返しているの?
自分の場合、STAGE_CLEARとかの定数を返している。
その値をみて、さらに親へ遷移(戻り値を返す)したり、子供へ遷移したりしてる。
411名前は開発中のものです。
2009/01/09(金) 01:05:35ID:2TNYOX7D >>410
このソース、イベントといってるところでわかるように、C#です。Updateの戻り値はSceneインスタンスですね。
C#ではhoge.GetType()でインスタンスの型情報(Typeインスタンス)が取得できるもんで、それを定数代わりに利用します。
で、戻り値に対する処理はこんな感じ。
戻り値がnullなら、フォーカスシーンが孫以下であることを表します。
戻り値sceneのGetType()と、
・ChildのTypeインスタンスと比較すれば遷移が不要かどうかわかります。(等しければ移動していない。)
・定数として保持させたType配列と比較すれば遷移先が子かどうかはわかります。
・自分のTypeインスタンスと比較すれば遷移先が自分かどうかがわかります。自分ならば、focusingで初期化処理を呼び出します。
・それ以外の場合、祖先および祖先の子のいずれかであることがわかります。いずれにしても上位のシーンに処理を仰ぎ、自分は破棄されます。
ってかんじでしょうかね。
このソース、イベントといってるところでわかるように、C#です。Updateの戻り値はSceneインスタンスですね。
C#ではhoge.GetType()でインスタンスの型情報(Typeインスタンス)が取得できるもんで、それを定数代わりに利用します。
で、戻り値に対する処理はこんな感じ。
戻り値がnullなら、フォーカスシーンが孫以下であることを表します。
戻り値sceneのGetType()と、
・ChildのTypeインスタンスと比較すれば遷移が不要かどうかわかります。(等しければ移動していない。)
・定数として保持させたType配列と比較すれば遷移先が子かどうかはわかります。
・自分のTypeインスタンスと比較すれば遷移先が自分かどうかがわかります。自分ならば、focusingで初期化処理を呼び出します。
・それ以外の場合、祖先および祖先の子のいずれかであることがわかります。いずれにしても上位のシーンに処理を仰ぎ、自分は破棄されます。
ってかんじでしょうかね。
412名前は開発中のものです。
2009/01/09(金) 01:28:17ID:vYDzTrO8 インスタンスそのものを返すのかぁ。
確かにそのほうが直接的ですっきりするかもね。
確かにそのほうが直接的ですっきりするかもね。
413名前は開発中のものです。
2009/01/10(土) 23:29:07ID:GXwf3cbn インスタンスを生成するのは作成した瞬間にクラスが2つ分になってメモリが足りなくて死ぬ
危険があるから1個間にはさみたいな。
生成メソッドはstaticにするとかなんとか。
危険があるから1個間にはさみたいな。
生成メソッドはstaticにするとかなんとか。
414名前は開発中のものです。
2009/01/11(日) 00:09:06ID:dWwzUAmX まて、よく意味はわからんが今時のゲームやるようなWindows環境前提なら、最低でも500MB程度はメモリに余裕があるだろう。
どう考えても使いきれるとは思えん
どう考えても使いきれるとは思えん
415名前は開発中のものです。
2009/01/11(日) 02:43:39ID:cWr0moum あれか? NSAppみたいなアプリケーションのインスタンスを丸ごとコピーするとかの話か?
416名前は開発中のものです。
2009/01/12(月) 02:58:31ID:8xCnbJpy417名前は開発中のものです。
2009/01/12(月) 03:30:42ID:mDvqZ10E シーン遷移時に元シーン内で新シーンのインスタンスを生成するのは、
そのコンストラクタへシーン用引数を指定できるのがメリットかな。
あと、シーンコンストラクタ/デストラクタとは別にシーン初期化/解放メソッドを定義しておいて、
シーンのコンストラクタは必要なシーン用引数のメンバへの保存だけを行うような形にすれば、
メモリが足りないということは殆どなくなると思うけどね。
それから、個人的な意見としては、
シーンが生成される際にはまだ生成元シーンのインスタンスへはアクセス可能でいたい。
このライフサイクルのほうが、現在の実行状態を認識し易くて、様々な仕様変更に柔軟に耐えうると思う。
そのコンストラクタへシーン用引数を指定できるのがメリットかな。
あと、シーンコンストラクタ/デストラクタとは別にシーン初期化/解放メソッドを定義しておいて、
シーンのコンストラクタは必要なシーン用引数のメンバへの保存だけを行うような形にすれば、
メモリが足りないということは殆どなくなると思うけどね。
それから、個人的な意見としては、
シーンが生成される際にはまだ生成元シーンのインスタンスへはアクセス可能でいたい。
このライフサイクルのほうが、現在の実行状態を認識し易くて、様々な仕様変更に柔軟に耐えうると思う。
418名前は開発中のものです。
2009/01/12(月) 03:32:37ID:mDvqZ10E ごめん
×ライフサイクル
○ライフタイム
×ライフサイクル
○ライフタイム
419名前は開発中のものです。
2009/01/12(月) 11:14:49ID:pb2pea9L そのあたりの話は研究しがいがあるな。
420名前は開発中のものです。
2009/01/12(月) 13:32:30ID:YXD0YS+N421名前は開発中のものです。
2009/01/12(月) 14:12:02ID:sqS0O25/ シーンをまたぐデータは、そもそもシーンが管理すべきなのか
検討した方がいいかも。
検討した方がいいかも。
422名前は開発中のものです。
2009/01/13(火) 22:46:08ID:BhFnEm7r シーンを跨ぐデータはスマートポインタみたいなもんで管理するんだが
そのポインタを渡すのにシーン生成を先にしたいという感じかな。
オレは管理マネージャ作るけど。
そのポインタを渡すのにシーン生成を先にしたいという感じかな。
オレは管理マネージャ作るけど。
423名前は開発中のものです。
2009/01/13(火) 22:46:54ID:BhFnEm7r 管理マネージャじゃマネージャマネージャだなw
まあC++になって楽になったものよ。
まあC++になって楽になったものよ。
424名前は開発中のものです。
2009/01/14(水) 03:24:31ID:0DnXfUAy425名前は開発中のものです。
2009/01/14(水) 03:32:21ID:0DnXfUAy 親シーン子シーン関係なくデータを引き継ぐ場合として考えられるのは、例えばこんなときか。
ゲームを普通にプレイしてゲームオーバー表示(プレイ画面に追加表示)。その後ハイスコア画面に行くと考えると、
スコアの点数がまたぐデータになる。
RootScene>GameScene>GamePlaying
から
RootScene>GameScene>GamePlaying>GameOver
となり、その後
RootScene>HighScoreScene
に遷移する。
その際GameOverがHiScoreSceneを生成する際にコンストラクタでスコアデータを渡してやれば無問題。
ゲームを普通にプレイしてゲームオーバー表示(プレイ画面に追加表示)。その後ハイスコア画面に行くと考えると、
スコアの点数がまたぐデータになる。
RootScene>GameScene>GamePlaying
から
RootScene>GameScene>GamePlaying>GameOver
となり、その後
RootScene>HighScoreScene
に遷移する。
その際GameOverがHiScoreSceneを生成する際にコンストラクタでスコアデータを渡してやれば無問題。
426名前は開発中のものです。
2009/01/17(土) 14:39:28ID:AWtASysq YAGNI
427名前は開発中のものです。
2009/01/21(水) 22:53:35ID:sHv/LIGj スレが止まってるとさびしいな。
独り言でも言ってるか。
STGを作るときに、解決すべき内容は。
・1/60秒や入力情報など、最も基本的なものの構築。
・シーン遷移等、シーン管理の構築。
ここまでで共通の枠組みは作れる。シーン遷移はこのスレで紹介してたやり方でいくとして。
実際のゲーム中の解決すべき内容は
・自機、敵機などを1オブジェクトとするとして、オブジェクトの構造およびオブジェクト達の管理方法。
・敵出現(=ステージ情報)の作成方法、および管理方法や、それにかかわること。(リプレイとか。)
・あるオブジェクトの変数に依存するオブジェクトの管理、依存方法。(耐久力表示、バリア、レーザーなど。)
・オブジェクト同士の衝突判定の記述。衝突判定まで。
・誘導弾など、常に依存先がかわるオブジェクトの記述方法。
で一通りっぽい。この手順でオブジェクトのインタフェースや管理方法を徐々に改良すると考える。
独り言でも言ってるか。
STGを作るときに、解決すべき内容は。
・1/60秒や入力情報など、最も基本的なものの構築。
・シーン遷移等、シーン管理の構築。
ここまでで共通の枠組みは作れる。シーン遷移はこのスレで紹介してたやり方でいくとして。
実際のゲーム中の解決すべき内容は
・自機、敵機などを1オブジェクトとするとして、オブジェクトの構造およびオブジェクト達の管理方法。
・敵出現(=ステージ情報)の作成方法、および管理方法や、それにかかわること。(リプレイとか。)
・あるオブジェクトの変数に依存するオブジェクトの管理、依存方法。(耐久力表示、バリア、レーザーなど。)
・オブジェクト同士の衝突判定の記述。衝突判定まで。
・誘導弾など、常に依存先がかわるオブジェクトの記述方法。
で一通りっぽい。この手順でオブジェクトのインタフェースや管理方法を徐々に改良すると考える。
428名前は開発中のものです。
2009/01/21(水) 23:23:50ID:sHv/LIGj オブジェクトの構造とそれらの管理。
前提として、管理のことを踏まえスーパークラスで多態性する。
publicにしそうな変数は 位置、速度、耐久力(=生存判定)
publicにしそうな関数は 更新、描画
いまいち不定だけどpublicで必要そうなものは、衝突判定にかかわるもの。
どこまでを1オブジェクトとするか。
・部位破壊が出来るものなど、一方的に依存するオブジェクトは別オブジェクトとして扱う。状況によっては相互参照も許可、を想定。
(本質的にバリアや耐久力表示と同じ関係なので。)
前提として、管理のことを踏まえスーパークラスで多態性する。
publicにしそうな変数は 位置、速度、耐久力(=生存判定)
publicにしそうな関数は 更新、描画
いまいち不定だけどpublicで必要そうなものは、衝突判定にかかわるもの。
どこまでを1オブジェクトとするか。
・部位破壊が出来るものなど、一方的に依存するオブジェクトは別オブジェクトとして扱う。状況によっては相互参照も許可、を想定。
(本質的にバリアや耐久力表示と同じ関係なので。)
429名前は開発中のものです。
2009/01/22(木) 00:12:28ID:P249I5A7 ステージ情報の管理。
これを管理するクラスを一つ作る。主なデータとしては
敵出現データ情報(背景出現情報)、ランダムシード、ステージ進行速度。ついでに入力情報の蓄積もここがやると見通しがいいかも。
基本的に言語そのままでは出現情報は記述しづらいので適当なスクリプトを自作する。
wait、enemy、background、musicがあれば十分。
ボス戦手前などに掛け合いをはさむなら、event命令もあるといい。
簡単に変更できるようにすることを考えると、命令を分岐、並列に記述できる文法があると便利。
(waitによる相対時間出現なので。現在の出現配置を維持しつつ追加したいときとか。)
この方法は読んだ人は気づいてると思うけど、ある本を参考にしました。
これを管理するクラスを一つ作る。主なデータとしては
敵出現データ情報(背景出現情報)、ランダムシード、ステージ進行速度。ついでに入力情報の蓄積もここがやると見通しがいいかも。
基本的に言語そのままでは出現情報は記述しづらいので適当なスクリプトを自作する。
wait、enemy、background、musicがあれば十分。
ボス戦手前などに掛け合いをはさむなら、event命令もあるといい。
簡単に変更できるようにすることを考えると、命令を分岐、並列に記述できる文法があると便利。
(waitによる相対時間出現なので。現在の出現配置を維持しつつ追加したいときとか。)
この方法は読んだ人は気づいてると思うけど、ある本を参考にしました。
430名前は開発中のものです。
2009/01/22(木) 00:45:44ID:P249I5A7 で、今は
あるオブジェクトの変数に依存するオブジェクトの管理、依存方法。(耐久力表示、バリア、レーザーなど。)
・依存オブジェクトの生成は、被依存が関わってくるのでそれの参照を取得する方法は深く考える必要はない。
・完全な対応関係ならば、依存オブジェクトは被依存オブジェクトをその型で参照を保持する。
(スーパークラスで保持する必要性がない。被依存側の、依存側で必要なメンバはpublicにする。)
・逆に、誘導弾やエフェクトなどは被依存をスーパークラスで参照を保持する。
>>428で生存判定がインタフェースにいるので、ここら辺は融通が利く。
あるオブジェクトの変数に依存するオブジェクトの管理、依存方法。(耐久力表示、バリア、レーザーなど。)
・依存オブジェクトの生成は、被依存が関わってくるのでそれの参照を取得する方法は深く考える必要はない。
・完全な対応関係ならば、依存オブジェクトは被依存オブジェクトをその型で参照を保持する。
(スーパークラスで保持する必要性がない。被依存側の、依存側で必要なメンバはpublicにする。)
・逆に、誘導弾やエフェクトなどは被依存をスーパークラスで参照を保持する。
>>428で生存判定がインタフェースにいるので、ここら辺は融通が利く。
431名前は開発中のものです。
2009/01/22(木) 00:57:55ID:P249I5A7 オブジェクト同士の衝突判定の記述。衝突判定まで。
・複数の矩形で衝突判定を処理するオブジェクトがいることが想定される(ボスなど。)
→バウンディングボックスも実装。
・後々考えると、回転可能な矩形判定が後腐れない。
→バウンディングサークルにしといた方が、記述の割りに回転に対応できる。
衝突判定データを保持するクラスを作って、オブジェクトは衝突判定データのインスタンスをリスト構造(場合によっては木構造)で保持。がいい感じ。
オブジェクトを2つ受け取り、それの衝突判定を走査する、という処理を行う関数をつくればいい。
誘導弾などの実装、は思案中。いい感じが思いつかない。
・複数の矩形で衝突判定を処理するオブジェクトがいることが想定される(ボスなど。)
→バウンディングボックスも実装。
・後々考えると、回転可能な矩形判定が後腐れない。
→バウンディングサークルにしといた方が、記述の割りに回転に対応できる。
衝突判定データを保持するクラスを作って、オブジェクトは衝突判定データのインスタンスをリスト構造(場合によっては木構造)で保持。がいい感じ。
オブジェクトを2つ受け取り、それの衝突判定を走査する、という処理を行う関数をつくればいい。
誘導弾などの実装、は思案中。いい感じが思いつかない。
432名前は開発中のものです。
2009/01/22(木) 04:27:16ID:lwlInfIx433名前は開発中のものです。
2009/01/22(木) 04:40:32ID:P249I5A7 >>432
サンクス。こんな考え方があったのか
言われてみれば、作り始めたての頃は○○Managerや○○Dataはかなりいた気がする。
今は1個だけしかいないところを見ると(UpdateManager)、自然とどうやら身についてはいるっぽい。
サンクス。こんな考え方があったのか
言われてみれば、作り始めたての頃は○○Managerや○○Dataはかなりいた気がする。
今は1個だけしかいないところを見ると(UpdateManager)、自然とどうやら身についてはいるっぽい。
434名前は開発中のものです。
2009/01/22(木) 15:25:00ID:x7I7tNfu 大抵のクラスは、何か管理してるか、何かのデータを持ってる気がする。
435名前は開発中のものです。
2009/01/29(木) 21:46:47ID:dRfTqeNw そうだけど、それとクラスの名前が〜管理、〜データになることはイコールじゃないよねって話でしょ
管理とは何をすることなのか、そのデータは何を表わしているのかが名前で分かった方がいい
管理とは何をすることなのか、そのデータは何を表わしているのかが名前で分かった方がいい
436名前は開発中のものです。
2009/01/30(金) 16:55:21ID:O2nIHOeq >>434は別に口答えしてるわけじゃない気がするw
437名前は開発中のものです。
2009/01/31(土) 08:12:45ID:qu7YpnnP アクションゲームとかでキャラの座標って本当にキャラ自身が持つべきなのかな?
とたまに悩む
とたまに悩む
438名前は開発中のものです。
2009/01/31(土) 12:07:33ID:2t9biDkM Gemsにある『コンポーネントベースのオブジェクト管理』とか見てみるとよい
439名前は開発中のものです。
2009/01/31(土) 19:06:11ID:mhj1e1O5 そのへん追求し始めたらキリ無いよねw
最近はもう深く考えるのはやめた
最近はもう深く考えるのはやめた
440名前は開発中のものです。
2009/01/31(土) 19:11:05ID:L0OEs6zN >>437
悩む悩むw
悩む悩むw
441名前は開発中のものです。
2009/02/01(日) 19:03:38ID:tMKL4U61 >>437
1番近い敵キャラが攻撃してくる
って処理を書いたときに同じ疑問を俺も感じた。
int near = CEnemy::returnNearNum();
enemy[near].attack();
↑こんな感じで静的なメンバ変数を返して貰っていたけど
STGみたいに「自機」対「敵機達」ならこれでもいいんだけど
ボンバーマンみたいなバトルロワイヤルとかサッカーやアメフトみたいなボールゲームとか
お互いの位置関係が重要なゲームになるとステージ側が管理すべきかなと。
1番近い敵キャラが攻撃してくる
って処理を書いたときに同じ疑問を俺も感じた。
int near = CEnemy::returnNearNum();
enemy[near].attack();
↑こんな感じで静的なメンバ変数を返して貰っていたけど
STGみたいに「自機」対「敵機達」ならこれでもいいんだけど
ボンバーマンみたいなバトルロワイヤルとかサッカーやアメフトみたいなボールゲームとか
お互いの位置関係が重要なゲームになるとステージ側が管理すべきかなと。
442名前は開発中のものです。
2009/02/02(月) 20:35:13ID:esDSGZyH ステージ側でやってることが多くなって
どこかに細分化できないかなと悩み出すんですね
わかります
どこかに細分化できないかなと悩み出すんですね
わかります
443名前は開発中のものです。
2009/02/03(火) 03:59:27ID:cOF6NPxT キャラの位置をステージ側で管理する手法も
割と普通だとは思うけど、OOP前提なら避けたいかなあ
近傍キャラの検索スピードを最適化したいということなら
ステージ側に直前のフレームでの位置情報のコピーを作るとか
割と普通だとは思うけど、OOP前提なら避けたいかなあ
近傍キャラの検索スピードを最適化したいということなら
ステージ側に直前のフレームでの位置情報のコピーを作るとか
444名前は開発中のものです。
2009/02/06(金) 21:51:27ID:+KF0MHRv たとえば、石クラスと、マップクラスと、それらを管理するシーンクラスがあったとして、
・石に重力を働かせる処理
・石と石の衝突処理
・石とマップの衝突処理
は、それぞれどのクラスが担当すべきだろうか。
・石に重力を働かせる処理
・石と石の衝突処理
・石とマップの衝突処理
は、それぞれどのクラスが担当すべきだろうか。
445名前は開発中のものです。
2009/02/06(金) 21:56:52ID:jTgjQpbm >>444
物の理を司る GOD class
物の理を司る GOD class
446名前は開発中のものです。
2009/02/06(金) 21:57:18ID:sBGSiXKq 分からないから指向をそのままレスとして出力。
・ゲームは現実を模倣するものじゃないから、重力が全てに等しく働くとは限らない。
・が、固有の係数との積で出せばいいからやはり個々ではない所に基本重力値を。
・衝突判定方法をあらかじめ限定しておけば、二つの物体を引数にとって判定を返す関数を作ることが可能。
・同上により、マップと石との判定をあらかじめ限定化すれば、独立した関数として定義可能。
ごめん、適当に書いただけ。
・ゲームは現実を模倣するものじゃないから、重力が全てに等しく働くとは限らない。
・が、固有の係数との積で出せばいいからやはり個々ではない所に基本重力値を。
・衝突判定方法をあらかじめ限定しておけば、二つの物体を引数にとって判定を返す関数を作ることが可能。
・同上により、マップと石との判定をあらかじめ限定化すれば、独立した関数として定義可能。
ごめん、適当に書いただけ。
447名前は開発中のものです。
2009/02/06(金) 21:58:24ID:y5Y5dk+m 唐突に石とかマップとかいわれても一般性がなさすぎてバックグラウンドがよくわからん
448名前は開発中のものです。
2009/02/07(土) 00:34:27ID://aDzdii > ・石に重力を働かせる処理
石クラス
> ・石と石の衝突処理
マップクラスに位置情報を登録して一括処理
> ・石とマップの衝突処理
石クラス
石クラス
> ・石と石の衝突処理
マップクラスに位置情報を登録して一括処理
> ・石とマップの衝突処理
石クラス
449名前は開発中のものです。
2009/02/07(土) 01:46:53ID:HaVHq232 > ・石に重力を働かせる処理
石クラス
> ・石と石の衝突処理
衝突判定クラス
> ・石とマップの衝突処理
衝突判定クラス
石クラス
> ・石と石の衝突処理
衝突判定クラス
> ・石とマップの衝突処理
衝突判定クラス
450名前は開発中のものです。
2009/02/07(土) 13:25:16ID:bH//onUq > ・石に重力を働かせる処理
ゲーム管理クラス
> ・石と石の衝突処理
ゲーム管理クラス
> ・石とマップの衝突処理
ゲーム管理クラス
ゲーム管理クラス
> ・石と石の衝突処理
ゲーム管理クラス
> ・石とマップの衝突処理
ゲーム管理クラス
451名前は開発中のものです。
2009/02/07(土) 14:22:20ID:VS035g6S > ・石に重力を働かせる処理
石に重力クラス
> ・石と石の衝突処理
石と石の衝突処理クラス
> ・石とマップの衝突処理
右とマップの衝突処理クラス
石に重力クラス
> ・石と石の衝突処理
石と石の衝突処理クラス
> ・石とマップの衝突処理
右とマップの衝突処理クラス
452名前は開発中のものです。
2009/02/07(土) 14:51:09ID:VC/wpjC+453名前は開発中のものです。
2009/02/07(土) 16:19:23ID:Pn1Dl7Zh >>450
CGameManagerですね、わかります
CGameManagerですね、わかります
454447
2009/02/07(土) 16:35:33ID:oHEfOG3S みんな何のことだかわかっていて俺涙目
455名前は開発中のものです。
2009/02/13(金) 17:17:04ID:gamtZzLZ テーマが石なら、
>・石に重力を働かせる処理
シーン管理クラス
>・石と石の衝突処理
シーン管理クラス
>・石とマップの衝突処理
シーン管理クラス
だな。
石なら質量・形(テクスチャ)・位置・速度・加速度など汎用なメンバ変数だけで事足りる。
シーンに乗る子オブジェクトを継承した石クラスを作っておいておくだけ。
石クラスの中身は空で、後々必要になったら拡張できるぐらいにとどめておく。
だから感覚的にはクラスを用いただけの構造体のような使い方で書くかな。
これがもし石でなく、人のような思考の多様性を持たせるのなら、また話は変わってくるかも。
>・石に重力を働かせる処理
シーン管理クラス
>・石と石の衝突処理
シーン管理クラス
>・石とマップの衝突処理
シーン管理クラス
だな。
石なら質量・形(テクスチャ)・位置・速度・加速度など汎用なメンバ変数だけで事足りる。
シーンに乗る子オブジェクトを継承した石クラスを作っておいておくだけ。
石クラスの中身は空で、後々必要になったら拡張できるぐらいにとどめておく。
だから感覚的にはクラスを用いただけの構造体のような使い方で書くかな。
これがもし石でなく、人のような思考の多様性を持たせるのなら、また話は変わってくるかも。
456名前は開発中のものです。
2009/02/13(金) 17:35:30ID:gamtZzLZ 455だけど、修正
やっぱ衝突判定クラス作るわ。
シーン管理は保持オブジェクトと描画などについて司るだけで、
オブジェクト(石やらマップやら)をそれに入れて判定するだけにとどめておくのがいいと思った。
やっぱ衝突判定クラス作るわ。
シーン管理は保持オブジェクトと描画などについて司るだけで、
オブジェクト(石やらマップやら)をそれに入れて判定するだけにとどめておくのがいいと思った。
457名前は開発中のものです。
2009/02/14(土) 00:06:30ID:wuF2UeZP 沈静化したネタに対するレスより新たなネタの方がスレが進んでうれしいと思うな、思うな
458名前は開発中のものです。
2009/02/14(土) 00:20:27ID:+0ELSliX459名前は開発中のものです。
2009/02/14(土) 01:01:03ID:1cFYmXpg ああ。誘導されて初めて来たんで、日付もろくに見てなかった。悪い。
新しいネタか……。じゃあ、1つだけ。
ゲームって作りながらデバッグや、完成してからももちろんチェックするんだろうけど、
その過程でゲーム特有のデバッグ手法があれば教えてほしい。
リークチェックやAssert使うとかの普遍的な手法の話というよりは、
ゲーム特化で、データ構造・クラス・パターンの観点から、、
いかにしてスクリプト上の変な挙動を見破れる技法だとか、
デバッグメニューとして必要なものは何かだとかそういうのが知りたい。
自分のようなアマチュアではそこまで手が回らないんで、
いつも自分で修正・テストを繰り返して大体動くなと思ったらテストプレイをお願いしている。
そんな中、どのように効率よく(少ないコード&短かい時間で)デバッグできるか教えてほしい。
そもそもデータ構造やクラスを気をつけていればバグは出ないとかいうのは無しで。
新しいネタか……。じゃあ、1つだけ。
ゲームって作りながらデバッグや、完成してからももちろんチェックするんだろうけど、
その過程でゲーム特有のデバッグ手法があれば教えてほしい。
リークチェックやAssert使うとかの普遍的な手法の話というよりは、
ゲーム特化で、データ構造・クラス・パターンの観点から、、
いかにしてスクリプト上の変な挙動を見破れる技法だとか、
デバッグメニューとして必要なものは何かだとかそういうのが知りたい。
自分のようなアマチュアではそこまで手が回らないんで、
いつも自分で修正・テストを繰り返して大体動くなと思ったらテストプレイをお願いしている。
そんな中、どのように効率よく(少ないコード&短かい時間で)デバッグできるか教えてほしい。
そもそもデータ構造やクラスを気をつけていればバグは出ないとかいうのは無しで。
460名前は開発中のものです。
2009/02/14(土) 03:08:07ID:qKH3GStO 人にデバッグを頼むのであれば、調べたい場所まですぐにたどり着けるような仕組みを。
無敵モードとかステージセレクトみたいな。
当然ながら、バランスチェックを含めたテストプレイならこれらの機能はOFFで。
コリジョンの可視化。特定のボタンやデバッグ用のフラグでコリジョン無視。
エネミーやアイテムを自由に配置。デバッグメニューからのパラメータ操作。
ボタン一発で勝利/敗北または成功/失敗。必要に応じて、強制クリティカルとか強制回避なども。
アニメーションやオブジェクトの移動の速度コントロール(数十倍〜数十分の一まで)。
特定の状況下のセーブデータ捏造、隠しやおまけの強制解放。
スクリプトはエラーチェックを厳しくするぐらいしか思いつかないな……。
無敵モードとかステージセレクトみたいな。
当然ながら、バランスチェックを含めたテストプレイならこれらの機能はOFFで。
コリジョンの可視化。特定のボタンやデバッグ用のフラグでコリジョン無視。
エネミーやアイテムを自由に配置。デバッグメニューからのパラメータ操作。
ボタン一発で勝利/敗北または成功/失敗。必要に応じて、強制クリティカルとか強制回避なども。
アニメーションやオブジェクトの移動の速度コントロール(数十倍〜数十分の一まで)。
特定の状況下のセーブデータ捏造、隠しやおまけの強制解放。
スクリプトはエラーチェックを厳しくするぐらいしか思いつかないな……。
461名前は開発中のものです。
2009/02/14(土) 10:08:02ID:hPf9zE7f リリース用には付けなくても、デバッグ用にリプレイ機能あるといいよ。
462名前は開発中のものです。
2009/02/15(日) 16:27:42ID:933sIzgh 速度調整機能つけたりログ吐かしたり
そんくらいしかやっていないな。
そんくらいしかやっていないな。
463名前は開発中のものです。
2009/02/18(水) 14:05:52ID:1weRwVko464名前は開発中のものです。
2009/02/18(水) 14:39:48ID:0gTNCSoI 行動力あるね
素晴らしい。見習いたい
素晴らしい。見習いたい
465名前は開発中のものです。
2009/02/19(木) 03:37:37ID:4unT5BXH いやいや。実装したのはこんだけです。
コリジョン可視化:テクスチャ読み込み後に四隅に沿って緑色で四角線を書くだけ
パラメータ操作:テンキーで実装
4と6で対象パラメータを選択 (あらかじめ操作対象を手動でlistしておく)
789でパラメータ上昇(7で+1,8で+10,9で+100)
123でパラメータ下降(1で-1,2で-10,3で+100)
0で強制0(bool値ならfalse)
便利ボタン:戦闘強制勝利機能とエンカウント無効をFXXキーに割り当て
速度コントロール:VSync非同期にして、FPSを上げることで対応
2倍にすると早すぎたので、1.5倍(90fps)をボタンに割り当て
リプレイ機能:フレームごとの入力(キーボード/ジョイパッドを合わせた入力値)をファイルに出力
(一見単純そうだけど、セーブ/ロードの関係でこれには実装に手間取った)
作っているのがRPGなので、便利ボタンとパラメータ操作がとても役に立っています。
ありがとうございました。
コリジョン可視化:テクスチャ読み込み後に四隅に沿って緑色で四角線を書くだけ
パラメータ操作:テンキーで実装
4と6で対象パラメータを選択 (あらかじめ操作対象を手動でlistしておく)
789でパラメータ上昇(7で+1,8で+10,9で+100)
123でパラメータ下降(1で-1,2で-10,3で+100)
0で強制0(bool値ならfalse)
便利ボタン:戦闘強制勝利機能とエンカウント無効をFXXキーに割り当て
速度コントロール:VSync非同期にして、FPSを上げることで対応
2倍にすると早すぎたので、1.5倍(90fps)をボタンに割り当て
リプレイ機能:フレームごとの入力(キーボード/ジョイパッドを合わせた入力値)をファイルに出力
(一見単純そうだけど、セーブ/ロードの関係でこれには実装に手間取った)
作っているのがRPGなので、便利ボタンとパラメータ操作がとても役に立っています。
ありがとうございました。
466名前は開発中のものです。
2009/02/21(土) 07:24:48ID:3Qcrn5pr 洋ゲーだと、LuaみたいなDSLをスクリプトとして組み込んでるせいか、
ゲーム中でもコンソール出して直接変数いじったりできるのがあるよな。
ゲーム中でもコンソール出して直接変数いじったりできるのがあるよな。
467名前は開発中のものです。
2009/02/21(土) 12:50:08ID:YLpnm94h468名前は開発中のものです。
2009/02/24(火) 16:03:05ID:xS4ZudQO スマートポインタの使いどころ教えて
469名前は開発中のものです。
2009/02/25(水) 02:46:38ID:1o4GjPkR 使いどころっつーわけじゃないけど
次のC++規格が決まれば、早ければ今年中にも
std::shared_ptr
として使えるようになる予定
今でも既に std::tr1::shared_ptr になってるけど
次のC++規格が決まれば、早ければ今年中にも
std::shared_ptr
として使えるようになる予定
今でも既に std::tr1::shared_ptr になってるけど
470名前は開発中のものです。
2009/02/25(水) 05:08:14ID:M8Pe/6zZ >>468
まず一般的に、スマートポインタは動的確保されたヒープに用いるとして。
使いどころは、
・ヒープの解放処理を書くのが面倒であったり忘れてしまいたいとき
・ヒープの被参照期間を別のオブジェクトらの生存期間と一致させたいとき
・ヒープの参照状態を把握したいとき
・これまでのソースが生ポインタで参照しまくり不正参照でメモリ破壊しまくりで発狂しそうなとき
だと思う。
まず一般的に、スマートポインタは動的確保されたヒープに用いるとして。
使いどころは、
・ヒープの解放処理を書くのが面倒であったり忘れてしまいたいとき
・ヒープの被参照期間を別のオブジェクトらの生存期間と一致させたいとき
・ヒープの参照状態を把握したいとき
・これまでのソースが生ポインタで参照しまくり不正参照でメモリ破壊しまくりで発狂しそうなとき
だと思う。
471名前は開発中のものです。
2009/02/25(水) 11:43:26ID:woJXacCs 要約すると、いろんな人・場所で使われるポインタだったら使いどきってことですか
472名前は開発中のものです。
2009/02/25(水) 18:18:12ID:QjeqtKpK Yes
いろんなとこから参照されていて、開放時期が掴めないときは最高に便利
理論的には、参照カウンタが0になったら自動的に消えていってくれるよ
いろんなとこから参照されていて、開放時期が掴めないときは最高に便利
理論的には、参照カウンタが0になったら自動的に消えていってくれるよ
473名前は開発中のものです。
2009/02/25(水) 18:28:42ID:nKINhS/o つまり、いらなくなったらすぐに消されるってことですね
私のように
私のように
474名前は開発中のものです。
2009/02/25(水) 18:31:43ID:Z+e+XbPJ 不況だもんな・・・
475名前は開発中のものです。
2009/02/25(水) 18:55:09ID:1o4GjPkR いや、それは地球の資源不足で君の給料が確保できないだけだ
スマートポインタがあれば使われなくなった人材をどんどん自動破棄して・・・
スマートポインタがあれば使われなくなった人材をどんどん自動破棄して・・・
476名前は開発中のものです。
2009/02/27(金) 15:15:39ID:MDeQuwXl 例えばDirectxのDeviceインスタンスなど、あらゆる所で使われそうなインスタンスは、どう使ってますでしょうか?
Draw、Moveを持つオブジェクトと画面の表示物が1対1で対応してる設計で、
リソース(画像や効果音)などの情報も全てオブジェクトがコンストラクタで受け取り内部で保持してるいかにもoopな設計なのですが、
Deviceインスタンスは
1、Drawの引数に渡す
2、コンストラクタで引数にとり、各オブジェクトがあらかじめ参照を保持。
3、グローバル変数
4、そもそもその設計はまずい
5、その他
現在2です。
1から3に共通する問題としては、Deviceインスタンスをオブジェクト内で操作した内容が間違ってた場合、
発見がかなりめんどくさそうな所でしょうか?
Draw、Moveを持つオブジェクトと画面の表示物が1対1で対応してる設計で、
リソース(画像や効果音)などの情報も全てオブジェクトがコンストラクタで受け取り内部で保持してるいかにもoopな設計なのですが、
Deviceインスタンスは
1、Drawの引数に渡す
2、コンストラクタで引数にとり、各オブジェクトがあらかじめ参照を保持。
3、グローバル変数
4、そもそもその設計はまずい
5、その他
現在2です。
1から3に共通する問題としては、Deviceインスタンスをオブジェクト内で操作した内容が間違ってた場合、
発見がかなりめんどくさそうな所でしょうか?
477名前は開発中のものです。
2009/02/27(金) 15:58:46ID:XnWaU4Ou デバイスホルダー的なシングルトン作るとか
478名前は開発中のものです。
2009/02/27(金) 17:33:53ID:lChaxYTz 俺もシングルトンかな。参照回数が0になったらreleaseで。
479名前は開発中のものです。
2009/02/28(土) 00:40:47ID:OR4wkfx2 ハッシュテーブルのキーって文字列じゃなくてもいいのかな?
符号なし整数とか。
どっかにそういう例ないです?
符号なし整数とか。
どっかにそういう例ないです?
480名前は開発中のものです。
2009/02/28(土) 08:42:03ID:Cadu6Xk7 ハッシュが計算できるなら、キーはなんでもいいよ
481名前は開発中のものです。
2009/03/04(水) 04:45:32ID:y6+tTW6F482名前は開発中のものです。
2009/03/06(金) 11:34:39ID:7UNSgj8M C++でシングルトンするのってなんか滑稽じゃね?
Javaじゃないんだし
そこまでクラス原理主義にならんでもいいのにと思う
Javaじゃないんだし
そこまでクラス原理主義にならんでもいいのにと思う
483名前は開発中のものです。
2009/03/06(金) 13:08:45ID:A313Daxt484名前は開発中のものです。
2009/03/06(金) 14:26:30ID:7UNSgj8M グローバル変数関係ないやろ
普通にstaticで隠してヘッダで関数だけ提供すればいいやんけ
インスタンシエーション必須の言語が苦肉の策でひねり出したのがシングルトン
よーく考えよう
普通にstaticで隠してヘッダで関数だけ提供すればいいやんけ
インスタンシエーション必須の言語が苦肉の策でひねり出したのがシングルトン
よーく考えよう
485名前は開発中のものです。
2009/03/06(金) 14:28:31ID:7UNSgj8M あ、ちょっとちがうな。
「クラス定義必須、インスタンシエーション普通」の言語だな。
「クラス定義必須、インスタンシエーション普通」の言語だな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本と中国を結ぶ12航空路線で全便欠航 中国人に最も人気の海外旅行先は日本から韓国に [ぐれ★]
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★2 [ニョキニョキ★]
- 米中電話会談、トランプ氏は「米国側は中国にとっての台湾問題の重要性を理解する」 [1ゲットロボ★]
- 【国際】トランプ氏、来年4月に中国を訪問する招待を受け入れる 習氏も国賓で訪米へ 電話会談 [ぐれ★]
- 【音楽】「なんでこんなバカが国のトップなの?」 若者に人気のバンド「GEZAN」のマヒトゥ・ザ・ピーポーが高市総理に苦言 [シャチ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★3 [ぐれ★]
- スマホのやつこの動画見てくれ [577451214]
- 【高市悲報】来年、習近平主席がアメリカに「国賓」として訪米。どうするんだよ高市・・・アメリカも敵に回すのか? [483862913]
- フィフィ「外国人だろうが日本人だろうが反日は要らんのよ、この国に…自分にとって住みやすい国に行け。」 [856698234]
- うええええええん仕事いぎだくないよぉ
- 【高市悲報】トランプおやびん「偉大な指導者である習近平首席、米国は中国にとっての台湾問題の重要性を理解しています」 [115996789]
- 【速報】足立ひき逃げ犯、精神病持ちだった [329271814]
