1read 100read
2012年6月ゲ製作技術29: C/C++ゲーム製作総合スレッド Part1 (490) TOP カテ一覧 スレ一覧 2ch元 削除依頼
ファミコンのプログラム3 (969)
ゲームの作り方2〜悪霊の神々〜 (417)
Javaでゲーム作る話してるキチガイがいるよ(藁 (402)
Windowsゲームプログラミング 質問スレ (897)
ゲームプランナー (708)
みんなでシュミレーションRPGを作りましょう (680)

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


1 :12/05/20 〜 最終レス :12/07/05
ゲーム製作におけるC/C++全般に関するスレです。
元スレ
DXライブラリ 総合スレッド その12
http://toro.2ch.net/test/read.cgi/gamedev/1330000532/

2 :
>>1
スレ立て乙

3 :
プラットフォームやライブラリは限定しないの?
何話せばいいの?

4 :
>>3
限定しない
C/C++がらみの雑談とか、初心者質問とか
元スレで、DXライブラリ + C/C++でゲーム作ってる住人が、
直接DXライブラリに関係しない、STLとか、ポリモーフィズムとか、
シーン管理とか、ポインタとか、そういう話をしてて、
スレ作ろうか、という話になったのが経緯な感じ

5 :
>>1 乙カレー

6 :
タイトル、ゲーム画面、メニュー画面、ステージ選択画面…みたいに分けるのが普通なのかな
混ぜこぜしてたら分け分からん

7 :
関連のあるやつは入れ子にする

8 :
「スレ違いの話は他でやれ」とかいうのは嫌いだが、確かにこういうスレは欲しかった。

9 :
>>8
ごめん

10 :
>>1
昔は言語単体の質問はム板で質問する事が多かったが
正直今のム板は質問に対してまじめな答えが返ってくるかどうか怪しいからな

11 :
画面(シーン)管理は、StateだかStrategyだかのパターンでやってるけど
入れ子処理までは実装してなかったなー

12 :
シーン管理はXNAのサンプルをいろいろ改造して使ってる

13 :
ファミコンドラクエのメッセージコマンドが難しかったり。
村人が動き回るの止めて足ふみだけさせつつ、会話窓を動かすやつ。

14 :
>>13
歩きモーションと実際の移動量との誤差を気にしないなら、
「動かないけど足踏み」ってフラグを立てるなり、「NPC->Move()」だけを外すようにすればいい。

15 :
「あたり判定判断クラス」にキャラクターのデータへのポインタを
「あたり判定判断クラスを保持するクラス」のコンストラクタで持たせた方がいいですか?
それとも
「あたり判定判断クラス」を保持せずに、
あたり判定の要求があったら
その場でインスタンス化して要求と一緒にキャラクターのデータへのポインタをもらった方がいいですか?

16 :
一体なんの話だ?

17 :
>>1
素人だけどたまに覗かせてもらうわ
>>15
文章が下手くそすぎてわからん
「データとその処理クラスはどう保持してる?」って訊きたいのか?
なら管理クラス作って両方保持させたらいんじゃね?
2D/3Dとライブラリとジャンルは書いた方が答えもらいやすいと思うぜ

18 :
今簡単なライブラリで3Dゲーム作るならDXよりseleneのがいいかな?

19 :
Siv3D待てるんじゃないか?ロジックだけ先に作っとけ

20 :
Siv3D待てるんじゃないか?ロジックだけ先に作っとけ

21 :
>>18
3Dをモデリングするツールが決まってるなら
対応してるライブラリを選んだほうが楽だと思う
大手有償ツールならツール名指しで対応してて安心だけど
シェアウェアやフリーはフォーマットに対応してても
読み込めなかったり制限があったり多いし

22 :
ついでに参考リンク
各種ライブラリ紹介スレ2
http://toro.2ch.net/test/read.cgi/gamedev/1177886529/
【2D&3D】ゲームグラフィックス【質問OK】
http://toro.2ch.net/test/read.cgi/gamedev/1209800609/
■3Dツール総合@ゲーム製作■
http://toro.2ch.net/test/read.cgi/gamedev/1094144808/
>>19
これどんなライブラリなの?
日本人が作ってるって事で興味深いな
公式サイトらしき所を見てもほとんど情報でてないね

23 :
>>6
画面遷移でわけてる
>>8
スレのタイトルっていわばインターフェースだと思うんだよ
目的に沿った質問をしやすいタイトルのスレは、ユーザビリティ向上に必須だと思う
だから、言語別・ライブラリ別にたくさんスレ立てたほうがいいと思う
>>10
あっちはあっち、こっちはこっちだよな
ム板や色んな板と連動とろうとすると矛盾でるから
こっちで完結していいと思う
>>15
ゲームによって違うんだろうけど
if (obj1->collision(obj2->collision()))
{
  /*hit!!*/
}
って感じがわかりやすいんじゃね
collision(obj1->pos, obj2->pos)
のほうが見やすいかな

24 :
俺は、以前まではそのように画面ごとで処理を分けてたけど今はもう全部同じにしちゃった。
「タイトル画面」というキャラを作って操作して、そこでステージセレクトを選ぶと
「ステージセレクト画面」というキャラを作って、それ以外のキャラを消す、とか。
こうすると新しい画面を作りたいときに、すぐに追加できて凄く楽だった。
一般的な方法かどうかは知らん。

25 :
(どういう状況を想定してるのかがサッパリ分からない…)

26 :
シーン管理の話でしょ。

27 :
そりゃ話の流れを考えれば分かるけど

28 :
>>19
そういえばそれあったね、忘れてた
見た感じ年内には出来そうだけど…

29 :
人いるかな? クラスのメンバ構造体のポインタを引数に渡すとエラーを吐く。
何回やっても「CClass::TStructをTStructに変換できません」と起こるのよ。
助言求む。

30 :
事故解決

31 :
おめ
何がどうなってどうしたかを書いてくれると情報共有できて助かる

32 :
typedef使ったのかな

33 :
クラスのメンバ関数に同じメンバの構造体配列のポインタを渡して処理させようとしたんだけど、配列で同じメンバだったら要素を指定する値を渡せばいいだけだった。
目的は構造体(敵キャラクター)の情報をポインタで参照させてルーチンで動かすことだったんだけど、これに結構な時間を食われたわ。解決法は無理矢理だけどな
しかし、一人でゲ製はきついなあ。傍で優しく教えてくれる美少女プログラマが欲しい

34 :
よくわからんがこうしたって事?
class myData
{
};
class Hoge
{
Hoge(){}
~Hoge(){}
myData *arry[10];
void shori (int x){ arry[x]を弄る処理; };
};

35 :
まだ良く分からなくて想像妊娠だけど、typenameで根本解決するっぽい。

36 :
すいません、何度か過去に若干似たような質問をしてしまったのですがまとめたので改めて質問させてください。
クラスの配列メンバを、コンストラクタで動的に初期化(インスタンス化?)することはできるでしょうか?
コンストラクタに与えられた値の分だけの要素数を持った配列をメンバにしたいです。

37 :
配列じゃなくてvectorをメンバに持てばいい
初期化子を使ってvectorのコンストラクタに値渡せばできる
class Hoge
{
std::vector<int> m_array;
Hoge(int num) : m_array(num){}
};
つーか、vectorなら後でどうこうできるから別にこんなことしなくていんだが

38 :
>>36
動的に配列のメンバー変数のサイズを決める事はできないと思います。
擬似的な方法として以下ではどうでしょう?
1)テンプレートで要素数を指定する。
template<UINT n>class Hoge {
DATA data[n];
};
Hoge<3> hoge3;
Hoge<2> hoge2;
サイズが違うと違う型扱いになる。
Hoge<3>*で&hoge2は受け取れない(逆も)。
(2)データを配列で持たずポインターで持つ。
class Hoge {
explicit Hoge( UINT n ){ data = new DATA [n]; }
~Hoge(){ delete [] data; }
DATA* data;
};
Hoge hoge3(3);
Hoge hoge2(2);
Hoge*は&hoge2も&hoge3でも受け取れる。

