トップページgamedev
1001コメント329KB

C/C++ゲーム製作総合スレッド Part5

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2014/01/16(木) 00:00:31.27ID:w6WW3hAo
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その17
http://toro.2ch.net/test/read.cgi/gamedev/1383795645/

前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
http://toro.2ch.net/test/read.cgi/gamedev/1376262450/
0604名前は開発中のものです。2014/04/29(火) 01:03:59.54ID:T7NavjR1
こりゃStateパターンを使えていない時点でゴミっすわ。
バカが書いたコードだと一目で分かる。

面接でこれ持ってきた奴がいたら不採用…と言いたいけど
この程度のバカが偏差値65クラスなわけで
次頭があれば徹底的に叩きなおすことを前提で採用、ってなるレベル。
0605名前は開発中のものです。2014/04/29(火) 01:31:18.44ID:l2CWKjf4
それでも俺は、自らコードを曝け出した事に対して尊敬するね。

批判だけなら誰でも出来る
0606名前は開発中のものです。2014/04/29(火) 01:46:17.29ID:EMV53Qmd
>>604
http://pc11.2ch.net/test/read.cgi/gamedev/1227748699/181-

当時は高専の学生でしたので
0607名前は開発中のものです。2014/04/29(火) 01:49:34.15ID:T7NavjR1
>>608
あー、それわかる!
高専生感がぷんぷん臭う。

俺の職場は理系院生が採用の中心だから
君のコード見ると偏差値70以下!って判定を下しちゃうんだよね…。
0608名前は開発中のものです。2014/04/29(火) 02:13:49.38ID:EMV53Qmd
どうか心安らかな日々を
0609名前は開発中のものです。2014/04/29(火) 02:16:22.74ID:ZoGLF8y+
んー別にいいんじゃね?
大してシーンも多くないゲームなら充分充分
パターンとかはもっと規模が大きくなって
制御構文使ってたら死ぬ時に使う物だと思うのだが

ということで誰かstateとstrategyの違いを教えてくださいな
ググってもイマイチ腹に落ちなくてなあ…
0610名前は開発中のものです。2014/04/29(火) 03:18:14.89ID:51TE7qv/
高専生感というとても具体的な指標
これが偏差値70以上の力だと言うのか・・・
0611名前は開発中のものです。2014/04/29(火) 08:43:51.10ID:7WDDZUtT
これdemo->Run()の中に別のゲームループがあるって事になるんだろ。
つまり>>528って事だろ。

ところでupdate()とdraw()に分けないのかな。
コンテンツロスト時の再描画とか、各シーンで個別に実装とかだるいっしょ。
0612名前は開発中のものです。2014/04/29(火) 10:25:45.81ID:EMV53Qmd
>>611
当時のソースは実家のPCに眠ってるのでうろ覚えなんですが、D3D9などの
デバイスロスト時の対応などはGAMEENVクラスに押し付けてました

描画と、ゲーム内時間発展のサイクルは独立。フレームスキップしてました。
描画は60⇔30⇔15[fps]の半固定。

時間発展の刻み幅は1/60[sec]固定。シミュレーション部分の計算自体は
とても軽かったので。あとはリプレイデータの都合。デバッグ時の巻き戻し
や早送り(任意時点へ移動)してたので
0613名前は開発中のものです。2014/04/29(火) 10:41:35.55ID:EMV53Qmd
>>611
>これdemo->Run()の中に別のゲームループがあるって事になるんだろ。
>つまり>>528って事だろ。

それぞれにゲーム内の時間発展を計算するサイクルがありましたね。
そういう意味ならそうなんだと思います。ゲーム固有の定石とやらは
よく知りません
0614名前は開発中のものです。2014/04/29(火) 11:00:02.81ID:R32lOXpJ
配信でコーディングしてる現役ゲームプログラマさんの仰っていた序列表貼っておきますね

神様 綺麗なコードで完成させられる人
人間 汚いコードで完成させられる人
=================( 越えられない壁 )====================
家畜 汚いコードで完成させられない人
ハエ 綺麗なコードで完成させられない人

