C/C++ゲーム製作総合スレッド Part5
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2014/01/16(木) 00:00:31.27ID:w6WW3hAo元スレ
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/
0687名前は開発中のものです。
2014/05/02(金) 20:30:31.53ID:DPIL44M1renderer.add(PlayerObject); //プレイヤーキャラクターのオブジェクトを登録
renderer.add(EnemyObject); //敵キャラクターのオブジェクトを登録
…みたいなのとは全く別の話?
0688名前は開発中のものです。
2014/05/02(金) 20:32:36.22ID:DPIL44M1Gameクラスってなんじゃらほい?
いわゆるシーンとかシーケンスってやつ?
0689名前は開発中のものです。
2014/05/02(金) 20:37:30.44ID:Yjnja2zXシングルトンが用を足さない状態だからやめるのが手っ取り早いけど
とりあえずシングルトンインスタンスの取得にID等の引数もたせれば?
引数違いなら違うオブジェクトを返すてのは実装は容易でしょ
こういうどこでも使えるグローバル変数的な状況で使うシングルトンは嫌いだけどな
0690名前は開発中のものです。
2014/05/02(金) 20:42:33.50ID:Ru1dUuzyレンダリングターゲットを変えたときもあるかもしれないけど、
マルチスレッドで分割してトラバースするこもとあるし。
Direct3D11でコンテキストを複数作れるようになったしね
0691名前は開発中のものです。
2014/05/02(金) 20:45:40.07ID:Gu2dz6L1戻り値をVectorかなんかにしたら
>>686
instance()に引数渡して特定のインスタンス取得出来るようにする
これまでシングルトンだったのが複数必要になった時点で設計見直した方がいいような気もするけど
0692名前は開発中のものです。
2014/05/02(金) 20:54:53.01ID:tEs8rCVtEffectは別で管理している
シングルトンをやめるからどうするのが良いのかと思って聞いたんだ
ダブルディスパッチで敵の当たった処理とかしているんだけど
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:Yjnja2zXEnemyはどうしたってEffectへのポインタが欲しいわけで描画の関係からか複数存在してるとなると
初期化などでずっと持たせるのが嫌ならhitかそれ以上に位置するGameから呼ぶ関数に引数として渡すか
EnemyはGameクラスのポインタ位持ってるならGameのほうにAddEffect関数もたせてEnemyはそれを呼ぶか
スレッドセーフでない設計ならEffectポインタのグローバルか静的関数なGetterとSetter用意して
GameオブジェクトごとにEnemy更新前にSetterでGetterの戻り値となるポインタを入れ替え…止めた方がいいな
0694名前は開発中のものです。
2014/05/02(金) 22:17:39.20ID:DPIL44M1Enemy内から呼んでるんだよね?
0695名前は開発中のものです。
2014/05/02(金) 22:41:54.83ID:gb8xd1Drエフェクト番号とフラグを持たせれば良いんじゃない
0696名前は開発中のものです。
2014/05/03(土) 02:03:51.33ID:aTctHTqNそんな感じです
ですがその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:yzrAO4fX0699名前は開発中のものです。
2014/05/03(土) 16:01:04.13ID:ZggXQf330700名前は開発中のものです。
2014/05/03(土) 18:27:55.89ID:Dtrz+is9A *a = new A();
f(*a);
こんな感じゃない
参照って殆ど使った事ないからあってるかどうかわからんけど
0701名前は開発中のものです。
2014/05/03(土) 19:07:15.30ID:hZKN3J0Pという本がオススメと言われたんですが、これ持ってる人いませんか?
役に立つ度合いとかアドバイスしてもらえたら嬉しいです
0702名前は開発中のものです。
2014/05/03(土) 19:31:10.25ID:R+meoZG601 この本はどんな本か
http://www.shuwasystem.co.jp/gpro-sp/
これを読みましたか?
0703名前は開発中のものです。
2014/05/03(土) 20:46:14.95ID:TVFyIiNSやっぱりそれぞれが持つしかありませんかねえ
呼び出し元をparentとかして持たせておくのって普通にやっていることなんですか?
この場合だとEnemy::parentにGameへの参照か何かを持たせるとか
>>694
はいそうです
0704名前は開発中のものです。
2014/05/03(土) 21:38:49.30ID:XwaCxcGs0705名前は開発中のものです。
2014/05/03(土) 21:46:57.91ID:XwaCxcGs各クラスがどのエフェクトを使うのか?というのをハッキリさせておいて
必要なものだけインクルードするようにすれば、そこまで気持ち悪いことにはならないんじゃないだろうか。
たとえばEnemyクラスは、Effect::GettingItem(アイテム獲得)とかEffect::PlayerDead(プレイヤー死亡)は不要だろう。
それすら気持ち悪いと思うなら(分からんでもない)、
ObserverとかListenerとかCallbackとかその辺に頼るとかでも良いんじゃない?
0706名前は開発中のものです。
2014/05/03(土) 22:35:18.25ID:Kqu7ExT3参照引数は「読むだけ」を意図してる場合が多いからconst付きが多いかな
>>703
>呼び出し元をparentとかして持たせておくのって普通にやっていることなんですか?
>この場合だとEnemy::parentにGameへの参照か何かを持たせるとか
その疑問は>>674-696のやり取りと同じ話っぽいね、俺も>>704-705に同意かな。
依存関係を明示すると違和感を覚えたり気持ち悪くなるのは、大抵の場合
依存関係の認識(or分析)が大雑把。依存関係を明示するとそれが露見しちゃう。
機能分割が大雑把。依存関係を詳細に分析すると広範に絡み合ってて一体でした。
とか。Gameへの参照は、恐らく要らん情報にアクセスする権利も与えてるから
依存関係の明示というより、広範に渡る権力へのアクセス権の譲渡なのかな?
君はこの世界に神になる。俺はいいと思うけどね。というか、はなっから
グローバルなサービスとして提供してしてもいいかもね。完成させてから
リファクタリングしたほうがいい
個人的な短期小規模開発(作り捨て)なら別に問題ない。完成と反省のサイクルよ
0707名前は開発中のものです。
2014/05/03(土) 23:45:58.24ID:yuGTooJm0708名前は開発中のものです。
2014/05/04(日) 00:03:34.32ID:4VZ37tn90709名前は開発中のものです。
2014/05/04(日) 00:09:25.10ID:LNtKUxSS電子版あるならそっちの方が捗りそうだ
0710名前は開発中のものです。
2014/05/04(日) 07:21:43.07ID:r1PwGAIh描画されるクラスはインターフェイスを実装
描画クラスはそのインターフェイスをリスト管理し順番に描画
ゲームクラスはデータクラスと描画クラスを管理し
必要に応じてデータクラスを作り、描画クラスに登録
ゲームクラスが当たり判定をして、エフェクトクラスをnew、描画クラスに登録
て感じじゃ駄目なの
0711名前は開発中のものです。
2014/05/04(日) 18:09:40.60ID:Oce/sxqqサンプルプログラムの修正版があるからそれ見て決めたら?
ちなみに独自のライブラリを使ってる
0712名前は開発中のものです。
2014/05/04(日) 21:44:57.67ID:o3zvQF1I飛行機乗客が減り、飛行場が苦労する
バス乗客が減り、高速道路が苦労する
結果的に、四国地方の経営破たん
0713名前は開発中のものです。
2014/05/06(火) 09:11:34.47ID:WKSS3LlW0714名前は開発中のものです。
2014/05/06(火) 10:42:16.25ID:2Ki+N293独自ライブラリですかー・・・
ありがとう。ちょっとどっかで立ち読み出来るまでは買い控えます。
0715名前は開発中のものです。
2014/05/06(火) 14:47:05.12ID:D61HzG9l本来スマートポインタはラクをするために使う。あとは好きにしろ
あと言語の使い方一般についての質問はプログラム板のほうがいい
【初心者歓迎】C/C++室 Ver.90【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1395675954/
はい、次の方どうぞ
0716名前は開発中のものです。
2014/05/06(火) 15:47:49.53ID:C6PkJkWu0717名前は開発中のものです。
2014/05/06(火) 16:22:09.99ID:tFTEVnQVDirectXのAPIが32bit幅なのにSTLは64bitみたいに混在してて決め打ちしにくいんだけど
インデックスとして毎回32bitを64bit拡張と変数を32bitにstatic_castと
タイプ量はともかく実行時に効率いいほうにしたい
0718名前は開発中のものです。
2014/05/06(火) 16:27:40.04ID:D61HzG9l報告しなくていい。そういう感想は彼らに直に言ってあげな。陰口より建設的だろ
はい、次の方どうぞ
0719名前は開発中のものです。
2014/05/06(火) 16:28:53.69ID:D61HzG9lかぶったすまん
0720名前は開発中のものです。
2014/05/06(火) 16:44:38.90ID:C6PkJkWuそんな非建設的な事実上機能していないスレに誘導してどうするんだって事だよ。
はい、次の方どうぞ。
0721名前は開発中のものです。
2014/05/06(火) 17:21:27.34ID:D61HzG9l例えばループ変数については普通にint使ってるな
参考までに、科学計算系のライブラリでもそんな感じだったと思うよ
計算速度云々が問題になる場合、気にかける場所はもっと別の所かと
0722名前は開発中のものです。
2014/05/06(火) 20:22:43.10ID:HhBjBQsTあとむやみにunsignedにするとsignedにunsigned加算して警告でたり面倒のもと
0723名前は開発中のものです。
2014/05/08(木) 22:05:56.40ID:Np2Vdwsyconstもメンバ関数含めて相当あるけど
0724名前は開発中のものです。
2014/05/08(木) 22:48:55.29ID:v1IR+nQC「型が明らかである場合か、あるいは逆に全く意識してほしくない場合にのみ使う……とかにしておけば?
0725名前は開発中のものです。
2014/05/09(金) 09:00:26.26ID:3cnn0QfEイテレータの型書くの面倒くさい、位しか思いつかない
0726名前は開発中のものです。
2014/05/09(金) 09:04:31.69ID:7ikJMhxE0727名前は開発中のものです。
2014/05/09(金) 13:56:58.03ID:Kaaj65V1iteratorの記述を省略するための機能か
0728名前は開発中のものです。
2014/05/09(金) 17:15:23.11ID:htXiJh1L0729名前は開発中のものです。
2014/05/10(土) 00:22:59.13ID:6TirXj8H個人的にはイテレータを簡単に書けるメリットが一番大きいと思ってるが
それ以外で使うとしたら
auto f = new Foo(); //Foo型なのは明らか
とか
//交換
auto tmp = a; //型は明らかではないが意識する必要がない
a = b;
b = tmp;
とかかなあ。
後者は素直にtemplate関数にでも投げたほうが良さそうだけどね
0730名前は開発中のものです。
2014/05/10(土) 10:54:20.51ID:dAeX94+O0731名前は開発中のものです。
2014/05/10(土) 11:11:37.14ID:hKETio2L「スタックのアドレス」を「スタック上におかれた配列の要素を指すアドレス」と解釈したけど
ttp://ideone.com/yad3h1
その配列が生きている間は問題ない
0732名前は開発中のものです。
2014/05/10(土) 22:40:27.91ID:+R2ltZ7tvoid g()
{
auto t= f();
}
ってすると t は const T& 型になると思ってたけど
実はただの T 型でコピーコンストラクタでひどいことになったことあります
0733名前は開発中のものです。
2014/05/11(日) 18:46:58.77ID:8qR2WxrEint money[MoneyType.SIZE];
こういう宣言の仕方って出来ないの?
MoneyTypeはenumで
enum MoneyType {
GOLD,
DIA,
SIZE
};
0734名前は開発中のものです。
2014/05/11(日) 19:38:27.89ID:3XauxJKcっていうかその使い方わかりにくいしやめた方が
0735名前は開発中のものです。
2014/05/11(日) 19:44:07.91ID:3XauxJKcstatic_castでキャストすればいけるっぽい
0736名前は開発中のものです。
2014/05/11(日) 19:59:02.14ID:yHWGVGOF0737名前は開発中のものです。
2014/05/11(日) 21:01:42.40ID:KSscCZAlただこれだと再定義のエラーが前出たような気がする
0738名前は開発中のものです。
2014/05/11(日) 21:04:03.89ID:9RoLwWBRenum class MoneyType:int
{
GOLD,
DIA,
SIZE
};
int money[ MoneyType::Size ];
0739名前は開発中のものです。
2014/05/11(日) 21:06:37.47ID:KSscCZAl0740名前は開発中のものです。
2014/05/11(日) 21:14:58.11ID:9RoLwWBR将来お金の種類増えるかもしれないとか
配列使うぐらいならvectorにしとけとも思うが
0741名前は開発中のものです。
2014/05/11(日) 21:51:52.47ID:3XauxJKc0742名前は開発中のものです。
2014/05/12(月) 00:24:54.73ID:cE27KFFY例えば複数の種類のお金で買えるショップ機能を作りたい場合、
ショップ側でMoneyTypeという型と整数を持っておけば、処理が楽かなと思ったんだけど
0743名前は開発中のものです。
2014/05/12(月) 01:09:04.70ID:u2hQW3ha0744名前は開発中のものです。
2014/05/12(月) 14:46:27.12ID:Pch/P8kY(例えば主人公のデータとか色々な場面で使いそうなもの)
今まで単純にデータクラスの中に静的メンバ変数で定義してグローバル的にやってたけど、
たまたまシングルトンで管理してるソースを見つけて、色々あるのかなって思った
0745名前は開発中のものです。
2014/05/12(月) 18:22:11.56ID:cE27KFFY0746名前は開発中のものです。
2014/05/12(月) 18:22:35.24ID:gXmiaEA2それともクォータニオンで球面線形補間してる?
0747名前は開発中のものです。
2014/05/12(月) 20:18:49.99ID:u2hQW3haグローバル変数は可能な限り減らす、という理念の上でやってるなら、
それは実に正しい手法だと思うよ
0748名前は開発中のものです。
2014/05/12(月) 22:53:45.27ID:Qk7dokduその方向でプログラム書き直したところ、手間の物凄く増えて辟易。
やり方を間違ってるんじゃないか感が半端ない。
0749名前は開発中のものです。
2014/05/12(月) 23:01:55.91ID:Qk7dokduC++プログラムは人によってまるで違ってくる」とあったが本当みたいね。
本や解説サイトによって、サンプルがかなり違ってるようで混乱しまくるわ。
0750名前は開発中のものです。
2014/05/12(月) 23:39:44.01ID:4H1ieXj20751名前は開発中のものです。
2014/05/13(火) 06:24:12.16ID:hs5B6JyN一人で作ってるコンパクトなプログラムくらいだったら使いまくりでいいと思うわ
0752名前は開発中のものです。
2014/05/13(火) 10:40:34.58ID:lZBhyb5G複数のソースコードのあちこちに点在してるとそれが顕著になり
グローバル変数がクラスで依存関係があると動作保証が難しい
せめて組み込み型以外はポインタ型にして初期化の順序を決めちゃうのが安全
0753名前は開発中のものです。
2014/05/13(火) 11:22:50.82ID:i7OBK+99'MoneyType' is not a class or namespace
ってでる
visualstudio2010だと出来たと思うんだけど、
Eclipse4.3だと出来ない
C++のバージョンによってなんか変わったのかな
0754名前は開発中のものです。
2014/05/13(火) 12:15:46.52ID:D4assd32enum classはC++/CLIだからだろ
Cにそんな構文はない
俺はC++には詳しくないけど実はあるのかな
0755名前は開発中のものです。
2014/05/13(火) 13:16:16.22ID:LR5OHySp0756名前は開発中のものです。
2014/05/13(火) 22:03:52.41ID:VqkITLrD使うところでだけglobal.hをインクルードしてさ
grobal.cpp
int a;
groubal.h
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
extern int a;
#endif
0757名前は開発中のものです。
2014/05/13(火) 23:05:24.12ID:RPOQlcBKわざわざ識別子を _ で始めるなんて沸いてるんじゃない?
0758名前は開発中のものです。
2014/05/13(火) 23:15:35.87ID:dsNPksM90759名前は開発中のものです。
2014/05/13(火) 23:46:55.80ID:VqkITLrDじゃあなんて書くんだ?
0760名前は開発中のものです。
2014/05/13(火) 23:51:06.96ID:dD8wYEBQ慣習的に
0761名前は開発中のものです。
2014/05/13(火) 23:59:25.01ID:VqkITLrDまじかよ
学校でこう習ったよ
何でそんな書き方教えるんだよ
まぁ開発はVSだから#pragma onceしか書かないから知らんかっただけっすけどね・・・
0762名前は開発中のものです。
2014/05/14(水) 00:50:31.19ID:qOCHvgWhつ>>663
ついでにnamespaceにぶち込んでもいいのよ
0763名前は開発中のものです。
2014/05/14(水) 00:53:50.93ID:qOCHvgWhgccでもいつの間にかpragma once使えたりするんだよな
あれ、サッサと標準仕様に盛り込めばいいのになと思うよ
0764名前は開発中のものです。
2014/05/14(水) 01:34:53.87ID:Bv7wzu+p0765名前は開発中のものです。
2014/05/14(水) 02:44:20.77ID:SkdpMvQeIDEによるかもしれん
0766名前は開発中のものです。
2014/05/14(水) 03:12:47.17ID:YePF79fhpragma once は処理系次第で最適化されてるからね。
複数のプラットフォームを想定するなら
安全策をとって両方記述するのがオススメ。
pragma once があれば効率的に処理してくれるかもしれないし、
もしpragma once を理解できない処理系でも
inlude guardは必ず処理してくれるからね。
0767名前は開発中のものです。
2014/05/14(水) 10:10:49.06ID:2wCAVOdx両方記述?寝言は寝て言えw
0768名前は開発中のものです。
2014/05/14(水) 10:25:37.80ID:vvdSHZVH自動生成したヘッダには#pragma onceと#ifndef-define-endifが
コンパイラバージョンによって自動で切り替わるように書かれてたと記憶している
その辺から考えても、両方書くのは無駄じゃない
0769名前は開発中のものです。
2014/05/14(水) 12:46:41.03ID:1doe1mvxtemplate argument 4 is invalidっていうエラーが出ます
具体的には
map<アイテムID(enum型),アイテムパラメータ(struct型)> aaaaa;
って感じです。
パラメータっていうのはその名の通りアイテムを装備するとstructのメンバの
addHPとかaddMPっていう変数の分だけ上昇する感じで、
使い方はプレイヤーはアイテムIDだけ持っておけば、あとは必要な時々で値だけ取得できるかなという感じです。
0770名前は開発中のものです。
2014/05/14(水) 13:13:18.32ID:CAIv9eLRstruct itemParam{int p1; int p2;};
itemParam param;
map<itemID, itemParam> m;
m.insert(make_pair(itemID::ID1, param));
こんな感じで動かない?
0771名前は開発中のものです。
2014/05/14(水) 13:15:39.85ID:Ocn3g8OS比較関数がないって怒られてるんじゃね
一つ目の型を enum型じゃなくて int に変更するわけにはいかないの?
0772名前は開発中のものです。
2014/05/14(水) 14:08:33.50ID:Ke2wFa7k>>733みたいな感じで配列で十分な気がするんだけど
0773名前は開発中のものです。
2014/05/14(水) 15:29:04.69ID:Ocn3g8OS0〜 イベントアイテム
10000〜 武器
20000〜 鎧
みたいに
0774名前は開発中のものです。
2014/05/14(水) 16:29:43.89ID:YPHrxvGY0775名前は開発中のものです。
2014/05/14(水) 21:01:01.54ID:qOCHvgWhそれ、>>770で動きますよ
>>772-774
仮に、実行時に追加削除更新等なし、静的、参照専用、の情報の集合
という前提条件であればstd::map(赤黒木)を使う合理性はあまりないかな
>>773のようにキー番号が連続してないのでれば、ハッシュマップの類の
ほうが向いてますね
http://research.preferred.jp/2011/07/stllike-containers/
補足:記事中のLoki::AssocVectorとほぼ同じものとしてboost::flat_map
もあります。でも、>>774の言う通り、結局vectorでおkにもできますね
ま、完成しない(動かない)事に比べればどれ選んでも瑣末な違いなので
(特に昨今のPCなら)好きなの選べばいいかと思います。身も蓋もないね
0776名前は開発中のものです。
2014/05/14(水) 23:37:56.68ID:XQ3tGmyBenumの最初を0と明示するだけで変わるんです?
0777名前は開発中のものです。
2014/05/15(木) 13:17:04.58ID:vi3A9MFw0778名前は開発中のものです。
2014/05/15(木) 17:35:02.68ID:CM4Haxt/コンパイラのバージョンとかで古いのだと駄目なのかな
0779名前は開発中のものです。
2014/05/15(木) 19:15:22.94ID:D0s76qwM0780名前は開発中のものです。
2014/05/16(金) 15:57:03.11ID:RLWXI/UA0781名前は開発中のものです。
2014/05/16(金) 23:45:36.07ID:bSd/X954ありますよ
navigation mesh pathfinding algorithm game waypoint graph search
など適当なキーワードでググるといいです。動画によるアルゴリズムの
解説も出てきますね。書籍ならAI Game Programming Wisdom 4 が
個人的にオススメです
0782名前は開発中のものです。
2014/05/17(土) 09:32:46.40ID:a+6vW56Rサンプルコードみても理解するのに時間がかかるわ
0783名前は開発中のものです。
2014/05/17(土) 10:01:46.81ID:ATk/Gp35最近の若者は読まないのか
0784名前は開発中のものです。
2014/05/17(土) 11:06:25.43ID:7UqYAydx英語が読めないのは脳が半分無いのと同じ。
それだけのこと。
0785名前は開発中のものです。
2014/05/17(土) 12:01:48.26ID:G1g9tldj0786名前は開発中のものです。
2014/05/17(土) 12:34:45.87ID:/WeYTHrmプログラムは勉強したところでコード書けないのが大半らしいな
元々作文が下手とかそういう次元ではなく理解できないとか
■ このスレッドは過去ログ倉庫に格納されています