39 :
>>38
コンストラクタの手前の装飾子と、UNITという定義はc++の機能なのでしょうか?
みた感じそれが1番わかりやすそうです。

40 :
>>37
stdは一個や二個使うんじゃなくて次作る時に一気に活用したいので・・・
すいません。今はめんどくさいです。

41 :
>>39
すいません、調べればわかることでしたね・・・
ただ、コンストラクタでインスタンス化してポインタに代入しても、
実体はコンストラクタのスコープの中だけで
コンストラクタが終わるとデータも無くなる・・・
ということはないのでしょうか?

42 :
ID:IjYu3jeMはmapを使いたいって言ってた人だろ?
諦めんなよ

43 :
>>41
newで確保した領域はdeleteされるまで存在しますよ。
なのでデストラクタ―が呼ばれるまで大丈夫です。
気にしているのは、ポインターdataの寿命かと思いますが、
dataはクラスのメンバ変数なのでこちらも大丈夫です。
dataの初期化はコンストラクタの初期化子でも設定できるみたいです。
こちらの方が初期化として、意味的に正しいのだと思います。
Hoge( UINT n ) : data( new DATA [n] ){}

44 :
いろいろ環境や目的もあるだろうからあれだけど
std::vectorやstd::dequeを参照で渡すほうが遙かに楽だと思うぜ
まあイテレータの宣言はダラダラ長くてめんどくさいけど