ハエに出来るのは人間の邪魔だけと言っていて、なるほどなとリスナー達感心しきりでした。
ID:T7NavjR1見ててこの事思い出しましたね
0615名前は開発中のものです。2014/04/29(火) 11:23:57.20ID:k/FZV1V1
自分は
std::unique_ptr<Scene> scene = new なんかのシーン();
while(1){
scene->update();
scene->draw();
if( scene->isEnd() ) {
scene = std::move(scene->getNext());
}
}
ってやってそれぞれのシーンが次の遷移先返すようにしました
switchを意地でも使いたくてこんな形になった

実際switchの方がよく使われるものなの?サンプル探してもswitch使っているのしか見当たらないから困ってる
0616名前は開発中のものです。2014/04/29(火) 11:24:47.17ID:t5QADVCc
>>614
やるじゃんw
0617名前は開発中のものです。2014/04/29(火) 12:27:00.81ID:CXcBKCf+
>>615
多分だけど、

 if(関数に分けずそのまま羅列) → if(関数分け) → switch → stateパターン

……みたいに進化していくんだと思う。
単に自分がそういう順番でステップアップしたってだけなんだけどさ。

仮に自分が教えるなら、stateパターンによるシーン遷移は後回しにするかな
0618名前は開発中のものです。2014/04/29(火) 12:35:06.95ID:CXcBKCf+
ああそうだ思い出した。
シーン遷移をStateパターンで行う方法についてなんだけど、「シーン遷移しないとき」って、どうしてる?

(1) nullを返す
(2) thisを返す
(3) シーン遷移関数を用意しておき、それが呼ばれなかったとき
(4) その他

自分は(2)で、nullを返すときはゲーム終了ってことにしてる。
一般的なStateパターンなら(1)かなあ。
0619名前は開発中のものです。2014/04/29(火) 12:40:34.16ID:5MYZPLM5
>>612-613
なるほどthx. sceneの引数でgameenv貰ってるね。

シーン遷移の実装はシーン側は知る必要ないから、
その時の気分とかシーンの数とかで好きにやりゃいいと思うけどね。

Task的に入り組んだ作りしてないのなら、どれでもすぐ遷移図を思い描けるっしょ。
0620名前は開発中のものです。2014/04/29(火) 16:14:29.11ID:R32lOXpJ
>>616
曰く、
「クラス設計書貰うけど見ない。クラス流用して他のゲーム作ったことがないから意味がない」
「デザインパターン?何それ?」
「参考書は読んだことがないからオススメ本とか分かんない。ネットと、エラーが出たらググレカスで覚えた」


PSでほとんど1人でプログラム任される人の弁です
0621名前は開発中のものです。2014/04/29(火) 16:19:59.07ID:NQBFYHJc
>>620
すげぇ
俺そんなこと言ったことないけど、完全に俺だわ
ただ、作ってたのはPSじゃねぇけど
0622名前は開発中のものです。2014/04/29(火) 16:20:18.05ID:KJKa8R89
>>620
その人、協調性が無いから、単独でしか使い道が無い。
0623名前は開発中のものです。2014/04/29(火) 16:27:51.48ID:NQBFYHJc
人事を何とかしないとうちの会社はやばい
ゲー専卒で多少のコミュニケーションはできれば入れてる感じがする
8人中2人もう辞めてるし、てかそれ以前にDXライブラリをインクルードディレクトリへの追加方法わからねぇわ、プログラムが組めねぇわで最悪だわ
1人だけまともというかたぶん俺より組める奴居るけど
うちは研修する余裕なんてねぇってわかってんだろうが、去年入ったやつなんてもう最後の1人を何とか留まらせてるんだから、俺らに人事噛ませろよ
0624名前は開発中のものです。2014/04/29(火) 16:27:58.51ID:lMFqMvqX
PSでググレカスてどんな時代?
一昔前の1500円のミニゲーム移植とかの人てことなんだろうか
0625名前は開発中のものです。2014/04/29(火) 16:31:27.80ID:GSilIO8H
>>622
ちょっとワラタ
0626名前は開発中のものです。2014/04/29(火) 16:31:55.46ID:CPnqQaxX
従来の手続き型で何本もゲーム作ってきた俺だが
いっちょオブジェクト指向でも勉強するか、とやり始めた結果
もうずっと制作が滞ったままになっている。
なんでこんなにめんどくさいんだ……。
0627名前は開発中のものです。2014/04/29(火) 16:33:29.90ID:t5QADVCc
サッカー上手い人がサッカーの技術書読んでうまくなるわけもないし、そういう感覚なんかな。
本読まずにPG覚えるとか想像もつかねえw
0628名前は開発中のものです。2014/04/29(火) 16:59:24.66ID:CPnqQaxX
本は解るようになってから読むと解るけど、解らないうちに読んでも解らないからなw

