1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
130: SGGK ◆6pZCoAtaxk [sage] 2010/11/16(火) 00:25:11 ID:MqJY7qc7 今日はエクセルで準備的な作図を途中まで進めて終了。 書いた図が結局役に立たずに時間を無駄にする可能性もあるけどやってみる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/130
131: SGGK ◆6pZCoAtaxk [sage] 2010/12/13(月) 23:37:18 ID:X8dPGQWF む…無駄になってしまった感じ。 図は書いてみたけど、座標変換について結局あまり理解出来てない事がわかった。 悩んだ結果、恥ずかしいほどに簡単な例を用意し、それを図にして考えてみた。 オブジェクト座標からワールド座標への変換はなんとなく分かったような気がしてきた。 カメラ座標への変換(ビュー変換?)については、オブジェクト座標からワールド座標への変換と同じやり方でたぶん出来るだろうということにして省略し、 今は透視変換について考えているところ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/131
132: SGGK ◆6pZCoAtaxk [sage] 2010/12/15(水) 00:31:39 ID:KxIpLRHt やっぱりやめることにした。 わずか一日で目標変更…。 昨日の続きをやるとなれば、また数週間経過しそうでそれでいいのだろうかという不安が急に出てきた。 透視変換についても>108の頃の自分よりは理解してるつもりなので、とりあえずプログラムに戻り、それでダメならまた別の方法を考えよう。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/132
133: SGGK ◆6pZCoAtaxk [sage] 2010/12/21(火) 22:35:38 ID:Uo1lQ495 変換についてやっぱりやめないで最後まで調べてUpするに方針変更。(葛藤し過ぎ) できなければ出来たところまでをUpするつもり。 仕事じゃないんだし…、もう少し調べてみても無駄にはならないはず…。 趣味なんだからあまり無駄とか気にしないようにしよう! 今日は>>119氏のアドバイスのテストプログラムの動きの問題について考えてた。 >>120でプログラムが動いていたのは間違いないけど、画面左上に表示される マウスでポイントした点が画面中のポリゴンと交差したところの点座標や他の情報を 表示している画面の文字がどんどん重なっていき見えなくなる問題が出ていた。 自分のプログラムでは、ClsDrawScreen と ScreenFlip() の間にゲームの中身の処理を 書いてループするようにしなければならないんだけど、テストプログラム用に無駄な箇所を消したり、注釈化していたときに 間違えてClsDrawScreenの行を //ClsDrawScreen のように注釈行化してしまっていたのが原因だとわかる。 気付くのに3日以上かかった(汗;) ちなみにDXライブラリではClsDrawScreenは今でも使えるけれど、 公式のリファレンスからは削除されていて、代わりにClearDrawScreen()になっているという事をその時知った。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/133
134: SGGK ◆6pZCoAtaxk [sage] 2010/12/30(木) 01:05:04 ID:8R77hh/I 年末休みだからとはいえさすがにもう寝なくては…。 >>131のカメラ座標への変換がなんとなくやっと理解出来たような感じ。 次は透視変換に挑戦。 ライブラリが無ければ自分は何も出来ないんだから座標変換勉強しても時間の無駄じゃないのか? …という迷いはあるけど、あともう少しなのでこのまま進めてみるつもり…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/134
135: SGGK ◆6pZCoAtaxk [sage] 2010/12/30(木) 16:53:47 ID:4FkYuEBu やっと出来た。 間違いや内容不足はあるかもしれないけど、>>129の11月15日頃からの作業がやっと終了…。 1ページ目は結局使わなかった図。 2ページ目以降の8枚が勉強メモ。 ttp://ux.getuploader.com/sggk/ に オブジェクト座標系からスクリーン座標系まで勉強.zip という名前でUP。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/135
136: 名前は開発中のものです。 [sage] 2011/01/01(土) 02:34:44 ID:iSY3aMmJ P2_page001〜004を見た。 そもそも何をしたいのか読み取れなかったけれども、 最初の赤枠の大前提については、ボールの位置はワールド座標系で管理して、 必要に応じて選手目線の相対座標(オブジェクト座標)を求める方が簡単じゃないかな。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/136
137: SGGK ◆6pZCoAtaxk [sage] 2011/01/01(土) 22:31:50 ID:85GGaF9K 見てくれてありがとうございます。 自分はDXライブラリが無ければ何もプログラムできないので、 プログラムに直接影響しない事を調べてもあまり意味が無いのではないかと思う一方で 座標変換には3D入門の基本のような印象を持っていたので、 もし出来るならちょっと調べてみたいと思ったのが原因で1か月以上経過してしまいました…。 赤枠については今見ると自分もそう思います。 ボールに一番近い選手を知りたいなら選手の座標とボールの座標を フィールド基準の座標系(ワールド座標系)で表して単純に距離計算した方がよさそうです。 次にやろうとしていることは、選手のデータ作り。 ビルボードの関数で選手を表示するので、メタセコイアで板(面?)のモデルを作り テクスチャ?を貼りつける作業。2次元のデータのときには選手のアニメパターンを1枚の画像にしていたけど、 今度はそれを切り出して面のモデルに張り付けた3Dデータを何枚か用意する必要があるので、 メタセコイアの使い方を思いだしているところ。(忘れるのがものすごく早いので我ながらつらいw) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/137
138: SGGK ◆6pZCoAtaxk [sage] 2011/01/13(木) 23:49:01 ID:XHIcVK/b データはなんとか用意出来た。32ドット四方の面に選手移動アニメの一コマを貼り、 左歩行に2枚、右歩行に2枚、赤選手と青選手があるから(2+2)x2=8個のテクスチャ付き面モデルを作成。 上と下の歩行描写は省くことにした。 テクスチャの貼り方はなんとか分かったけど、今まで使っていた16コマを1枚にしていた2Dデータから 1コマずつ切り出すのに手間取った。 EDGEというソフトを使ってみたが、マウスできちんと32x32で選べない。 なんとなく「edge グリッド表示」でネット検索してみると、「ツクールの素材を作る」という名前で以下がヒット。 ttp://tanktown.web.infoseek.co.jp/tt/g_creat/g_creat/g_creat_graphic01contents.0104.htm まさにこれが知りたかった事なので作業できた。 余談だけどEDGEは2009年で更新が止まってるようで、競合も多いだろうしフリーだから モチベーションを保てずにつぶれたのかな?と思ったらなんとiPhoneに場所を移して活動してるらしい事がわかった。 才能ある人はいろいろ出来てうらやましいと思った。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/138
139: SGGK ◆6pZCoAtaxk [sage] 2011/01/17(月) 23:51:17 ID:Px2vRAS2 >>115で言った >とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。 については、どうやら出来そうな感じ。 それを表す図やテストプログラムの実行ファイルをUPしようかと思ったけど、 テストプログラムでは、試したいDXライブラリの関数をメインループにそのまま書き込んだだけなので、 今までのクラスを使ったやり方に比べ単純な例で試して上手くいったと自分が思っているだけなのかもしれないので、 今度は、今までの2Dで動かしていたプログラムの中身を少しずつ3Dのライブラリ関数に置き換えて 動作を確認していき、これでうまくいくようならUPする予定。 フィールド上の一点を指定する方法については、 >>116氏の7行目の投影変換行列の逆行列を使う方法では、 自分の力不足のため投影変換行列を作れないので断念。 座標変換、結構勉強してみたつもりだけど、さすがに投影変換行列を作るのは無理だった。 ライブラリを作れる人はすごいと思った。 >>119氏のConvScreenPosToWorldPosのサンプル内を使う案については、可能であることを>>120で確認済。 >>124氏の案についても昨日テストプログラムで試した結果、可能であることがわかった。 これでやっと>>65に取り掛かる直前の状況になってきた感じ。(感謝!) もしうっかりスルーしてしまった項目があった場合、指摘あれば対応します。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/139
140: SGGK ◆6pZCoAtaxk [sage] 2011/01/18(火) 23:06:54 ID:IAGIcn+p いざソースを書き直そうとするもののどこから手を付ければ良いのか見当がつかない。(いまさら何を言ってるのかと思われそうだけど…) 今出てる問題は、今までのプログラムにベクトルが使えるようにするために追加したクラス、関数(ベクトル同士の加算、減算とか)が 既にDXライブラリに用意されていて、当然DXライブラリの方が関数の種類も多い。 かといって今まで書いた自分のベクトル用関数もソースのあちこちに散っているので、 これをいますぐDXライブラリの関数に置き換えるのは数カ月単位の時間を要するのは確実。 とりあえず、 自分の書いたクラスVector3 ←中身はx,y,zだけ DXライブラリの構造体VECTOR ←中身は不明だけど、リファレンスを見てるとx,y,zが含まれているようだ。 の型を持つ変数同士を変換する事が出来れば、自分の書いた関数、DXライブラリの関数のどちらでも使えるのではないかと予想。 一応、以下のような感じで書いてみた。まだ書いただけなので使えるかどうかは今後の進捗次第。 //Vector3型変数をVECTOR型に変換する関数。 VECTOR Vector3_To_VECTOR(Vector3 a){ VECTOR result; result.x = a.x; result.y = a.y; result.z = a.z; return result; } //VECTOR型変数をVector3型に変換する関数。 Vector3 VECTOR_To_Vector3(VECTOR a){ Vector3 result; result.x = a.x; result.y = a.y; result.z = a.z; return result; } http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/140
141: SGGK ◆6pZCoAtaxk [sage] 2011/01/19(水) 23:11:10 ID:VXY/IGc8 念の為もうひとつ確認しておこうと思い、テストプログラムでメインループの中に Zキーを押したら選手のx座標を少しずつ増やしていく処理を追加してみた。 コンパイルして実行してみたら選手の絵がx方向に動いた。 3Dのビルボードの命令で描画した選手でもいままでの2D命令でやったとき同様に動く事が確認できた。 これで多少は安心してソースの書き直しに着手できる…と思う。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/141
142: 名前は開発中のものです。 [sage] 2011/01/20(木) 00:55:56 ID:yl8ufdN1 C#囓った俺だったら、Vecrot3にToVECTOR()関数を追加するかな Vector3 a; VECTOR b = a.ToVECTOR(); って書けるようにする 普段はVector3を使って、必要に応じてVECTORを吐き出すというイメージ VECTORからVector3への変換はしない、という仕様にした方が多分デバッグは楽になると思う http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/142
143: SGGK ◆6pZCoAtaxk [sage] 2011/01/20(木) 23:35:43 ID:hnrlJRek アドバイス、ありがとうございます。 確かに変数の型はどちらかに統一しておいた方が良さそうなので注意します。 変数はVector3に統一し、DXライブラリの関数の引数と出力の型がVECTORだった場合には、 引数に関しては、Vector3型をVECTOR型に変換した値を入力して、 VECTOR型出力に関しては、そのつど出力のx,y,z値をVector3型変数に入力すれば、>>140で言った VECTOR型変数をVector3型に変換する関数は使わなくて済むので、これでやってみます。 今日のプログラム修正は、データのロード部分のみ。少しずつ進めていく予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/143
144: SGGK ◆6pZCoAtaxk [sage] 2011/02/09(水) 21:46:30 ID:iFm8dF3D 修正が思い通りに進まないので悩む。 また以前のようにクラス図の様な図を書いて整理してからソースを修正した方がいいのだろうかと思ったが、 エクセルで書こうとするととても時間が掛かるので、クラス図を書くためのフリーソフトが無いか探してみた。 UMLdraw フリー版とシェア版があり、フリーでは印刷できないので不可。 UMLmemo フリー、印刷無し、ビットマップ出力ありだけど、書いたテキストの空白が改行マークで埋め尽くされて見づらいので不可。 astah* community 無償版、印刷あるけど大きさの調整不可、使い方が難しいので不可。 無理してastah* communityでクラス図もどきを途中まで書いてなんとなく思い始める。 「頑張ってプログラムソースを書き直した方がいいような気がする。」 この状況になるまで約2週間経過。無駄な事をしてしまったのかも・・・。 今は選手のデータ関係を修正中。 前スレ>>885で選手のデータを入力しやすくするために考えた関数を使わずに テキストファイルからデータ(初期位置座標など)を読み込めるように出来ないか考えているところ。 14歳シリーズのC(VS2008編)に使えそうな例が載ってたので参考にしてみるつもり。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/144
145: SGGK ◆6pZCoAtaxk [sage] 2011/02/11(金) 22:55:49 ID:83OV5fAw テキストファイルからの読み込みをやると言ってすぐ壁に突き当たる。 選手のポジション(FWなど)を列挙型定数にしているけど、これは読み込めないらしい。 全てのデータをテキストファイルから読み込む方法に変える必要はないと思うので、 これについては、選手のゲームスタート直後の座標だけをテキストから読み込めるようにすればいいかなと考えた。 選手のデータ関係の修正作業は途中だけど、ちょっと中止。(方針変更しすぎ・・・) クラス図を途中まで書いたときに感じた事だけど、状態を表す定数の追加やそれを使った分岐が ソースを見づらくしており、他にも理由がいろいろあって、このまま気になったところから直してコンパイルしてもたぶん地獄の修正作業になると思った。 全部直してからでないと修正途中でコンパイルしたところでバグしかでないぞと思っていたが、 最低限のファイルだけ残して、残りはとりあえずコンパイルの対象となるフォルダの外に場所を移しておき、 残したファイルだけでコンパイルし動作確認出来たら、移動したファイルをいくつか戻して修正して・・・を繰り返していけばよいのではと思った。 ということで、メインループ関係とフィールド画像関係だけ残して、 メインループ関係のソース内のフィールド以外(選手、ボールなど)に関する記述は//を付けてコメント化してコンパイルされないようにしてみる。 その状態でフィールドが画面に表示されるまでを目標にしてみる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/145
146: SGGK ◆6pZCoAtaxk [sage] 2011/02/14(月) 00:35:14 ID:hwQDV7I3 11,12,13日の3連休では無理だった。(作業時間もすごく短いので・・・) エラーの数は、20個→8個→30個と変わり、結局増えてしまった。 ゲームのループとそこから呼び出す関数はそんなに変更ないけど、 そこから先は思った以上に作り直しに近い感じなってしまった。 まだ先だけど、状態管理の定数を使った分岐処理もできればメインループの外に出したい。 一つの値があったとして、その値が自作のVector3型だったり、 ある時はDXライブラリのVECTOR型だったりするため、変換の方向を Vector3 → VECTOR のみにしてソースを直すつもりだったのが想像以上に難しそうで、 プログラムソースもほとんど書き直しに近い感じになりそうなので、 この際思い切ってVECTOR型に統一して、ベクトル関係演算用関数については、 自作ではなくDXライブラリの関数を使って書き直していくやり方にしてみる・・・に方向修正。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/146
147: SGGK ◆6pZCoAtaxk [sage] 2011/02/15(火) 23:25:56 ID:mNvxRe1H やっとフィールドの表示が出来た。 今まではソースを書きかえる時に元のソースの先頭に//を付けてコメント化して、 いざという時に前の状態に戻しやすくできるようにしていたけど、これをやめて コメントを減らしてソースを見やすくするようにした。 戻りたいときにはバックアップのソースを見ればいいのだから。 バックアップはコンパイルした時に出来るファイルを含め全部保存していたが、 考えてみるとプログラムソース(ヘッダファイルとCPPファイル)だけを保存しておけばよかった。 数年やってて気付かなかった・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/147
148: 名前は開発中のものです。 [sage] 2011/02/17(木) 01:19:58 ID:s7Rh9Whn パージョン管理ツールを使うと躊躇なく修正できるよ subversionがおすすめ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/148
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
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
184: 179 [sage] 2011/03/31(木) 00:56:17.41 ID:MmtwFkf5 こっちの場合熱が冷めるとマズイ事になる予感w なので、その前にある程度作れれば・・・と思ったり。 こねくり回したソースはミートソースになってしまった。 食わせたらウィンドウは一応出た。 これでようやく次の作業へ…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/184
185: SGGK ◆6pZCoAtaxk [sage] 2011/03/31(木) 23:16:16.15 ID:K/Mu7f7g こちらは、balldata.h を作成。 2次元でやってた時のヘッダファイルに修正を加えて作成。 メンバ変数をプライベート変数にしてget関数、set関数の宣言まで。 このような修正をボール、ゴール、レーダー関係のファイルに行わなければならず、 残りは全部で8ファイル。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/185
186: 179 [sage] 2011/04/01(金) 00:43:22.10 ID:wHWoDhco なんという手間のかかる作業を。。。 グローバルで適当に書いて放置してる誰かさんとはえらい違いだなぁ ぃゃ直しますよ…後で…イツカ,タブン。 今日の作業:マウスアイコン作って動かせるようにした。 なんかsprintfとかの警告でまくってるけど気にしない。 ユニットとマップの大きさどうしよかな…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/186
187: SGGK ◆6pZCoAtaxk [sage] 2011/04/02(土) 00:05:59.97 ID:7Uv0Gp7Y ファイルを分けているのは14歳シリーズC++本の影響でたまたまこのやり方しか知らないのが理由。 このやり方だとオブジェクトを増やす毎に新しいファイルを増やさなければいけないので大変だけど頑張ってみます。 今日は進捗なし。自信ないけど土日で>>185のファイルを片づけたい。もう4月…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/187
188: 179 [sage] 2011/04/02(土) 01:41:08.85 ID:YKJBI5s3 オブジェクト毎に1ファイルというのはこちらも似たような感じなんですが、 その…GET、SET関数書くのがメンドくてそのままパブリックで書いて直接・・・ なんてダメな事をやってる所を放置したままで・・・w 以下日記:中身の何も無い板ポリユニット表示した。 ちょっとソースを綺麗にしようと思ったら 同じようなクラスが2個出来上がって汚くなった。 どうしてこうなったorz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/188
189: 名前は開発中のものです。 [sage] 2011/04/02(土) 08:01:26.08 ID:0qk/4v/F メンバ変数を読み書きして外で処理するのではなく、 メンバ関数にハンドルを渡して中で処理させる設計に変えるといいんじゃないかな。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/189
190: 179 [sage] 2011/04/02(土) 21:31:56.76 ID:YKJBI5s3 class HUMAN_UNIT { public: void Damage(int point); void Heal(int point); private: int hp; }; void HUMAN_UNIT::Damage(int point) { hp -= point; return; } void HUMAN_UNIT::Heal(int point) { hp += point; return; } ハンドルとか良く分かって無いですが、こういう事? んでも↓みたいな事やるときにhp取り出すのがめんどくて ついpublicに置いてしまう…w HUMAN_UNIT yuusya , souryo; if(yuusya.hp > souryo.hp)souryo.Heal(); if(yuusya.hp < souryo.hp)yuusya.Heal(); http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/190
191: STG [sage] 2011/04/02(土) 21:33:37.28 ID:piT73rrN Get、Setはほとんど使ってないなぁ 大抵>>189の人のようにメンバ関数からのみアクセスするだけで済むようにしてる クラスが何をしているかと再利用性と扱いと管理が楽になってよい http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/191
192: SGGK ◆6pZCoAtaxk [sage] 2011/04/03(日) 00:07:22.30 ID:1D3iDnp3 自分は>>155からget、set関数方式への書き直しを進行中だけど、書き直しにものすごい時間がかかってます。 そして今更ながらそのように直すメリットを見つけられないような気がしてきて不安だけど、 もうほとんど書き直してしまったし、ソースも多少見やすくなったような感じはするので、このまま頑張ってみます!。 今日は、ボール関係をなんとか実装したけど、ボールはフィールド中央に表示され続けるのみとし、まだ蹴れないようにしておく。 レーダー関係は何故かレーダーが表示されないので、原因を調べているところ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/192
193: SGGK ◆6pZCoAtaxk [sage] 2011/04/03(日) 22:57:24.10 ID:FQAs1SPd 昨日はget、set関数方式のメリットを見つける自信が無いような事を書いてしまったけど、 ネットで検索してみると、異常な数値がセットされないようにset関数の中でチェックしたり、 get、set関数のどちらかをあえて書かない事でプライベート変数を書き込み専用、読み込み専用にすることも可能といったメリットがあるとの話。 自分の場合、今までx、y座標を別々の変数にしてたときは、(オブジェクト).x のようにしてたのが、途中でVECTOR構造体を使おうということになって、 そうなると今までのソースを(オブジェクト).x から(オブジェクト).(構造体変数).x に全部書き変えなければならなくて面倒だったので、 これが、(オブジェクト).getX() にしてあったら、getX()の中身を return x から return(構造体変数).x にするだけで済んだのでは?との思いがあって、 同じような事がそう何度も出てくるとは思わないけど、get、set関数に変えてみたという話。 完全に直しきれたかどうかは自信なし。 なんとか>>185の修正が終わった。 但し、ボールは中央表示のみで蹴れない。 選手もマウスカーソルを追うのみ。 画面は固定。 レーダーが最初画面に表示されなかった原因は分からなかった。 レーダーの座標はベクトルのx,yだけを変数記憶用に使おうとしていたけど、 あえてやめて、以前のx、yの2変数を用意して、そこに記憶させた。なんとなくだけど。 とりあえず、いろいろな条件分岐というか状態遷移のようなプログラムを書く直前の状態までを書いたような感じ。 ここまでを一区切りにするつもり。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/193
194: 179 [sage] 2011/04/04(月) 00:25:07.83 ID:1C3wAcIh 最近、処理してから数値返したりする場面が出てきたような気がする が、無駄な関数ががんがん増えてる気がしないでもない。 ソースを綺麗にする作業は挫折しました。。。 >>193 表示したら動かしたくなりませんか…?w テンション上がって強引に動作実装、 →バグだらけ→バグ取りでテンションダウン→汚いソースの出来上がり なんてやってしまうんですが。 日記の(ry ユニットをマウスで移動できるようにした。 マップの大きさをとりあえず適当な数値で仮定して ミニマップレーダーを作ろう…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/194
195: 名前は開発中のものです。 [sage] 2011/04/04(月) 01:24:50.54 ID:zaeNjYQd やっぱりこのスレがいちばん居心地いいなあ 月曜火曜休みなので、この連休は本気出す! 寝て起きたら、もやもやしながらゲームや2chに明け暮れずVisualStudio立ち上げて何か事を起こす! 小難しい本読んでたら、ホントに小難しすぎておもろうてやがて悲し 教科書を超えて念仏レベルで、ただ文字を追いかけてるだけ すべてのメンバ変数privateにして無条件ゲトセトは俺も馬鹿だなと思う。 そんなことするくらいならpublicでいい 利点なんて、挙動不審なときに一括検索で代入してるところ洗い出せるぐらいかなと思ってる http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/195
196: SGGK ◆6pZCoAtaxk [sage] 2011/04/05(火) 00:03:40.76 ID:S0hRYVkN >>194 以前、動くところまで書いたのですが、試合前半後半で選手の向きを入れ替えたりとか いろいろ条件を加えていくうちにソースがわかりにくくなってきた事があったので、 もしまたそうなっても、今の状態からならやり直しやすいだろうと思い、ここを区切りにして保存しておこうと思ってます。 >>195 ともに頑張りましょう! get、set関数の件、たしかにそのとおりで、直すときは検索つかえばいいんだし、これから書く部分はpublicにしてみます。 今日は、プログラムをリリースモードでコンパイルしようとしてバグ。 どうもユニコードとかの文字コードの何かが原因らしいけど、ネット検索で見つけたコンパイラの設定画面が表示されず、 しようがないので、ソース内の”文字”をTEXT(”文字”)にしたという例を真似してみたり、 他にもいろいろやってみた結果、コンパイルは通ったけど、デバッグモードでは22人の選手が表示されるのに、 リリースモードでは2人しか表示されない…。解決には時間かかる予感。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/196
197: 名前は開発中のものです。 [sage] 2011/04/05(火) 02:28:26.89 ID:t5qV24Bh あーそういえばC++は文字列が鬼門だよな UNICODEかSHIFT-JISかっていうのは、要はwcharかcharかって事だ だからwchar〜charを変換する関数作っておくといいかもしれない ちなみに俺は基本的に文字列はstringで扱って wcharとかcharを要求する関数を使う時にstringから渡せるような作りにしてる もうしばらく使ってないから、マクロで組んだか関数だったかは忘れたけど http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/197
198: 名前は開発中のものです。 [sage] 2011/04/05(火) 02:29:52.15 ID:t5qV24Bh あー 使ってないっていうのは、C++触ってないっていう意味ね http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/198
199: SGGK ◆6pZCoAtaxk [sage] 2011/04/06(水) 00:31:39.07 ID:0VHuOF2K な…なるほど、変換する関数が必要となると、それは自分には難易度の高い対策方法なので、もうしばらく考えてみます。 もしかするとコンパイラがこわれてしまったかもしれない様子。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/199
200: 名前は開発中のものです。 [sage] 2011/04/06(水) 01:27:19.44 ID:T5BENq16 >>199 MultiByteToWideChar とか WideCharToMultiByte とかいう WindowsAPI を呼べば SJIS ←→ UNICODE 相互変換はできる http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/200
201: 179 [sage] 2011/04/06(水) 23:50:41.54 ID:Qi29hSL7 VC++のデバック関数でなんか開放忘れのメモリリークを簡単に見つけられるとか WEBに乗ってたのを試したら余裕でリークしてた。。。 直してたら今度はdeleteがエラー出す、なにこのスパイラル 本体が進まない罠 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/201
202: SGGK ◆6pZCoAtaxk [sage] 2011/04/07(木) 00:03:18.39 ID:1CreScRP やっぱり自分は永遠に初心者のようです…。 >>200 MultiByteToWideChar、調べてみました。 引数にコードページというのがあって、いきなりここから躓いてしまうレベルなので、APIの難しさがよくわかりました。 感謝します。いつかもっと勉強してAPIの領域まで入っていけるようになってみたいです。 まず、DXライブラリを疑ってみる。 DXライブラリのホームページを見ると更新履歴に何箇所かユニコードがどうのこうののバグを解決みたいな事が 書いてあったので期待して最新のバージョンにしたけど、こちらのバグは解決できなかった。 文字コード関係とは別に気になっていた現象があったので、今日はこれの解決を試みる。 コンパイラの下の画面にいつごろからか、「コマンド プロンプトで 'VCExpress / resetskippkgs' と入力してください」という文字が表示されるようになって、 でも2D座標系のプログラム書いていた時にはデバッグ、リリースモードどちらもコンパイル出来ていたので気にしていなかった。 でも、もしやと思い、コマンドプロンプトで試したが、VCExpressは外部コマンドでも内部でも無い…みたいなメッセージが出てうまくいかない。 resetskippkgsを検索してもハードディスク内には無い様子。 昨日、コンパイラがこわれてしまったかもしれないと書いたのはこの事。 やむを得ず、VC++2008をアンインストールして、もう一度インストールしてみることにした。 「'VCExpress / resetskippkgs' と入力してください」のメッセージは出なくなった。 コンパイルしてみると今度は、「error LNK2001: 外部シンボル "_main" は未解決です」というエラーメッセージが出た。 これも苦しんだけど、なんとか運よく今日中にクリア出来た。 でも、今度は画面がおかしくなってしまったので、明日頑張ります。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/202
203: SGGK ◆6pZCoAtaxk [sage] 2011/04/07(木) 00:21:04.82 ID:1CreScRP >>201 メモリリークは難しくてわかりませんが、バグの為に本体を進められない気持ちは自分にもよくわかります。 1日ソースから離れてもう一度見るとふと原因が分かったりすることもあるので、お互い頑張っていきましょう! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/203
204: 名前は開発中のものです。 [sage] 2011/04/07(木) 02:08:35.75 ID:ATP6AwEd >>201 さあ早くスマートポインタに移行するんだ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/204
205: SGGK ◆6pZCoAtaxk [sage] 2011/04/08(金) 00:00:34.46 ID:WGj3ab+N 昨日は説明が不足していたので補足。 コンパイラがこわれたのではと思ったのは他にも理由があり、プロジェクトのプロパティ画面が出てこなかった事。 画面を出そうとすると、共通言語ランタイムに問題があるといった感じのメッセージや.NETがどうのこうのというメッセージが出てどうにもならなかったので、 コンパイラのアンインストール、インストールに踏み切った訳。 その結果、プロパティ画面を出せるようになり、14歳シリーズVC++2008編にあるやり方で再設定できるようになった。 設定は文字セットとランタイムライブラリのところ。 文字セットはマルチバイトセットを使用する。 ランタイムライブラリは、Debug構成ではマルチスレッドデバッグ、Release構成ではマルチスレッドにすればOK。本にやり方が書いてなかったら自分は何も出来ない…。 たぶんなんらかの原因で文字セットの設定がユニコードに変えられてしまったのがバグの原因だったのかなと思う。 そして、「error LNK2001: 外部シンボル "_main" は未解決です」が出る件。 これは、プロジェクトを作成するときに設定画面でWin32プロジェクトを選択すべきところを間違えてwin32コンソールアプリケーションを選択したから。 コンソールアプリケーションだとプログラムの始まりはmain関数である必要があるのに自分のソースはWinMainだから、それがエラーになった原因だった。 14歳シリーズの最初の方のページ見て設定したのが間違えた原因。 本の最初の方はコンソールアプリケーションで解説しようとしてたから。そのとおり設定すれば当然間違える。 最後に画面がおかしい件、おかしいというのはフィールド画面に貼ったはずのBMP画像が表示されずに灰色になってしまう状態になってしまってること。 これは、フィールドモデルをメタセコイアで表示させて運よく気が付いた。 原因はフィールドモデルに貼るテクスチャ用BMPファイルの置き場所が実際の場所と異なっていたこと。 何故そうなったかというと、コンパイラをインストールしなおしたときにゲーム作成関係フォルダをどうせだからと思って、 もう少し上の階層に移してしまったから。 これですっきり。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/205
206: 179 [sage] 2011/04/09(土) 00:10:09.82 ID:rY2c9kYC >>204 スマートポインターもString系も便利そうだなぁ 次回ソース再構築するときに移行しようと思う 今はちょっとやる気がデナイ…とりあえずメモリリーク直ったぽいし(ぇ >>205 バグ取れるとすっきりするよね こっちもすっきりしたよ。 とりあえずミニマップレーダー表示した。 次は自分の手持ちのユニットリスト作るかな−。 あれ?なんかまわりばっかり作ってる気がするな・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/206
207: SGGK ◆6pZCoAtaxk [sage] 2011/04/10(日) 00:36:34.94 ID:TFhm8weY >>206 お互いバグとれて良かったですね。 プログラムはバグ取れなければ先に進まなくなってしまうのでいつも冷汗です。 今日はファイルをまとめてUP 前から見てる人は知ってるので大丈夫だけど、最近見た人がすごいの作ってると誤解されてると心配なので昔UPしたのもUPしてます。 間違えて変なファイルとか書き込みとかしてるかもしれない… SGGK019 : 2Dで書いていた時の最終版 SGGK020 : 019に体力ゲージ付けた 3D_TEST : >>139で言っていた >それを表す図やテストプログラムの実行ファイルをUPしようかと思ったけど ←のテストプログラムの実行ファイル 3D_TEST説明 : >>139で言っていた >それを表す図やテストプログラムの実行ファイルをUPしようかと思ったけど ←のそれを表す図 SGGK024 : 今書いてる最新版、選手がマウスカーソルを追いかけるだけ 置き場所 ttp://ux.getuploader.com/sggk/ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/207
208: SGGK ◆6pZCoAtaxk [sage] 2011/04/10(日) 23:13:37.24 ID:Opp/fMA0 今日は進捗無し。来週は現実の方がいろいろあり、作業が進まない予感。 とりあえずの目標は、2D座標系でやったのと同じ事が3D座標系でも出来るようにしたい。 時間、得点表示、前半、ハーフ、後半の切り替え関係などの実装を予定。 2Dの時はメインループの中にそのまま処理を書いてしまったため、メインがすごい長文になり読みにくかったので、 メインからは関数が呼ばれて、その関数の中に色々処理を書くようにしたい。 それと昨年末に読みかけだった3Dの本をもう少し読んでみたい。 今のままだと当たり判定をどうすればよいのかわからないのでそのヒントを探すのが目的。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/208
209: 179 [sage] 2011/04/12(火) 01:29:16.27 ID:iONqvBHy 動かしてみました。普通にもりもり動きましたよ〜 2D版でボール蹴ってゴールまで持っていこうと思ったけど体力切れて動けなくなったw 説明JPGは良く理解できなかったぜ… 日記の裏: 前回ユニットリストを表示させようとかなんとか言ってたけど 気がついたらWINDOWシステムを作っていた 何を言ってるか分からないと思うg(ry なんか難しい…最初から固定表示にしとけば良かったんだ。。。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/209
210: SGGK ◆6pZCoAtaxk [sage] 2011/04/13(水) 05:32:57.65 ID:c5UQB0E3 >>209 使ってみてくれてありがとうございます。 体力ゲージについては今度実装するときには修正してみます。 説明JPGについては今見直してみると説明というよりは説明図だけのような作りになってるので また似た事をやるときがあればもう少し改善しようと思います。 関数はDXライブラリのものを使っていると注意書きしておけば良かったと今反省。 ユニットリストがマウスドラッグ出来るようになってるとか? もしかして他者製ライブラリを使わないAPIいろいろ使うWINDOWSプログラミングで組んでると想像。 >208の「2D座標系でやったのと同じ事が3D座標系でも出来るようにしたい」に向けてちょっと復習。 2Dでやってたプログラムソースは、時間、当たり判定、状態遷移の3つ(まだ他にもあるかもしれない)がソースのあちこちで絡み合いワケがわからなくなってきていたので見やすくしたい。 とりあえず、選手関係のソース見て、どんな位置関係にオブジェクトがあればお互いデータやりとり出来てるとか、関数使わないとアドレス渡せないのかとか、 そういったコピペでやり過ごしてきた部分を見直してみた。 なんとなくこういうのはノート&手書きの方が頭に入りそうな感じがしたので今回はエクセル使わないでノートに手書きでやってみた。 ほんの少しだけ頭の中が整理されたような気がしたので、まず画面に試合経過時間を表示できるようにしたい。 時間は条件分岐に使うので、時間表示を優先したのが理由。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/210
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 277 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s