45 :
C++11ならAutoさんが活躍

46 :
>>43
とても参考になりました!
ありがとうございます!!
>>44
こっちのほうが楽じゃないですか?
自分の無知から来る疑問ですけど

47 :
絶対vectorのほうが楽。
new/deleteで神経質になる必要が無いし、配列サイズ変更も楽。
>>37でもいいし、漏れはコンストラクタで
Hoge(int num){m_array.resize(num,0);}
にする。引数の0は初期値。
あえてvector使わないときは、
せいぜい定数代わりの配列使うときくらいかな?

48 :
自分を初心者だと思ってるうちは、STLを安易に使わないほうがいい。
中級者向け。

49 :
STLこそ初心者向けだろw

50 :
>>46
ゲームだとこんな処理したくならない?
/** キャラクター一覧 */
int listUp( std::vector< MyCharacter >& v ) {
 if ( v.empty() ) {
  Message( "キャラクターがいません" );
  return 0;
 }
 int s = v.size();
 for( int i=0; i<s; ++i ) {
  Message( v[i].Name );
 }
 return v.size();
};
配列の操作を経験しとくのはいいことだと思うけど
リスク≒デバッグ負荷って面もあるしな
表記が長くなるって程度のめんどくささはあるけどね

51 :
>>49
入門書にSTLが載っているが、それを理解したら入門者じゃないんだなw
とりあえずC++入門3分の1ぐらい読んで、作り始めちゃっているようなやつが初心者なわけで。

52 :
Cの本なんてほとんど読んだ事もなくて、STL? vector? インスタンスとかメソッドとか何それ?
な状態でゲームを数本完成させた俺は初心者ですか中級者ですか。

53 :
ゲームの内容や規模によるだろ
規模が大きくなるにつれて低レベルの処理が重要になるからSTLを選ぶかどうかが重要になる
小規模なら力技で何とかなるし

54 :
STLを使うのは誰でもできるだろ。
あれと同じ機能のクラスを実装しろってんなら
中級以上じゃないと無理だが。

55 :
>>52
間違いなく初心者

56 :
>>52
他人に自分のコードを説明できなきゃ初心者
他人のコードを読めて理解できれば中級者

57 :
クラスの中に int main()

58 :
初級者中級者ぐだぐだ言ってるやつは初心者に決まってるだろw

59 :
STLは難しいとされてるのが一般的じゃないの?
そりゃプリミティブ型でpush_back()しか知らないで使うならいいけど、
コピーコンストラクタとかスマートポインタに関する
理解をもたないでやったら謎バグに嵌るのが目に見えるわ。

60 :
別に嵌っても良いんでない?
勉強になるし