そもそも本を書くような人は「本を読んだら解る人」だろうから、
本を読んでも解らない人でも解るような本を書けないだろうな。
0629名前は開発中のものです。2014/04/29(火) 17:12:12.68ID:dd41HZLf
ビギナーコラムでオブジェクト指向の哲学とか語られてもな
とりあえず作ってみよう系のほうが理解しやすい
ここを弄ったらこう変わるみたいな
0630名前は開発中のものです。2014/04/29(火) 17:21:14.92ID:5MYZPLM5
c++だけがoopじゃないっすから…
0631名前は開発中のものです。2014/04/29(火) 17:40:38.04ID:lMFqMvqX
>>628
だいぶ使いこなせるようになっても読めない初心者向けの本とかあるから性質が悪い
ゲーム用だけじゃないが初心者の頃はコードがのっててサンプルが作りたい物に近いから買ってみるけど…
Cマガも半分ぐらいしか理解できなかったがいま読み返すと消えてる技術も多くて笑える
0632名前は開発中のものです。2014/04/29(火) 17:48:57.10ID:bM1HEdOI
ゲーム系の学生なんだけど、ゲーム会社ってどのくらいのレベルのオブジェクト指向まで要求されるの?
あと、AIとかそういうアルゴリズムも重視される?
0633名前は開発中のものです。2014/04/29(火) 18:14:47.39ID:NQBFYHJc
>>632
ぶっちゃけ会社によって様々だからうちの会社で書くけど
新卒には特別な期待はしない
とりあえず、プログラムを作れれば良いや、ゲームまで作れたら儲け物って感じだな
後はただ、人間として基本的なことはできてればそれだけで良い
俺は現場だからこういうのを求めてるけど、人事は即戦力のゲームプログラマーとしてプログラムを作れないやつを入れてくるから何を見てるか同じ会社なのにわからん
とりあえず残業させてないのに毎年1ヶ月以内に1人、3ヶ月以内に半分になる新卒はゲーム作る気がないよね
0634名前は開発中のものです。2014/04/29(火) 18:23:27.78ID:EMV53Qmd
マ板でやれ。な
0635名前は開発中のものです。2014/04/29(火) 18:25:53.36ID:R32lOXpJ
>>621
スーパープログラマさんかな?w
他の配信者も有名な人だよって言ってたし、多分在京で働いてる業界人なら知ってる人ですよ。

ちなみに、よくプログラマになるにはどうしたらいい?という初見リスナーのレスあるけど
「C++とDirectX(ライブラリ自作)で『完成した』作品を持ってこい」と言ってますね。
本人もデザインパターンを配信中にググって知ったみたいだし
オブジェクト指向とか関係ないんじゃないかと。とにかく完成品をよこせと。
0636名前は開発中のものです。2014/04/29(火) 18:34:29.77ID:lKQHJo0L
Q 漫画家になるにはどうしたらいいですが?
A 漫画を描けば漫画家です
 プロになりたければ作った作品を持ち込んでください

Q ゲームプログラマになるにはどうしたらいいですか?
A ゲームを作ればゲームプログラマです
 プロになりたければ作品を持ち込んでください
0637名前は開発中のものです。2014/04/29(火) 18:38:17.18ID:NQBFYHJc
>>636
これ
でも、自分じゃなくて友人が作ったやつを持ち込むクソも居る
0638名前は開発中のものです。2014/04/29(火) 19:08:58.63ID:WRxgjGJf
スレ違いの話題振る質問者は不採用です
0639名前は開発中のものです。2014/04/29(火) 19:14:20.55ID:t5QADVCc
くだらないループ話を延々続けてる馬鹿に飽きていたからいい暇つぶしになったw
0640名前は開発中のものです。2014/04/29(火) 20:34:32.58ID:EMV53Qmd
>>609
>制御構文使ってたら死ぬ時に使う物
>>615
>実際switchの方がよく使われるものなの?
>>619
>シーン遷移の実装はシーン側は知る必要ないから、
>その時の気分とかシーンの数とかで好きにやりゃいいと思うけどね。

