- 1 名前:名前は開発中のものです。 mailto:sage [2014/01/16(木) 00:00:31.27 ID:w6WW3hAo.net]
- ゲーム製作におけるC/C++全般に関するスレです。
元スレ DXライブラリ 総合スレッド その17 toro.2ch.net/test/read.cgi/gamedev/1383795645/ 前スレ C/C++ゲーム製作総合スレッド Part1 toro.2ch.net/test/read.cgi/gamedev/1337516528/ C/C++ゲーム製作総合スレッド Part2 toro.2ch.net/test/read.cgi/gamedev/1351015269/ C/C++ゲーム製作総合スレッド Part3 toro.2ch.net/test/read.cgi/gamedev/1357899040/ C/C++ゲーム製作総合スレッド Part4 toro.2ch.net/test/read.cgi/gamedev/1376262450/
- 627 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 02:13:49.38 ID:EMV53Qmd.net]
- どうか心安らかな日々を
- 628 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 02:16:22.74 ID:ZoGLF8y+.net]
- んー別にいいんじゃね?
大してシーンも多くないゲームなら充分充分 パターンとかはもっと規模が大きくなって 制御構文使ってたら死ぬ時に使う物だと思うのだが ということで誰かstateとstrategyの違いを教えてくださいな ググってもイマイチ腹に落ちなくてなあ…
- 629 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 03:18:14.89 ID:51TE7qv/.net]
- 高専生感というとても具体的な指標
これが偏差値70以上の力だと言うのか・・・
- 630 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 08:43:51.10 ID:7WDDZUtT.net]
- これdemo->Run()の中に別のゲームループがあるって事になるんだろ。
つまり>>528って事だろ。 ところでupdate()とdraw()に分けないのかな。 コンテンツロスト時の再描画とか、各シーンで個別に実装とかだるいっしょ。
- 631 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 10:25:45.81 ID:EMV53Qmd.net]
- >>611
当時のソースは実家のPCに眠ってるのでうろ覚えなんですが、D3D9などの デバイスロスト時の対応などはGAMEENVクラスに押し付けてました 描画と、ゲーム内時間発展のサイクルは独立。フレームスキップしてました。 描画は60⇔30⇔15[fps]の半固定。 時間発展の刻み幅は1/60[sec]固定。シミュレーション部分の計算自体は とても軽かったので。あとはリプレイデータの都合。デバッグ時の巻き戻し や早送り(任意時点へ移動)してたので
- 632 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 10:41:35.55 ID:EMV53Qmd.net]
- >>611
>これdemo->Run()の中に別のゲームループがあるって事になるんだろ。 >つまり>>528って事だろ。 それぞれにゲーム内の時間発展を計算するサイクルがありましたね。 そういう意味ならそうなんだと思います。ゲーム固有の定石とやらは よく知りません
- 633 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 11:00:02.81 ID:R32lOXpJ.net]
- 配信でコーディングしてる現役ゲームプログラマさんの仰っていた序列表貼っておきますね
神様 綺麗なコードで完成させられる人 人間 汚いコードで完成させられる人 =================( 越えられない壁 )==================== 家畜 汚いコードで完成させられない人 ハエ 綺麗なコードで完成させられない人 ハエに出来るのは人間の邪魔だけと言っていて、なるほどなとリスナー達感心しきりでした。 ID:T7NavjR1見ててこの事思い出しましたね
- 634 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 11:23:57.20 ID:k/FZV1V1.net]
- 自分は
std::unique_ptr<Scene> scene = new なんかのシーン(); while(1){ scene->update(); scene->draw(); if( scene->isEnd() ) { scene = std::move(scene->getNext()); } } ってやってそれぞれのシーンが次の遷移先返すようにしました switchを意地でも使いたくてこんな形になった 実際switchの方がよく使われるものなの?サンプル探してもswitch使っているのしか見当たらないから困ってる
- 635 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 11:24:47.17 ID:t5QADVCc.net]
- >>614
やるじゃんw
- 636 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 12:27:00.81 ID:CXcBKCf+.net]
- >>615
多分だけど、 if(関数に分けずそのまま羅列) → if(関数分け) → switch → stateパターン ……みたいに進化していくんだと思う。 単に自分がそういう順番でステップアップしたってだけなんだけどさ。 仮に自分が教えるなら、stateパターンによるシーン遷移は後回しにするかな
- 637 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 12:35:06.95 ID:CXcBKCf+.net]
- ああそうだ思い出した。
シーン遷移をStateパターンで行う方法についてなんだけど、「シーン遷移しないとき」って、どうしてる? (1) nullを返す (2) thisを返す (3) シーン遷移関数を用意しておき、それが呼ばれなかったとき (4) その他 自分は(2)で、nullを返すときはゲーム終了ってことにしてる。 一般的なStateパターンなら(1)かなあ。
- 638 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 12:40:34.16 ID:5MYZPLM5.net]
- >>612-613
なるほどthx. sceneの引数でgameenv貰ってるね。 シーン遷移の実装はシーン側は知る必要ないから、 その時の気分とかシーンの数とかで好きにやりゃいいと思うけどね。 Task的に入り組んだ作りしてないのなら、どれでもすぐ遷移図を思い描けるっしょ。
- 639 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:14:29.11 ID:R32lOXpJ.net]
- >>616
曰く、 「クラス設計書貰うけど見ない。クラス流用して他のゲーム作ったことがないから意味がない」 「デザインパターン?何それ?」 「参考書は読んだことがないからオススメ本とか分かんない。ネットと、エラーが出たらググレカスで覚えた」 PSでほとんど1人でプログラム任される人の弁です
- 640 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:19:59.07 ID:NQBFYHJc.net]
- >>620
すげぇ 俺そんなこと言ったことないけど、完全に俺だわ ただ、作ってたのはPSじゃねぇけど
- 641 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:20:18.05 ID:KJKa8R89.net]
- >>620
その人、協調性が無いから、単独でしか使い道が無い。
- 642 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:27:51.48 ID:NQBFYHJc.net]
- 人事を何とかしないとうちの会社はやばい
ゲー専卒で多少のコミュニケーションはできれば入れてる感じがする 8人中2人もう辞めてるし、てかそれ以前にDXライブラリをインクルードディレクトリへの追加方法わからねぇわ、プログラムが組めねぇわで最悪だわ 1人だけまともというかたぶん俺より組める奴居るけど うちは研修する余裕なんてねぇってわかってんだろうが、去年入ったやつなんてもう最後の1人を何とか留まらせてるんだから、俺らに人事噛ませろよ
- 643 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:27:58.51 ID:lMFqMvqX.net]
- PSでググレカスてどんな時代?
一昔前の1500円のミニゲーム移植とかの人てことなんだろうか
- 644 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:31:27.80 ID:GSilIO8H.net]
- >>622
ちょっとワラタ
- 645 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:31:55.46 ID:CPnqQaxX.net]
- 従来の手続き型で何本もゲーム作ってきた俺だが
いっちょオブジェクト指向でも勉強するか、とやり始めた結果 もうずっと制作が滞ったままになっている。 なんでこんなにめんどくさいんだ……。
- 646 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:33:29.90 ID:t5QADVCc.net]
- サッカー上手い人がサッカーの技術書読んでうまくなるわけもないし、そういう感覚なんかな。
本読まずにPG覚えるとか想像もつかねえw
- 647 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 16:59:24.66 ID:CPnqQaxX.net]
- 本は解るようになってから読むと解るけど、解らないうちに読んでも解らないからなw
そもそも本を書くような人は「本を読んだら解る人」だろうから、 本を読んでも解らない人でも解るような本を書けないだろうな。
- 648 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 17:12:12.68 ID:dd41HZLf.net]
- ビギナーコラムでオブジェクト指向の哲学とか語られてもな
とりあえず作ってみよう系のほうが理解しやすい ここを弄ったらこう変わるみたいな
- 649 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 17:21:14.92 ID:5MYZPLM5.net]
- c++だけがoopじゃないっすから…
- 650 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 17:40:38.04 ID:lMFqMvqX.net]
- >>628
だいぶ使いこなせるようになっても読めない初心者向けの本とかあるから性質が悪い ゲーム用だけじゃないが初心者の頃はコードがのっててサンプルが作りたい物に近いから買ってみるけど… Cマガも半分ぐらいしか理解できなかったがいま読み返すと消えてる技術も多くて笑える []- [ここ壊れてます]
- 652 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 17:48:57.10 ID:bM1HEdOI.net]
- ゲーム系の学生なんだけど、ゲーム会社ってどのくらいのレベルのオブジェクト指向まで要求されるの?
あと、AIとかそういうアルゴリズムも重視される?
- 653 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 18:14:47.39 ID:NQBFYHJc.net]
- >>632
ぶっちゃけ会社によって様々だからうちの会社で書くけど 新卒には特別な期待はしない とりあえず、プログラムを作れれば良いや、ゲームまで作れたら儲け物って感じだな 後はただ、人間として基本的なことはできてればそれだけで良い 俺は現場だからこういうのを求めてるけど、人事は即戦力のゲームプログラマーとしてプログラムを作れないやつを入れてくるから何を見てるか同じ会社なのにわからん とりあえず残業させてないのに毎年1ヶ月以内に1人、3ヶ月以内に半分になる新卒はゲーム作る気がないよね
- 654 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 18:23:27.78 ID:EMV53Qmd.net]
- マ板でやれ。な
- 655 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 18:25:53.36 ID:R32lOXpJ.net]
- >>621
スーパープログラマさんかな?w 他の配信者も有名な人だよって言ってたし、多分在京で働いてる業界人なら知ってる人ですよ。 ちなみに、よくプログラマになるにはどうしたらいい?という初見リスナーのレスあるけど 「C++とDirectX(ライブラリ自作)で『完成した』作品を持ってこい」と言ってますね。 本人もデザインパターンを配信中にググって知ったみたいだし オブジェクト指向とか関係ないんじゃないかと。とにかく完成品をよこせと。
- 656 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 18:34:29.77 ID:lKQHJo0L.net]
- Q 漫画家になるにはどうしたらいいですが?
A 漫画を描けば漫画家です プロになりたければ作った作品を持ち込んでください Q ゲームプログラマになるにはどうしたらいいですか? A ゲームを作ればゲームプログラマです プロになりたければ作品を持ち込んでください
- 657 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 18:38:17.18 ID:NQBFYHJc.net]
- >>636
これ でも、自分じゃなくて友人が作ったやつを持ち込むクソも居る
- 658 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 19:08:58.63 ID:WRxgjGJf.net]
- スレ違いの話題振る質問者は不採用です
- 659 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 19:14:20.55 ID:t5QADVCc.net]
- くだらないループ話を延々続けてる馬鹿に飽きていたからいい暇つぶしになったw
- 660 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 20:34:32.58 ID:EMV53Qmd.net]
- >>609
>制御構文使ってたら死ぬ時に使う物 >>615 >実際switchの方がよく使われるものなの? >>619 >シーン遷移の実装はシーン側は知る必要ないから、 >その時の気分とかシーンの数とかで好きにやりゃいいと思うけどね。 > >Task的に入り組んだ作りしてないのなら、どれでもすぐ遷移図を思い描けるっしょ。 同意です。実装の選択肢は色々あり、個々の状況に応じて選べば良い事かと。 >>602-603の例で言えば、振る舞い的に拡張する予定がなく、実際しなかった 部分なので別に問題なかったですね 元々HSP上がりの人間(周りも同様)だったので手続き型の記述のほうが平易 というのもありました >>617 State Pattern switch-case構文
- 661 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 20:35:52.86 ID:EMV53Qmd.net]
- >>640訂正
末尾の三行は消し忘れです。>>617さんごめんなさい
- 662 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 20:52:06.90 ID:CXcBKCf+.net]
- >>635
何年か前に、画像表示、パッド入力、音声出力くらいまでは何とか作ったけど 途中で面倒くさくなって、結局DXライブラリに戻ってしまったという残念な経験しかないやw
- 663 名前:名前は開発中のものです。 mailto:sage [2014/04/29(火) 20:55:41.83 ID:EMV53Qmd.net]
- >>619
会社帰りにたまにボー●ーブ●イクでチャリンチャリンしてたんですが 転勤先にそれ置いてるゲーセンが
- 664 名前:なくて悲しみのあまり余暇にパチモン
作りで自分を慰めてるんですが、火器とかAIの部分はStateというかStrategy というかそんな感じのコードはありますね。条件分岐でダラダラ書いてたら 流石に眩暈がしてきたので [] - [ここ壊れてます]
- 665 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 00:47:22.57 ID:bEifU6C0.net]
- 何を言いたいのかサッパリ分からん
- 666 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 01:21:27.75 ID:3yGpFv6B.net]
- >>643
パーツとか持ち替えの武器とか大量にあると面倒くさいことになるよね あの手のアセンゲーっぽいのは俺も好きだが作りたいとは思わないな
- 667 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 09:11:19.42 ID:JP5IUHRh.net]
- つまらない流れなので誰かネタ振りお願いします><
- 668 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 10:28:13.43 ID:vrCaDxEc.net]
- 初心者な質問ですみません。
クラスからクラスを呼ぶときってどういう書き方が普通なんですかね? class A { public : static A* me ; int a ; A() ; } A* A::me ; A::A() { me = this ; } ってやって A::me->a とかやってるけど、なんかスマートじゃなくて……。
- 669 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 11:46:43.01 ID:eqz1Of7R.net]
- なにがしたいのかさっぱりわからんけど、それmeにインスタンス入れてるだけであんまり意味なくない?
クラスからメソッド直接使いたいとかなら、メソッドをstaticで定義してクラス名::メソッド名()だけど
- 670 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 12:04:25.51 ID:gNDB74Yv.net]
- グローバル変数みたいなことがしたいのかな
アクセス可能なオブジェクトを限定するのがオブジェクト指向の組み方だから アクセスする必要があるクラスにポインタなり参照なり持たせたほうが良いんじゃない
- 671 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 12:58:15.72 ID:2hopiA0K.net]
- 日本語不自由で変な質問するやつはほっといたほうがいいよ
- 672 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 13:13:03.63 ID:8+rqYap5.net]
- staticメンバの初期化の仕方の話でねーのん。
最近c++触ってないから間違ってたらすまんけど。 // A.h class A { public: static int a; } // A.cpp int A::a = 10; // 初期化 // main.cpp void main() { A::a; // 利用 }
- 673 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 13:38:55.27 ID:MPxnDurN.net]
- 3Dゲームで経路探索をやってみようと思うんだけど、3Dの位置情報ってどうやって調べればいいの?
- 674 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 14:23:59.95 ID:bEifU6C0.net]
- 具体的には?
基本的に平面で移動するゲームなら2Dと大して変わらんしだろうし キューブ状の座標(2Dで言うところのマス目)を移動するだけなら、移動方向に上下という選択肢が増えただけと考えられるし ビルの中を探索するようなゲームなら、階段やエレベータでエリアを区切ればいい気がする。
- 675 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 14:32:28.53 ID:Uak2ZaC3.net]
- 何が聞きたいのかさっぱりわからんけど、普通に変数参照すればいいんじゃない?
複雑な地形での経路探索がわからんって話なら、地形の要点にポイント作ってダイクストラ法でいいんじゃないの
- 676 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 14:35:02.75 ID:Uak2ZaC3.net]
- ごめんダイクストラ法じゃなくてA*か
- 677 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 14:50:11.17 ID:49atqyLw.net]
- 経路探索
samples.jbpub.com/9781556220784/Buckland_AIExecutables.zip Chapter 5 にあるように 経路探索する。 Chapter 8\Raven_CoarseGraph のようにグラフとして探索する。
- 678 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 16:08:24.08 ID:L0vWdcDz.net]
- >>655
A*はダイクストラの拡張版で、基本アルゴリズムは重複する部分が大きいから、 大筋外してはいないよ ゲーム用途の経路探索性能は、A*の方がより最適化されるみたいだけど
- 679 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 16:47:29.58 ID:IG+u4GlD.net]
- >>647
ideone.com/gt21RS そのコードが何か不明だがこういう振る舞いをするという事がわかってれば好きにしろ
- 680 名前:名前は開発中のものです。 mailto:sage [2014/04/30(水) 22:30:05.62 ID:vrCaDxEc.net]
- 647です。皆さん色々すみません。
やりたかったのは、例えばコンフィグデータを一括管理するクラスを作って 他のクラスでそれを使う、ような事です。 例として挙げたソースは簡単に書いただけで直接書き換えたいというわけではありませんでした。 関係ない愚痴ですが、こうやれば動くからこれでいいのかな、と作り進めてても やっぱりおかしいよな、とまた一から作り直す、を繰り返してて制作が全く進みません……。
- 681 名前:名前は開発中のものです。 [2014/05/01(木) 03:51:25.76 ID:jedbV3SH.net]
- anago.2ch.net/test/read.cgi/ghard/1387003319/235
↑ ↑ ↑ ↑ ↑ ↑
- 682 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 05:10:34.61 ID:z13QLsnT.net]
- 唯一のインスタンスを保証するシングルトンではなく、
インスタンスは複数作れるけど、実体は同じものを作っている……っていうアルゴリズムあったよね。 >659の場合だと、その方法使えそうな気がするものの……名前が分からんので教えられん
- 683 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 08:21:56.84 ID:3d6d8Z4v.net]
- >>659
そんなのグローバル変数でいいだろ つまんないとこで止まってないで先進めよ
- 684 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 09:19:18.98 ID:OWwKad9r.net]
- インクルードガードとexternでおk
- 685 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 11:26:20.56 ID:HOcvGku/.net]
- ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%82%AF%E3%82%B9%E3%83%88%E3%83%A9%E6%B3%95
これをプログラムに直すとどうなるの? 大学数学はさっぱり分からないから誰か教えて
- 686 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 12:30:19.75 ID:Fm1fH+z1.net]
- >>664
ダイクストラ法は大学数学関係ないぞ Game Coding Gemsの1か2に解説とソースコードがある
- 687 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 12:35:48.55 ID:d2ShpQiQ.net]
- >>664
図のアニメーションと解説を読めば分かると思うが… 難解な数学計算無し。少なくとも高校数学の域は逸脱してない。 記号の意味分からない子向けに手続きを文章で丁寧に解説してる。 下手すりゃ厨房でも「コンピュータってバカ正直な事なんだね…」 と感想を述べながら呆れ顔をしてくるレベル
- 688 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 12:37:56.10 ID:d2ShpQiQ.net]
- ×「コンピュータってバカ正直な事なんだね…」
○「コンピュータってバカ正直な事をやるんだね…」
- 689 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 13:21:29.38 ID:d2ShpQiQ.net]
- >>662-663
同意
- 690 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 13:56:28.60 ID:z13QLsnT.net]
- 「馬鹿正直」って感想はさ、たぶんコンピュータへの理解の第一歩だよね?
- 691 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 14:18:18.47 ID:d2ShpQiQ.net]
- そうなんじゃない?学園祭でマイクロマウスの実演と解説をしてた時の消防や
厨房の反応は楽しかったよ。「かあいい」「頭悪過ぎうー」「きゃはは」 「がんばれー」とかが大半だったけど、眼鏡っ子の厨房が模造紙の解説を 一所懸命に読んでて、繰り出す質問がなかなか賢すぎてこっちが呆れた
- 692 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 14:26:30.17 ID:0k+QrX5J.net]
- メンバ変数が全部staticのパターンの名前が思い出せない
モノトーンだかそんなような名前だった覚えがあるけど
- 693 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 14:27:47.22 ID:d2ShpQiQ.net]
- monostateじゃね
使ったことないが
- 694 名前:名前は開発中のものです。 mailto:sage [2014/05/01(木) 16:56:40.77 ID:ZxuEhXPJ.net]
- シングルトン モノステート
- 695 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 00:13:50.98 ID:5CvmG/6A.net]
- 皆さんは描画リストに登録して、Zソートやらしてからとめて描画などしてますか?
2Dで同じようなことを考えてるのですが、描画管理クラスにリストを持たせ、 その管理クラスのメソッドを通してリストへ登録しようとしてます XNAのSpriteBatchの形が近いです しかしこの方法だと管理クラスを引数でどんどん渡していかなければいけなく、良い方法がないか探してます 2Dオブジェクトにstaticで管理クラス、または描画リストを持たせた方がいいのでしょうか 設計の話なので明確な答えがないのはわかってます 皆さんの考えを参考程度に聞きたいです
- 696 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 00:48:59.22 ID:DPIL44M1.net]
- スプライト的な「2Dオブジェクト」を作って、
そこにパラメータ与えて、あとは自動的に描画されるような組み方してるん?
- 697 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 01:19:41.25 ID:ZlBT84m3.net]
- >>674
>しかしこの方法だと管理クラスを引数でどんどん渡していかなければいけなく、良い方法がないか探してます 依存性があるなら明示する(例えばSetterやコンストラクタで注入するだとか) というのはOO的には無難なお作法だと思うけど。なんか不都合あるの? (いちいち記述するのがかったるい、だとか) まぁ、あまりに広範に渡ってその依存性が確認されるなら、グローバルな 存在、グローバルなサービス、として提供してもいいのでは。尤も、描画 モジュールに依存するモジュールってゲームの中では限定的だと思うけどね
- 698 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 01:31:13.85 ID:Ru1dUuzy.net]
- 表示するもの {
private IDrawable model; private Vector2 pos; private 表示するもの[] children; public void Draw(描画管理クラス){ 描画管理クラス.add(model,pos); for child in child { child.draw(管理クラス); } } }
- 699 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 06:36:13.80 ID:Bq1H46te.net]
- ダイクストラ法ってゴールをコロコロ変える(プレイヤーを追いかける)ことって出来る?
- 700 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 07:18:20.71 ID:DPIL44M1.net]
- たとえば屋内を探索するゲームの場合、
ある部屋から別のある部屋へ行く方法ってのは基本的に固定なので、最初に各パターンを計算しておけばいい。 上手く追いかけるように動かしたいってことなら、 有名なところで、パックマンの敵アルゴリズムの話がシンプルでわかりやすいと思う。
- 701 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 07:57:10.51 ID:gb8xd1Dr.net]
- 自キャラの範囲と、敵の範囲と、とりあえず目指すポイント
みたいな表を作っておけば良いのか
- 702 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 09:29:13.26 ID:dzhB41LP.net]
- >>675
2Dオブジェクトは座標、テクスチャを持ち、描画関数内で管理クラスのリストへ登録 という流れを考えてますので、自動的な描画はしません >>676 やはりプログラムの最初にsetterで登録が一番無難ですよね 不都合はないのですが、2Dオブジェクト全てが 管理クラスのsetterを持つのが気持ち悪く思えてしまい・・・ 描画モジュールに依存するものが限定的とは...ゲーム内では殆どのものが 描画されるものだと思ってましたが違うのでしょうか オブジェクトを管理したりするものは別だと思いますが・・・ >>677 これは結局引数でどんどん渡していくのでは・・・?
- 703 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 09:52:01.66 ID:Ru1dUuzy.net]
- >>681
引数で渡していっていいと思う 常に同じ描画管理クラス使うとは限らないし
- 704 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 13:12:16.23 ID:6RPuKXq0.net]
- >>681
何故「気持ち悪い」のか言葉で説明できるようにしてみれば どうすればいいのかわかるんじゃない?
- 705 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 13:23:32.11 ID:taHVwRQz.net]
- リストへの登録を描画関数と分ければ?
登録するデータを戻り値にして呼び出し側で登録するとか
- 706 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 19:21:58.74 ID:dzhB41LP.net]
- >>682
レンダーターゲットを変えた時などでしょうか >>683 2Dオブジェクトは例えばスコアや、メニューなどに使用するのに 管理クラスのsetterを常に持ち続けてるから・・・? >>684 list.add(pObj->draw()); という感じですか? この場合複数のオブジェクトを描画する時はどうなるんでしょう スコアクラスは1桁描画を複数回呼ぶと思います そういう時は戻り値でデータを返せないのでは 結局引数で渡してリストへ登録 または2DObject自身がリストを保持し、そこへ各派生クラスが登録する という形になってしまうのでしょうか
- 707 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:24:35.53 ID:tEs8rCVt.net]
- ゲームで2つのプレイヤーの画面を並べる時ってどうしてる?
プレイヤーの状態とかエフェクトとかシングルトンで管理していて今まではどこかのクラスから Game::instance()->registerEffect(new Effect()) みたいにできたんだけどプレイヤーごとにGameを作るようにしたらこれができなくなって ゲームのインスタンスをあちこちに渡さなきゃならなくなったんだけどこんなことしないでもできる方法ない?
- 708 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:30:31.53 ID:DPIL44M1.net]
- 話の流れがよくわからないんだけど、
renderer.add(PlayerObject); //プレイヤーキャラクターのオブジェクトを登録 renderer.add(EnemyObject); //敵キャラクターのオブジェクトを登録 …みたいなのとは全く別の話?
- 709 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:32:36.22 ID:DPIL44M1.net]
- >>686
Gameクラスってなんじゃらほい? いわゆるシーンとかシーケンスってやつ?
- 710 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:37:30.44 ID:Yjnja2zX.net]
- >686
シングルトンが用を足さない状態だからやめるのが手っ取り早いけど とりあえずシングルトンインスタンスの取得にID等の引数もたせれば? 引数違いなら違うオブジェクトを返すてのは実装は容易でしょ こういうどこでも使えるグローバル変数的な状況で使うシングルトンは嫌いだけどな
- 711 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:42:33.50 ID:Ru1dUuzy.net]
- >>685
レンダリングターゲットを変えたときもあるかもしれないけど、 マルチスレッドで分割してトラバースするこもとあるし。 Direct3D11でコンテキストを複数作れるようになったしね
- 712 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:45:40.07 ID:Gu2dz6L1.net]
- >>685
戻り値をVectorかなんかにしたら >>686 instance()に引数渡して特定のインスタンス取得出来るようにする これまでシングルトンだったのが複数必要になった時点で設計見直した方がいいような気もするけど
- 713 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 20:54:53.01 ID:tEs8rCVt.net]
- 情報不足すぎたうえに色々酷いごめんよ
Effectは別で管理している シングルトンをやめるからどうするのが良いのかと思って聞いたんだ ダブルディスパッチで敵の当たった処理とかしているんだけど class Game { Enemy enemy[]; } class Enemy { void hit() { if( 死んだ ) { Effect::addEffect(new Effect()); } } } みたいにしててどのエフェクトを使うかはEnemy側で決めるようにしたいからこうなったんだけど GameにEffectのインスタンス持たせてEnemyにそのインスタンスの参照なりなんなり渡して if( 死んだ ) { effect->addEffect(new Effect()); } とかしても良いんだけどなんかしっくりこないんで気になったのよ >>688 そうなんだけど実際あんまり関係なかった・・・ >>689 うまい設計思いつかなかったんよね その方法手っ取り早いし良さそうです
- 714 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 21:46:30.08 ID:Yjnja2zX.net]
- >>692
EnemyはどうしたってEffectへのポインタが欲しいわけで描画の関係からか複数存在してるとなると 初期化などでずっと持たせるのが嫌ならhitかそれ以上に位置するGameから呼ぶ関数に引数として渡すか EnemyはGameクラスのポインタ位持ってるならGameのほうにAddEffect関数もたせてEnemyはそれを呼ぶか スレッドセーフでない設計ならEffectポインタのグローバルか静的関数なGetterとSetter用意して GameオブジェクトごとにEnemy更新前にSetterでGetterの戻り値となるポインタを入れ替え…止めた方がいいな
- 715 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 22:17:39.20 ID:DPIL44M1.net]
- 実際のコードでは、Effectクラスから派生した HitEffect とか DeadEffect とかを
Enemy内から呼んでるんだよね?
- 716 名前:名前は開発中のものです。 mailto:sage [2014/05/02(金) 22:41:54.83 ID:gb8xd1Dr.net]
- GameがEnemyを管理するんだったらEnemyに
エフェクト番号とフラグを持たせれば良いんじゃない
- 717 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 02:03:51.33 ID:aTctHTqN.net]
- >>687
そんな感じです ですがそのrendererを渡そうか悩んでます 引数ですとかなり深い(?)ところまで渡す必要があるのではないかという感じです >>690 引数で渡した方が自由が利きますね めんどくささと柔軟性のどっちをとるかみたいな感じでしょうか >>691 座標、テクスチャ、UV、色などのことを考えるとVectorかなんかだときつそうです とりあえず引数で渡す方向で作ってみたいと思います オブジェクト指向難しいです...
- 718 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 06:24:50.92 ID:aTctHTqN.net]
- ああ、文章にミスが
>>696 rendererを渡そうか× rendererをどう渡そうか○ です
- 719 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 14:23:28.87 ID:yzrAO4fX.net]
- ヒープ領域のオブジェクトを参照で引数で渡したい時ってどういう風に書けばいいの?
- 720 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 16:01:04.13 ID:ZggXQf33.net]
- 普通に参照渡しするだけだよ
- 721 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 18:27:55.89 ID:Dtrz+is9.net]
- void f(A &a);
A *a = new A(); f(*a); こんな感じゃない 参照って殆ど使った事ないからあってるかどうかわからんけど
- 722 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 19:07:15.30 ID:hZKN3J0P.net]
- 「ゲームプログラマになる前に覚えておきたい技術」
という本がオススメと言われたんですが、これ持ってる人いませんか? 役に立つ度合いとかアドバイスしてもらえたら嬉しいです
- 723 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 19:31:10.25 ID:R+meoZG6.net]
- ゲームプログラマになる前に覚えておきたい技術
01 この本はどんな本か www.shuwasystem.co.jp/gpro-sp/ これを読みましたか?
- 724 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 20:46:14.95 ID:TVFyIiNS.net]
- >>693
やっぱりそれぞれが持つしかありませんかねえ 呼び出し元をparentとかして持たせておくのって普通にやっていることなんですか? この場合だとEnemy::parentにGameへの参照か何かを持たせるとか >>694 はいそうです
- 725 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 21:38:49.30 ID:XwaCxcGs.net]
- 重いので持ち運びには向かない、かな
- 726 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 21:46:57.91 ID:XwaCxcGs.net]
- >>703
各クラスがどのエフェクトを使うのか?というのをハッキリさせておいて 必要なものだけインクルードするようにすれば、そこまで気持ち悪いことにはならないんじゃないだろうか。 たとえばEnemyクラスは、Effect::GettingItem(アイテム獲得)とかEffect::PlayerDead(プレイヤー死亡)は不要だろう。 それすら気持ち悪いと思うなら(分からんでもない)、 ObserverとかListenerとかCallbackとかその辺に頼るとかでも良いんじゃない?
- 727 名前:名前は開発中のものです。 mailto:sage [2014/05/03(土) 22:35:18.25 ID:Kqu7ExT3.net]
- >>700
参照引数は「読むだけ」を意図してる場合が多いからconst付きが多いかな >>703 >呼び出し元をparentとかして持たせておくのって普通にやっていることなんですか? >この場合だとEnemy::parentにGameへの参照か何かを持たせるとか その疑問は>>674-696のやり取りと同じ話っぽいね、俺も>>704-705に同意かな。 依存関係を明示すると違和感を覚えたり気持ち悪くなるのは、大抵の場合 依存関係の認識(or分析)が大雑把。依存関係を明示するとそれが露見しちゃう。 機能分割が大雑把。依存関係を詳細に分析すると広範に絡み合ってて一体でした。 とか。Gameへの参照は、恐らく要らん情報にアクセスする権利も与えてるから 依存関係の明示というより、広範に渡る権力へのアクセス権の譲渡なのかな? 君はこの世界に神になる。俺はいいと思うけどね。というか、はなっから グローバルなサービスとして提供してしてもいいかもね。完成させてから リファクタリングしたほうがいい 個人的な短期小規模開発(作り捨て)なら別に問題ない。完成と反省のサイクルよ
|

|