61 :
スマートポインタはSTLじゃなくてboost使ったほうがいいよ。
スコープで一時的に使いたかったらunique_ptrでいいけど。

62 :
STL使うとバグに悩まされるけど、自前でlistだのmapを実装するとバグはないらしい

63 :
いやいやいや、そぉかぁ?www
昔のSTLならともかく、今はそれはないでしょーw
ゲームじゃないけど、業務にバリバリvectorとlistとsetとmap使って遭遇しなかったよ。
STLportだけど。

64 :
>>62
妄想乙w

65 :
いや、>>59の主張を言い換えただけなんだが・・・

66 :
俺にはauto_ptrなどのスマーポインタをわけわからんで使ったときの挙動と解釈した。
STL自体のバグには言及してないっしょう。たぶん。

67 :
STLなんて、std::vectorとstd::mapにstd::string出し入れするだけなら、
解説サイトの例文をコピペするだけで使えるじゃん
コピペで定番の処理ができるものについては、
初級のうちからガンガンやっといていい
自分で考えるところが出てくるようなものは、多少プログラムに慣れるまでは
迂闊に手を出さないほうがいいかもしれないけど

68 :
コピペおまじないプログラムだとこうなる
http://toro.2ch.net/test/read.cgi/gamedev/1330000532/796

69 :
仕様を理解せずに使えばどんなライブラリだってバグの温床になるよ。
問題は自分の不勉強をライブラリのせいにする無能さ加減。
原因追及は出来ないけどSTLを使うとバグるとか言う人間はその典型例。
きっちり検証した上で、ここの実装がおかしいとか指摘できるならその限りにあらずだけどね。