>Task的に入り組んだ作りしてないのなら、どれでもすぐ遷移図を思い描けるっしょ。

同意です。実装の選択肢は色々あり、個々の状況に応じて選べば良い事かと。
>>602-603の例で言えば、振る舞い的に拡張する予定がなく、実際しなかった
部分なので別に問題なかったですね

元々HSP上がりの人間(周りも同様)だったので手続き型の記述のほうが平易
というのもありました



>>617

State Pattern
switch-case構文
0641名前は開発中のものです。2014/04/29(火) 20:35:52.86ID:EMV53Qmd
>>640訂正
末尾の三行は消し忘れです。>>617さんごめんなさい
0642名前は開発中のものです。2014/04/29(火) 20:52:06.90ID:CXcBKCf+
>>635
何年か前に、画像表示、パッド入力、音声出力くらいまでは何とか作ったけど
途中で面倒くさくなって、結局DXライブラリに戻ってしまったという残念な経験しかないやw
0643名前は開発中のものです。2014/04/29(火) 20:55:41.83ID:EMV53Qmd
>>619
会社帰りにたまにボー●ーブ●イクでチャリンチャリンしてたんですが
転勤先にそれ置いてるゲーセンがなくて悲しみのあまり余暇にパチモン
作りで自分を慰めてるんですが、火器とかAIの部分はStateというかStrategy
というかそんな感じのコードはありますね。条件分岐でダラダラ書いてたら
流石に眩暈がしてきたので
0644名前は開発中のものです。2014/04/30(水) 00:47:22.57ID:bEifU6C0
何を言いたいのかサッパリ分からん
0645名前は開発中のものです。2014/04/30(水) 01:21:27.75ID:3yGpFv6B
>>643
パーツとか持ち替えの武器とか大量にあると面倒くさいことになるよね
あの手のアセンゲーっぽいのは俺も好きだが作りたいとは思わないな
0646名前は開発中のものです。2014/04/30(水) 09:11:19.42ID:JP5IUHRh
つまらない流れなので誰かネタ振りお願いします><
0647名前は開発中のものです。2014/04/30(水) 10:28:13.43ID:vrCaDxEc
初心者な質問ですみません。
クラスからクラスを呼ぶときってどういう書き方が普通なんですかね?

class A {
public :
static A* me ;
int a ;
A() ;
}
A* A::me ;

A::A() {
me = this ;
}

ってやって A::me->a とかやってるけど、なんかスマートじゃなくて……。
0648名前は開発中のものです。2014/04/30(水) 11:46:43.01ID:eqz1Of7R
なにがしたいのかさっぱりわからんけど、それmeにインスタンス入れてるだけであんまり意味なくない?
クラスからメソッド直接使いたいとかなら、メソッドをstaticで定義してクラス名::メソッド名()だけど
0649名前は開発中のものです。2014/04/30(水) 12:04:25.51ID:gNDB74Yv
グローバル変数みたいなことがしたいのかな
アクセス可能なオブジェクトを限定するのがオブジェクト指向の組み方だから
アクセスする必要があるクラスにポインタなり参照なり持たせたほうが良いんじゃない
0650名前は開発中のものです。2014/04/30(水) 12:58:15.72ID:2hopiA0K
日本語不自由で変な質問するやつはほっといたほうがいいよ
0651名前は開発中のものです。2014/04/30(水) 13:13:03.63ID:8+rqYap5
staticメンバの初期化の仕方の話でねーのん。
最近c++触ってないから間違ってたらすまんけど。

// A.h
class A {
public:
  static int a;
}

// A.cpp
int A::a = 10; // 初期化

