1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
149: SGGK ◆6pZCoAtaxk [sage] 2011/02/18(金) 00:25:58 ID:0vaBqQnH >>148 パージョン管理ツールの存在を知りませんでしたので勉強になりました。 「subversion ゲームプログラム」で検索してみるとかなり難しいツールのようです。 難しくてもインストールして触るところまではネットで調べて試してみようと思います。 ありがとうございました。 現在の進捗は、選手関係のファイルをコンパイル対象の場所に戻して、 >145でやりかけてた選手の初期化関係を修正中。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/149
150: 名前は開発中のものです。 [sage] 2011/02/24(木) 13:41:44.03 ID:UHwXurlZ ふと、このスレのこと思い出して帰ってきたけど まだSGGK氏が頑張っててちょっと感動した http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/150
151: STG [sage] 2011/02/24(木) 23:36:06.07 ID:x+thpv+K 当分書き込んでないけど俺もいるぜー。3Dモデル全般の勉強でなかなか進まない SGGK氏がんばってるなー http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/151
152: SGGK ◆6pZCoAtaxk [sage] 2011/02/25(金) 23:02:15.17 ID:uikGAaqm >>150 思い出して戻ってきてくれる人がいる事に感動です! まだまだ頑張ります! >>151 お久しぶりです! お互い目標目指して頑張っていきましょう〜!! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/152
153: SGGK ◆6pZCoAtaxk [sage] 2011/02/27(日) 00:13:37.96 ID:wy4sbNmV subversionの件、自分には難しすぎた感じ・・・。 でも、インストールして触るところまではなんとか出来た。 subversionで検索するとapachをPCにインストールして色々と準備設定が必要らしく、 これの設定の意味が全くわからず断念しかける。apachはサーバーのプログラムらしい。 VisualSVN-Serverというのも出てきて試そうとしたらポートの設定を求める項目があり、 理解せずに設定してパソコンを壊してしまうと大変なので断念。 「subversion apadh無し」とか「subversion サーバー無し」で検索するが、自分に分かりそうなページはヒットしない。 2、3日諦めてて、ふと「subversion ローカル」でやってみた。 TortoiseSVNというのがあるらしい。これはサーバに対するクライアント?のソフトらしく(←自信無し)、 これ単体でも自分のPCでバージョン管理が出来るらしい。 とりあえずホームページを探してTortoiseSVN本体(種類がいくつかありどれにすればよいのか迷ったがなんとか見つけた。)と日本語化ツールをダウンロードしてインストールした。 あとは説明ホームページを探して、リポジトリの作成、バージョン管理したいファイルのあるフォルダをリポジトリにインポートして、実際の作業を行いたいフォルダへ リポジトリの内容をSVNチェックアウトする。 そして作業が終わったらSVNコミットするとリポジトリで変更が反映されてバージョン管理される・・・ところまで理解(自信無し)。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/153
154: SGGK ◆6pZCoAtaxk [sage] 2011/02/27(日) 20:58:42.55 ID:wy4sbNmV しかし、このようなツールに即適応出来ないとなると、自分の目標である オンライン3D対戦サッカーゲームの完成はいつになるのだろうかとふと思った。 バージョン管理ツールはサーバーに関する知識がある程度なければ操作の意味が理解できない感じ。 いまはこういうツールの存在を認識するに留め、出来る範囲で対応するしかなさそう・・・。 でも、ツールの難しさ→サーバーの勉強も早めに始める必要ありそう→急がないと10年頑張っても出来ないかもしれない という危機感につながったので、とにかく諦めないようにしたい・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/154
155: SGGK ◆6pZCoAtaxk [sage] 2011/02/27(日) 22:11:45.89 ID:wy4sbNmV ソースを修正していて思ったが、C++で書いたプログラムは保守性が良くて再利用性にも優れてるような事を どこかで聞いた記憶があるけど、そうなっている感じがしない。 たぶん自分の書き方に問題があるので、この機会に少しでも変えてみようと思った。 1.クラスのメンバ変数をpublicにして直接読み書きしていた。(変数毎に関数を書くのが大変だし、いちいち関数を使っていたら、その分処理速度が遅くなるのではと思った。) これを次のようにする。 privateのメンバ変数にして変数毎にget関数、set関数を作ってこの関数を経由してアクセスする方法にする。 そうすれば、例えば、座標系をx,y,zで管理していたのをVECTOR構造体に変更した場合でも get関数、set関数の修正で済む場合もあるので、修正に有利だし、 get関数、set関数が書かれている場所を見れば、クラスのつながりも見えやすくなりそう。 2.get関数、set関数のような変数の取得、設定しかしない関数は行数が短いので、 定義をヘッダファイルに書いていたが、定義はすべてcppファイルにまとめて見やすくする。 それが出来ない例外もあった記憶があるけど、その場合は仕方ないのでヘッダファイルに書く。 3.変数の命名規則を考え、それに従った変数名を付ける。 但し、最低限の規則にしておき、不完全でもあまり気にしないようにする。 プログラムの修正が今より少しでもやりやすくなればいいのだから。 今考えてるのは、メンバ変数は単語の区切りだけ大文字にして書く。 メンバ関数も同じだけど、最初の文字だけは小文字にする。 そして、メンバ変数の先頭には、m_ を付ける。 メンバ変数で静的変数なら、ms_ を付ける。 メンバ変数でポインタなら、mp_ を付ける。 これでやってみる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/155
156: 名前は開発中のものです。 [sage] 2011/02/28(月) 22:34:38.63 ID:g0je8oOR メンバ変数をクラス外から頻繁にアクセスしなければいけないというのなら、 クラスの設計自体を見直すべきかもしれないよ。 もちろんケースバイケースだけど。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/156
157: SGGK ◆6pZCoAtaxk [sage] 2011/02/28(月) 22:47:24.76 ID:ard6obcB 今回のプログラム修正は前回と違って、warningが出ないようにしたい。(前回あまりにもたくさん出てきたので諦めてしまった。) warning C4290: C++ の例外の指定は無視されます。関数が __declspec(nothrow) でないことのみ表示されます。 上記のwarningメッセージは、プログラムソースの例えば、void loadFiles()throw(int);と書いた行のような場所で多数出た。 エラー処理の命令でtry{この中でエラー出たら何かをthrowする。}catch(){左の()内とthrowされた値が同じ時に処理する内容をここに書く}というのがあって、 その最初の{}の中には関数を入れる事も出来て、その関数の中からエラー時にthrowすることも出来る。 つまり外に向けてthrow出来る関数を宣言するときにthrow(int);(注:この例ではthrowされる値の型はint型になる)を横に付けるらしい。 でも、VS2008では、この仕様をフォローしてないので、throwされる型は指定できない。 warning C4290: はそういう事を言っているらしい。 このwarningが出ないようにするには、 #pragma warning( disable : 4290 ) を書いてやればよいとの事。 たしかに出なくなった! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/157
158: SGGK ◆6pZCoAtaxk [sage] 2011/02/28(月) 22:54:11.50 ID:ard6obcB >>156 偶然同じ時間帯に書き込みしてた様です。指摘ありがとうございます。 今のプログラムはかなりごちゃごちゃして修正するたびに時間が掛かるようになってきたので、 もう少しクラス分けしてプログラムを見やすくしたいけど、どう分けるかは実はやってみないと分からないという状態ですが頑張ります! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/158
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 309 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s