70 :
newしたクラスのメソッドにアクセスして
テスト用の文字出力みて満足してデリートしないでウィンドウ閉じた
(´・_・`)

71 :
イテレータとか使い出したら初心者が混乱するのは分かるが、
vectorくらいなら初心者でもぽんぽん使っていいと思う。
インスタンス管理で躓くならstl云々ではなくてC++の勉強しなおしが要る。
>>70
あー、これどうなるんだろうな。
最近のOSだと良い感じにしてくれそうな感じはするが。

72 :
Bjarne Stroustrup インタビュー
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

73 :
>>70
>ウィンドウ閉じた
プロセスを閉じればプロセスで使っていたヒープは解放される。
つまりメモリリークはプロセスの内側のこと。

74 :
碌に作ったことないけどmainクラスからtitleとかgameとか呼び出してその中でwhileループ、
クリアとかしたらmainに戻ってまた他の項目呼び出すのが簡単に出来そうだな

75 :
>>72
懐かしいパロディ

76 :
シーンクラスのコンストラクタに、シーンクラスのアドレスを保持するクラスのコンストラクタに渡すことはできるでしょうか?
また、する方法はどうしたらいいでしょうか?
↓イメージだとこんな感じです
class abc{
praivate:
 def* hoge;
public:
 abc(){
  def = new def(this*);
 }
 ~def();
};
class def{
praivate:
 abc* hogu;
public
 def(abc* tmp):hogu(tmp){}
};

77 :
class defの前方宣言をclass abcの定義前に置く

78 :
>>76
class abc{
の前に
class def;
を追加すれば出来る。

79 :
あ、順番間違えました
コンストラクタの引き数にthis*は、文法としてあってる?

80 :
*thisに直すべし

81 :
>>80
ありがとう

82 :
thisでポインタ

83 :
>>77 >>78 できるか?
引数付きコンストラクタを宣言できないからダメだと思うが。
前方宣言すべきはabcのはず。
class abc;
class def{
public:
def(abc* pABC){}
};
class abc{
public:
abc(){
abc* pThis = this;
def* pDEF = new def(pThis);
}
};

84 :
.h と .cpp 分けるのは必須だな。

85 :
初心者を装って引っかけ質問してる臭い
>>83 正しいと思うが、俺ならテンプレート使いたくなるな
template < class T >
class Class1 {
 public:
  T * c2;
  Class1( T * caller ) { c2 = caller; };
  virtual ~Class1() {};
};
class Class2 {
 public:
  Class1<Class2> * c1;
  Class2() { c1 = new Class1< Class2 >( this ); };
  virtual ~Class2() { delete c1; };
};
連絡クラスか上位クラスで連携すべきだよね

86 :
オンライン対戦ってどうやるんですか

87 :
C/C++関係ねえw
ネットワーク接続機能のあるライブラリ使う

88 :
DirectPlayとか。

89 :
VCって何年版がおすすめ?

90 :
C++11触りたいなら2010、それ以外は一長一短

91 :
オンラインはな…鯖がな…

92 :
いきなりですが2Dエフェクトってどういう作り方してますか?
数枚画像を用意して、あとはプログラム側で加工するのか、
元から透過画像とかを全部用意して表示するだけなのか…一般的なのはどれだろう

93 :
>>89
特に理由がなければ最新でいいと思うよ
古いバージョンだと色々と対応してなくて面倒
>>92
グラフィック用意して透過や加算で表示

94 :
>>92
スピード的にエフェクト画像は元から用意しとくべき。
ランタイムでは位置とスケールと透過度を変えるくらいだな。

95 :
http://marupeke296.com/TIPS_No13_ClassArrayInitialize.html
ここの一番下のplacement newを使ってクラス配列にコンストラクタを使いたいんですけど
一番下って動的に増減できないですよね?
クラスAのコンストラクタで、動的に他のクラスB配列(Bコンストラクタによる初期化機能付き)をインスタンス化するにはどうしたら良いでしょうか?
クラスBを、クラスAのコンストラクタの引数分、配列にしてメンバにしたいです。

96 :
ここの来ると
「寄ってくるな」「来るんじゃねえよ」
こないと、何故かちょっかいが来る
不思議なもんだ

97 :
ホモ本ばっかだけど
男だったんだっけか?

98 :
なんでBLなんだよ orz

99 :
>>95
動的に確保するなら、そもそもBの引数無しコンストラクタ使う必要ないんじゃない?
Aのコンストラクタの引数で配列のサイズ受け取って、
Aのコンストラクタ内でその分だけBを作ればいい
でも、メモリ管理面倒になるから普通にvector使ったほうが楽だよ

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
ノベルゲー制作ツール 『らのべえ』 (811)
       モナドセプト        (272)
Kazukiの同人3DRPG制作【第三話】 (724)
ドラえもんギガゾンビの逆襲2をつくるスレ (319)
■ゲームは終わっているのか!?■ (342)
STGを最初からみんなで作るスレ (737)
--log9.info------------------
【無線も】無線機器擬人化スレ【萌えの時代】 (520)
東京消防@多摩地域(8、9方面)専用スレッド (568)
【RJ580D】ナショナル合法CB無線総合スレPart2 (815)
【プラス】HAMSについて語るスレ【ポイント】 (471)
絶滅種モービルハム (923)
【4バンド】IC-T81を語ろう【稀少】 (621)
【目立たず】DJ-X7 Part3【使える】 (647)
ラジオ工房ってどうよ?_2 (235)
デジタル簡易無線 part3 (832)
[神奈川]皮をかむっちょるひ○し[茅ヶ崎] (288)
■■■■■■*A1OJJ■■■■■■ (613)
【飛ばない】ブロードバンドアンテナ【聞こえない】 (823)
【VertexStandard】 VX-8(D/G) 【part6】 (668)
★本格ハンディートランシーバーを語れや★ (898)
クラニシ廃業 (556)
{倒産}ラジオクラ○○の被害者を救う会{金返せ} (451)
--log55.com------------------
妊娠・出産・育児マンガ&エッセイを語ろうPart32
【私立】幼稚園、小学校受験 ★21【国立】
【満3歳以上】園児の発達障害10【診察相談済】
【やる気スイッチ】意欲のない中高生以上の親のスレ【どこ?】
■あえて公立トップ高校を目指す21■
里帰りしない人(里も来ない人)22
【二人目以降】不妊治療の愚痴を言うスレ ★6
【雛人形】子供の節句総合スレ13【五月人形】