// main.cpp
void main() {
  A::a;    // 利用
}
0652名前は開発中のものです。2014/04/30(水) 13:38:55.27ID:MPxnDurN
3Dゲームで経路探索をやってみようと思うんだけど、3Dの位置情報ってどうやって調べればいいの?
0653名前は開発中のものです。2014/04/30(水) 14:23:59.95ID:bEifU6C0
具体的には?

基本的に平面で移動するゲームなら2Dと大して変わらんしだろうし
キューブ状の座標(2Dで言うところのマス目)を移動するだけなら、移動方向に上下という選択肢が増えただけと考えられるし
ビルの中を探索するようなゲームなら、階段やエレベータでエリアを区切ればいい気がする。
0654名前は開発中のものです。2014/04/30(水) 14:32:28.53ID:Uak2ZaC3
何が聞きたいのかさっぱりわからんけど、普通に変数参照すればいいんじゃない?
複雑な地形での経路探索がわからんって話なら、地形の要点にポイント作ってダイクストラ法でいいんじゃないの
0655名前は開発中のものです。2014/04/30(水) 14:35:02.75ID:Uak2ZaC3
ごめんダイクストラ法じゃなくてA*か
0656名前は開発中のものです。2014/04/30(水) 14:50:11.17ID:49atqyLw
経路探索
http://samples.jbpub.com/9781556220784/Buckland_AIExecutables.zip

Chapter 5 にあるように 経路探索する。
Chapter 8\Raven_CoarseGraph のようにグラフとして探索する。
0657名前は開発中のものです。2014/04/30(水) 16:08:24.08ID:L0vWdcDz
>>655
A*はダイクストラの拡張版で、基本アルゴリズムは重複する部分が大きいから、
大筋外してはいないよ
ゲーム用途の経路探索性能は、A*の方がより最適化されるみたいだけど
0658名前は開発中のものです。2014/04/30(水) 16:47:29.58ID:IG+u4GlD
>>647
http://ideone.com/gt21RS
そのコードが何か不明だがこういう振る舞いをするという事がわかってれば好きにしろ
0659名前は開発中のものです。2014/04/30(水) 22:30:05.62ID:vrCaDxEc
647です。皆さん色々すみません。
やりたかったのは、例えばコンフィグデータを一括管理するクラスを作って
他のクラスでそれを使う、ような事です。
例として挙げたソースは簡単に書いただけで直接書き換えたいというわけではありませんでした。

関係ない愚痴ですが、こうやれば動くからこれでいいのかな、と作り進めてても
やっぱりおかしいよな、とまた一から作り直す、を繰り返してて制作が全く進みません……。
0660名前は開発中のものです。2014/05/01(木) 03:51:25.76ID:jedbV3SH
http://anago.2ch.net/test/read.cgi/ghard/1387003319/235
  ↑ ↑   ↑ ↑   ↑ ↑
0661名前は開発中のものです。2014/05/01(木) 05:10:34.61ID:z13QLsnT
唯一のインスタンスを保証するシングルトンではなく、
インスタンスは複数作れるけど、実体は同じものを作っている……っていうアルゴリズムあったよね。

