1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
159: 名前は開発中のものです。 [sage] 2011/03/01(火) 22:55:52.67 ID:Ux3/NF8u なんか切磋琢磨な感じがいいね。 影ながら応援してます(`・ω・´)ノ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/159
160: SGGK ◆6pZCoAtaxk [sage] 2011/03/01(火) 23:31:52.52 ID:huwPkO/S >>159 しばらくの間は今までのプログラムの書き換え作業のような感じになるけど、 やれるところまでは頑張ってみようと思ってます! 今までは1つのファイルに複数のクラスの宣言を書いていたのを、 1クラスにつき1ファイルに変えようとしたためか、ファイルがどんどん増え、 しかもほぼ全てのメンバ変数にget、set関数を用意するので作業量が膨大になりそうな感じ・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/160
161: SGGK ◆6pZCoAtaxk [sage] 2011/03/03(木) 22:36:53.71 ID:dBNi9i4V class FieldControl { (略) FieldData m_Field;//クラスFieldDataの型を持つオブジェクトm_Field AnimDraw m_FieldAnim;//クラスAnimDrawの型を持つオブジェクトm_FieldAnim (略) }; のようなクラスがあり、m_Fieldの中にm_FieldAnimのアドレスを記憶しているポインタmp_Animがあり、 m_FieldAnimの中にはdraw()関数があるとしたら、 m_FieldAnim.draw();//方法1 m_Field.mp_Anim->draw();//方法2 は同じ事をしているらしい。 方法2のように書くべきところを方法1のような書き方をしていたのがわかって気になったので自分用メモ。 >>155の書き換えを進めていてフィールド表示は出来た。 今は選手関係の処理に着手中だけど、ここからは選手人数分のループや選手の移動関数などが絡んできて時間がかかりそうな予感。 一日の作業時間はとても短いので・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/161
162: SGGK ◆6pZCoAtaxk [sage] 2011/03/06(日) 15:46:57.88 ID:CeMkUuli >>155や>>160の変更を同時にやろうとして収拾がつかなくなってきた。 >>160の>1クラスにつき1ファイルに変えようとした・・・のが良くなかったかもしれない。 クラスにあるメンバ関数をcppファイルの中で定義しようとしたときに、そのクラスのヘッダファイルに無い他のクラスのメンバ変数が含まれていたら その含まれていないクラスのヘッダファイルをインクルードしたり、または前方宣言とかいうのを書いたりするんだけど、いまいちよく理解しないでやってるからなのか どうもその辺が原因になってるような気がする。 それと移動処理のクラスは外部変数的な感じで外部に実体を定義するんだけど、 これも思い通りに出来ていないような気がする。ちゃんと書いたつもりなのに定義が無いといった意味合いのエラーが出る。 しかもアサーションがどうのこうのというエラーまで出てしまった(たしか1年ほど前にも似たエラーが出て大変だった)ので、 ここはいったん選手関係のファイルをひっこめて、もう一度フィールドの表示をさせるところまで戻して、 次に選手の画像データロード、選手の初期値テキストファイル読み込みの部分だけをコンパイル対象に戻して 動作が確認できるまでを頑張ってみる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/162
163: SGGK ◆6pZCoAtaxk [sage] 2011/03/07(月) 22:53:38.07 ID:A2V6WI7O エラーメッセージが出なくなった。 問題となっていた部分はいわゆるクラス同士が相互参照していて、どちらかのクラスが宣言や定義されていないと矛盾してしまうんだけど、 先に宣言するべきクラスもその後に宣言されるクラスが宣言されていないと宣言できないという問題。 これがよくわからなくて後宣言のクラスがクラス名くらいの簡単な場合は前方宣言を使い、 後宣言のクラスの関数まで記述されているときは、前に宣言しておくべきクラスのヘッダファイルを置けばいいような感じで理解してみるものの自信無し。 結局、処理を順番に見ていきこの行では何が決まっていないと不具合になるか考えて順番に設定していき、 なんとかクリアできた。(自信無し) そのかわり、cppファイルは両方のクラスを一緒にせざるを得なかった。 でもこれでは将来、あのクラスの定義はどのファイルに書いたのか分からなくなるので、 空のcppファイルをつくり、その中に注釈行で、ここに書くべきcppファイルの中身はどこのcppファイルに書かれたのかを記述しておいた。 それにしてもエラーが出ないのも変なので、メインループの選手画像データロード、選手の初期化あたりを調べてみる予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/163
164: SGGK ◆6pZCoAtaxk [sage] 2011/03/07(月) 23:18:19.01 ID:A2V6WI7O 今見たら、先頭に//が付いて注釈行になっていた。 画像データロードの注釈化を解除してコンパイルしたらエラー無し。 だからといって安心とは限らないけど次にいく。 選手の初期化でエラー、アサーションとかイテレータがどうのこうのというメッセージ。 明日はここからということで・・・(寝) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/164
165: 名前は開発中のものです。 [sage] 2011/03/07(月) 23:44:02.03 ID:XFYVl8h4 >あのクラスの定義はどのファイルに書いたのか分からなくなるので クラスビュー(ソリューションエクスプローラのタブを切り替える)を使えば、 関数、変数の宣言箇所もしくは定義箇所が引き出せるよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/165
166: SGGK ◆6pZCoAtaxk [sage] 2011/03/08(火) 23:20:28.47 ID:pzJV24Q0 >>165 クラスビュー、使えました。クラスが一覧されて、ソース内の関数名をマウス右クリックメニューで定義を書いた場所に移動してくれるので便利です。 これがあれば、空のcppファイルを用意して定義先を書くような事をしなくて済みます。ありがとうございました! 今日は選手の初期化でエラーの件がまだ上手くいかず、選手22人分のデータ読み込みで while文を使う時の条件文にファイルリードの成否判定を入れていたのを試しにはずしてみたら エラーは出なくなったけど、選手の表示は無し。 試しに選手初期化処理直後にブレークポイントを置いて処理を停止させてからデバッガ(使い方自信無し)で見ると、 どうやら22人分のデータの読み込みがされていない様子。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/166
167: 名前は開発中のものです。 [sage] 2011/03/09(水) 04:35:12.92 ID:WaGJIOge >>163についてちょっと気になったので質問させて下さい クラス同士が相互参照という事ですが、なぜそんな構造になってしまったんですか? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/167
168: SGGK ◆6pZCoAtaxk [sage] 2011/03/09(水) 23:02:50.72 ID:u9XYEX3Y >>167 これは書籍(14歳シリーズ)を参考に書いた処理で、 今も自信ないけど、以下の様な感じで相互参照のクラスが出来てしまってます。 選手22人分の移動関数をループから同じ書き方で呼び出しても、 異なる移動関数を選択できるようにしたいという目的があり、まず移動関数を持つ基底クラスを作成。 その基底クラスの継承クラス内で移動関数をオーバーライドしてその関数を呼び出せれば様々な移動関数を使えるはず。 継承クラスのオブジェクトのポインタを格納するための「 基底クラスのポインタ型を持つメンバ変数を選手のデータ内に持たせ 」て、 そのポインタから移動関数を呼べば良い。 選手のオブジェクトからそのポインタを使って移動関数を呼ぶ時に選手のアドレス(thisポインタ?)を引数に持たせてやり、「 移動関数はそのthisポインタから選手の座標などのデータを呼び出し、更新する」。 上記の「」のところで、 選手のクラスは移動関数のクラスのポインタをデータに持つためには、選手のクラスが宣言される前に移動関数のクラスが定義されてなくてはならないし、 移動関数のクラスが選手のオブジェクトのポインタを通して選手のデータを使うには、移動関数の宣言より先に、選手のクラスが宣言されていないと選手の座標データを使った関数の中身が書けない。 ・・・というのが相互参照になった理由です。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/168
169: 名前は開発中のものです。 [sage] 2011/03/09(水) 23:20:56.09 ID:Vm9YGKI1 宣言前のクラスのポインタをメンバ変数として宣言したければ、 class CclassA{ class CclassB *pB; }; class CclassB{ ; }; というように、クラス名の前に class と書きます。 ポインタにしか通用しませんが。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/169
170: 名前は開発中のものです。 [sage] 2011/03/10(木) 00:29:29.25 ID:BwtNGrdz クラスを前方宣言してみては? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/170
171: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:22:06.48 ID:B4bIYd4z >>168 なるほど意図が分かり納得しました 相互参照は何だか卵が先か鶏が先かみたいで何となく嫌な感じがしたんですが、それが必要な場合もあるんですね http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/171
172: 名前は開発中のものです。 [sage] 2011/03/10(木) 01:39:30.03 ID:BwtNGrdz 読み間違えていたので>170は無視してください… http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/172
173: SGGK ◆6pZCoAtaxk [sage] 2011/03/10(木) 23:15:46.97 ID:m0PXWZxb このようなやり方があるとは知りませんでした。 自分の技術不足のため直接的な解決には至りませんでしたが、この方法を試す過程でcppファイルもほぼ別々に分ける事が出来るようになりました。 残っているのは、移動関数クラスの継承クラスの実体を選手関係処理を集めたクラスのcppファイルの中で定義しなければ エラーになってしまうという点だけ(一行しかない処理なので今は問題視しないつもりです。)なのでソースがすっきりしました! ありがとうございました! >>170、172 実は前方宣言もちょっと使っています。今回のプログラム修正は自分にはかなり複雑な内容でした… >>171 ソースを読もうとすると複数のファイルを行ったり来たりしなくてはならないややこしい構造なのでかなり苦労しました。 これからも頑張ります! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/173
174: SGGK ◆6pZCoAtaxk [sage] 2011/03/20(日) 08:59:51.85 ID:mbRpLbd0 東北地方太平洋沖地震発生から約一週間。 亡くなられた方々のご冥福を祈ると共に被災地の早期復旧復興を願いながら書き込み再開。 >>166の >while文を使う時の条件文にファイルリードの成否判定を入れていたのを試しにはずしてみたら >エラーは出なくなったけど、選手の表示は無し。 >試しに選手初期化処理直後にブレークポイントを置いて処理を停止させてからデバッガ(使い方自信無し)で見ると、 >どうやら22人分のデータの読み込みがされていない様子。 これは、 while(it!=m_FieldPlayerList.end() || FileRead_eof(f)==0){データ初期値入力} を while(it!=m_FieldPlayerList.end()){データ初期値入力} にとりあえず変えてみたという意味。 データ初期値入力は、 (*it).setpAnim(&m_FieldPlayerAnim); のようなやりかたで入力しようとした。 itはイテレータの事で、上記のwhileが真の間は、1ループ毎にitが1ずつ増えて このitが選手22人分のデータを指し示すような感じだけど上手くいかなかった。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/174
175: STG [sage] 2011/03/21(月) 00:44:40.91 ID:TWP+xA6r おお、ご無事で何より http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/175
176: SGGK ◆6pZCoAtaxk [sage] 2011/03/22(火) 00:28:58.94 ID:yLNIaGwb STG氏もご無事で何よりです。 災害関係で協力できる事をやりつつ、自分はプログラムをいままで通り続けていくつもりです! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/176
177: SGGK ◆6pZCoAtaxk [sage] 2011/03/23(水) 23:45:47.51 ID:0VAAbS39 これから初期化するということはまだデータを入れるコンテナクラス(配列みたいなもの?自信無しで使ってる)が 22人分用意されてないはずなので、 while(it!=m_FieldPlayerList.end()){データ初期値入力} では、条件が満たされず、データ初期値入力に進まないような気がした。 試しに if(it==m_FieldPlayerList.end()){printfDx( "リストが最後 \n") ;} を while文より前の行に入れてみると、画面に「リストが最後」と表示されたので、 そもそもデータが入力されていないとこまでわかり、ふと以前のバックアップを見ると for文のループ22回指定で入力していた。 間違えた方のやり方は既にデータが22人分あり、選手移動処理するときに 22回繰り返す場合に使うやり方だった。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/177
178: SGGK ◆6pZCoAtaxk [sage] 2011/03/24(木) 22:43:11.16 ID:KuIDadu5 forループでどうやら問題無さそうな感じ。 選手の移動処理も最初何も表示されず悩んだが、どうやら直った感じ。 原因は、ビルボードに使うデータをロードする関数にメタセコイアのデータをロードする関数を 使おうとしていたことと、ビルボードに使うデータはBMPデータなのにそれを忘れてて メタセコイアで作った平面にBMPデータを張り付けたメタセコイアデータをロードさせようとしていたという 2重の間違いをしてしまっていた事。 gh3d[0] = MV1LoadModel("media\\player11.mqo"); ←1回目の間違い gh3d[0] = LoadGraph("media\\player11.mqo"); ←2回目の間違い gh3d[0] = LoadGraph("media\\player11.bmp"); ←正解 現在は、選手画像がマウスカーソルに付いたまま描画される状態なので、 なぜフィールドの初期位置に散らばった状態からマウスカーソルを 追いかける動きにならないのか調べているところ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/178
179: 名前は開発中のものです。 [sage] 2011/03/29(火) 00:57:27.76 ID:W5EaQ6/R 久々にまたがんばろうかな っと思ったけど この板すんげぇ過疎ってんのね・・・ このスレにちょいとお邪魔してもいいかな とりあえず2DでSLGぽいのを目指して。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/179
180: SGGK ◆6pZCoAtaxk [sage] 2011/03/29(火) 22:55:26.00 ID:KAewGcjL >>179 よろしくおねがいします。 お互い頑張りましょ〜! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/180
181: SGGK ◆6pZCoAtaxk [sage] 2011/03/29(火) 23:05:44.67 ID:KAewGcjL >>178の問題は解決。 選手の現在位置を表すベクトルに1ループあたりの移動距離分の大きさを持つベクトルを足すべきところを 間違えて、選手の移動目標となるマウスカーソルの位置を表すベクトルに足していたのが原因。 そして現在の問題点は、フィールドと選手の座標にずれがある事。 カメラの注視点を変えて向きを変えるとフィールドはそれに応じて画像が変化するけど、 何故か選手の出てくる場所はフィールドに関係なく毎回同じで変化していない感じ。 しかもマウスの指し示す位置座標もフィールドの変化と連動していないようで毎回同じ状態。 カメラの関数はループ処理の最初に書いてあるのでそのあと描画されるものはすべて カメラの状態に合わせて描画されると思っていたけど、何か勘違いをしている感じ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/181
182: 179 [sage] 2011/03/29(火) 23:53:00.41 ID:W5EaQ6/R >>180 いつまで続くか分かりませんがヨロシクお願いします とりあえずVC++2010Expressインストして 昔の何かのつくりかけのソースをこねくり回してます。。。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/182
183: SGGK ◆6pZCoAtaxk [sage] 2011/03/30(水) 23:05:43.60 ID:oI0LR1GW このスレは次の書き込みが数か月後になっても全然OKなので自分はマイペースでやってます。 進捗が0になると突然書き込み0になったりしますので、その時はスミマセン・・・。 昨日の問題は解決。 原因は、選手の移動関数の最初の行にカメラ関係の関数、 SetCameraPositionAndTarget_UpVecY( VGet(0,680,340), VGet(0.0f,-100.0f,0.0f)); を書いてあったため、これがループの最初に書いてあったSetCameraPositionAndTarget_UpVecY(略)と重複してしまい、 両関数の注視点が異なっていたのでズレが生じた事。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/183
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 304 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s