1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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ファイルの中で定義しなければ エラーになってしまうという点だけ(一行しかない処理なので今は問題視しないつもりです。)なのでソースがすっきりしました! ありがとうございました! >&
gt;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\\player
11.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.He
al(); 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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 290 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s