>659の場合だと、その方法使えそうな気がするものの……名前が分からんので教えられん
0662名前は開発中のものです。2014/05/01(木) 08:21:56.84ID:3d6d8Z4v
>>659
そんなのグローバル変数でいいだろ
つまんないとこで止まってないで先進めよ
0663名前は開発中のものです。2014/05/01(木) 09:19:18.98ID:OWwKad9r
インクルードガードとexternでおk
0664名前は開発中のものです。2014/05/01(木) 11:26:20.56ID:HOcvGku/
http://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
これをプログラムに直すとどうなるの?
大学数学はさっぱり分からないから誰か教えて
0665名前は開発中のものです。2014/05/01(木) 12:30:19.75ID:Fm1fH+z1
>>664
ダイクストラ法は大学数学関係ないぞ
Game Coding Gemsの1か2に解説とソースコードがある
0666名前は開発中のものです。2014/05/01(木) 12:35:48.55ID:d2ShpQiQ
>>664
図のアニメーションと解説を読めば分かると思うが…
難解な数学計算無し。少なくとも高校数学の域は逸脱してない。
記号の意味分からない子向けに手続きを文章で丁寧に解説してる。
下手すりゃ厨房でも「コンピュータってバカ正直な事なんだね…」
と感想を述べながら呆れ顔をしてくるレベル
0667名前は開発中のものです。2014/05/01(木) 12:37:56.10ID:d2ShpQiQ
×「コンピュータってバカ正直な事なんだね…」
○「コンピュータってバカ正直な事をやるんだね…」
0668名前は開発中のものです。2014/05/01(木) 13:21:29.38ID:d2ShpQiQ
>>662-663
同意
0669名前は開発中のものです。2014/05/01(木) 13:56:28.60ID:z13QLsnT
「馬鹿正直」って感想はさ、たぶんコンピュータへの理解の第一歩だよね?
0670名前は開発中のものです。2014/05/01(木) 14:18:18.47ID:d2ShpQiQ
そうなんじゃない?学園祭でマイクロマウスの実演と解説をしてた時の消防や
厨房の反応は楽しかったよ。「かあいい」「頭悪過ぎうー」「きゃはは」
「がんばれー」とかが大半だったけど、眼鏡っ子の厨房が模造紙の解説を
一所懸命に読んでて、繰り出す質問がなかなか賢すぎてこっちが呆れた
0671名前は開発中のものです。2014/05/01(木) 14:26:30.17ID:0k+QrX5J
メンバ変数が全部staticのパターンの名前が思い出せない
モノトーンだかそんなような名前だった覚えがあるけど
0672名前は開発中のものです。2014/05/01(木) 14:27:47.22ID:d2ShpQiQ
monostateじゃね
使ったことないが
0673名前は開発中のものです。2014/05/01(木) 16:56:40.77ID:ZxuEhXPJ
シングルトン モノステート
0674名前は開発中のものです。2014/05/02(金) 00:13:50.98ID:5CvmG/6A
皆さんは描画リストに登録して、Zソートやらしてからとめて描画などしてますか?
2Dで同じようなことを考えてるのですが、描画管理クラスにリストを持たせ、
その管理クラスのメソッドを通してリストへ登録しようとしてます
XNAのSpriteBatchの形が近いです

しかしこの方法だと管理クラスを引数でどんどん渡していかなければいけなく、良い方法がないか探してます
2Dオブジェクトにstaticで管理クラス、または描画リストを持たせた方がいいのでしょうか

設計の話なので明確な答えがないのはわかってます
皆さんの考えを参考程度に聞きたいです
0675名前は開発中のものです。2014/05/02(金) 00:48:59.22ID:DPIL44M1
スプライト的な「2Dオブジェクト」を作って、
そこにパラメータ与えて、あとは自動的に描画されるような組み方してるん?
0676名前は開発中のものです。2014/05/02(金) 01:19:41.25ID:ZlBT84m3
>>674
>しかしこの方法だと管理クラスを引数でどんどん渡していかなければいけなく、良い方法がないか探してます

依存性があるなら明示する(例えばSetterやコンストラクタで注入するだとか)
というのはOO的には無難なお作法だと思うけど。なんか不都合あるの?
(いちいち記述するのがかったるい、だとか)

まぁ、あまりに広範に渡ってその依存性が確認されるなら、グローバルな
存在、グローバルなサービス、として提供してもいいのでは。尤も、描画
モジュールに依存するモジュールってゲームの中では限定的だと思うけどね
0677名前は開発中のものです。2014/05/02(金) 01:31:13.85ID:Ru1dUuzy
表示するもの {
private IDrawable model;
private Vector2 pos;
private 表示するもの[] children;
public void Draw(描画管理クラス){
描画管理クラス.add(model,pos);
for child in child {
child.draw(管理クラス);
}
}
}
0678名前は開発中のものです。2014/05/02(金) 06:36:13.80ID:Bq1H46te
ダイクストラ法ってゴールをコロコロ変える(プレイヤーを追いかける)ことって出来る?
0679名前は開発中のものです。2014/05/02(金) 07:18:20.71ID:DPIL44M1
たとえば屋内を探索するゲームの場合、
ある部屋から別のある部屋へ行く方法ってのは基本的に固定なので、最初に各パターンを計算しておけばいい。

上手く追いかけるように動かしたいってことなら、
有名なところで、パックマンの敵アルゴリズムの話がシンプルでわかりやすいと思う。
0680名前は開発中のものです。2014/05/02(金) 07:57:10.51ID:gb8xd1Dr
自キャラの範囲と、敵の範囲と、とりあえず目指すポイント
みたいな表を作っておけば良いのか
0681名前は開発中のものです。2014/05/02(金) 09:29:13.26ID:dzhB41LP
>>675
2Dオブジェクトは座標、テクスチャを持ち、描画関数内で管理クラスのリストへ登録
という流れを考えてますので、自動的な描画はしません

>>676
やはりプログラムの最初にsetterで登録が一番無難ですよね
不都合はないのですが、2Dオブジェクト全てが
管理クラスのsetterを持つのが気持ち悪く思えてしまい・・・

描画モジュールに依存するものが限定的とは...ゲーム内では殆どのものが
描画されるものだと思ってましたが違うのでしょうか
オブジェクトを管理したりするものは別だと思いますが・・・

>>677
これは結局引数でどんどん渡していくのでは・・・?
0682名前は開発中のものです。2014/05/02(金) 09:52:01.66ID:Ru1dUuzy
>>681
引数で渡していっていいと思う
常に同じ描画管理クラス使うとは限らないし
0683名前は開発中のものです。2014/05/02(金) 13:12:16.23ID:6RPuKXq0
>>681
何故「気持ち悪い」のか言葉で説明できるようにしてみれば
どうすればいいのかわかるんじゃない?
0684名前は開発中のものです。2014/05/02(金) 13:23:32.11ID:taHVwRQz
リストへの登録を描画関数と分ければ?
登録するデータを戻り値にして呼び出し側で登録するとか
0685名前は開発中のものです。2014/05/02(金) 19:21:58.74ID:dzhB41LP
>>682
レンダーターゲットを変えた時などでしょうか

>>683
2Dオブジェクトは例えばスコアや、メニューなどに使用するのに
管理クラスのsetterを常に持ち続けてるから・・・?

>>684
list.add(pObj->draw()); という感じですか?
この場合複数のオブジェクトを描画する時はどうなるんでしょう
スコアクラスは1桁描画を複数回呼ぶと思います
そういう時は戻り値でデータを返せないのでは

結局引数で渡してリストへ登録
または2DObject自身がリストを保持し、そこへ各派生クラスが登録する
という形になってしまうのでしょうか
0686名前は開発中のものです。2014/05/02(金) 20:24:35.53ID:tEs8rCVt
ゲームで2つのプレイヤーの画面を並べる時ってどうしてる?
プレイヤーの状態とかエフェクトとかシングルトンで管理していて今まではどこかのクラスから
Game::instance()->registerEffect(new Effect())
みたいにできたんだけどプレイヤーごとにGameを作るようにしたらこれができなくなって
ゲームのインスタンスをあちこちに渡さなきゃならなくなったんだけどこんなことしないでもできる方法ない?
0687名前は開発中のものです。2014/05/02(金) 20:30:31.53ID:DPIL44M1
話の流れがよくわからないんだけど、

renderer.add(PlayerObject);  //プレイヤーキャラクターのオブジェクトを登録
renderer.add(EnemyObject);  //敵キャラクターのオブジェクトを登録

…みたいなのとは全く別の話?
0688名前は開発中のものです。2014/05/02(金) 20:32:36.22ID:DPIL44M1
>>686
Gameクラスってなんじゃらほい?
いわゆるシーンとかシーケンスってやつ?
0689名前は開発中のものです。2014/05/02(金) 20:37:30.44ID:Yjnja2zX
>686
シングルトンが用を足さない状態だからやめるのが手っ取り早いけど
とりあえずシングルトンインスタンスの取得にID等の引数もたせれば?
引数違いなら違うオブジェクトを返すてのは実装は容易でしょ

こういうどこでも使えるグローバル変数的な状況で使うシングルトンは嫌いだけどな
0690名前は開発中のものです。2014/05/02(金) 20:42:33.50ID:Ru1dUuzy
>>685
レンダリングターゲットを変えたときもあるかもしれないけど、
マルチスレッドで分割してトラバースするこもとあるし。
Direct3D11でコンテキストを複数作れるようになったしね
0691名前は開発中のものです。2014/05/02(金) 20:45:40.07ID:Gu2dz6L1
>>685
戻り値をVectorかなんかにしたら

>>686
instance()に引数渡して特定のインスタンス取得出来るようにする
これまでシングルトンだったのが複数必要になった時点で設計見直した方がいいような気もするけど
0692名前は開発中のものです。2014/05/02(金) 20:54:53.01ID:tEs8rCVt
情報不足すぎたうえに色々酷いごめんよ
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
うまい設計思いつかなかったんよね
その方法手っ取り早いし良さそうです
0693名前は開発中のものです。2014/05/02(金) 21:46:30.08ID:Yjnja2zX
>>692
EnemyはどうしたってEffectへのポインタが欲しいわけで描画の関係からか複数存在してるとなると
初期化などでずっと持たせるのが嫌ならhitかそれ以上に位置するGameから呼ぶ関数に引数として渡すか
EnemyはGameクラスのポインタ位持ってるならGameのほうにAddEffect関数もたせてEnemyはそれを呼ぶか

スレッドセーフでない設計ならEffectポインタのグローバルか静的関数なGetterとSetter用意して
GameオブジェクトごとにEnemy更新前にSetterでGetterの戻り値となるポインタを入れ替え…止めた方がいいな
0694名前は開発中のものです。2014/05/02(金) 22:17:39.20ID:DPIL44M1
実際のコードでは、Effectクラスから派生した HitEffect とか DeadEffect とかを
Enemy内から呼んでるんだよね?
0695名前は開発中のものです。2014/05/02(金) 22:41:54.83ID:gb8xd1Dr
GameがEnemyを管理するんだったらEnemyに
エフェクト番号とフラグを持たせれば良いんじゃない
0696名前は開発中のものです。2014/05/03(土) 02:03:51.33ID:aTctHTqN
>>687
そんな感じです
ですがそのrendererを渡そうか悩んでます
引数ですとかなり深い(?)ところまで渡す必要があるのではないかという感じです

>>690
引数で渡した方が自由が利きますね
めんどくささと柔軟性のどっちをとるかみたいな感じでしょうか

>>691
座標、テクスチャ、UV、色などのことを考えるとVectorかなんかだときつそうです

とりあえず引数で渡す方向で作ってみたいと思います
オブジェクト指向難しいです...
0697名前は開発中のものです。2014/05/03(土) 06:24:50.92ID:aTctHTqN
ああ、文章にミスが
>>696
rendererを渡そうか×
rendererをどう渡そうか○
です
0698名前は開発中のものです。2014/05/03(土) 14:23:28.87ID:yzrAO4fX
ヒープ領域のオブジェクトを参照で引数で渡したい時ってどういう風に書けばいいの?
0699名前は開発中のものです。2014/05/03(土) 16:01:04.13ID:ZggXQf33
普通に参照渡しするだけだよ
0700名前は開発中のものです。2014/05/03(土) 18:27:55.89ID:Dtrz+is9
void f(A &a);

A *a = new A();

f(*a);

こんな感じゃない

参照って殆ど使った事ないからあってるかどうかわからんけど
0701名前は開発中のものです。2014/05/03(土) 19:07:15.30ID:hZKN3J0P
「ゲームプログラマになる前に覚えておきたい技術」
という本がオススメと言われたんですが、これ持ってる人いませんか?
役に立つ度合いとかアドバイスしてもらえたら嬉しいです
0702名前は開発中のものです。2014/05/03(土) 19:31:10.25ID:R+meoZG6
ゲームプログラマになる前に覚えておきたい技術
01 この本はどんな本か
http://www.shuwasystem.co.jp/gpro-sp/

これを読みましたか?
0703名前は開発中のものです。2014/05/03(土) 20:46:14.95ID:TVFyIiNS
>>693
やっぱりそれぞれが持つしかありませんかねえ
呼び出し元をparentとかして持たせておくのって普通にやっていることなんですか?
この場合だとEnemy::parentにGameへの参照か何かを持たせるとか

>>694
はいそうです
■ このスレッドは過去ログ倉庫に格納されています