1人でゲームが作れるように修行します。2 (487レス)
1-

159
(1): 2011/03/01(火)22:55 ID:Ux3/NF8u(1) AAS
なんか切磋琢磨な感じがいいね。
影ながら応援してます(`・ω・´)ノ
160
(1): SGGK ◆6pZCoAtaxk 2011/03/01(火)23:31 ID:huwPkO/S(1) AAS
>>159
しばらくの間は今までのプログラムの書き換え作業のような感じになるけど、
やれるところまでは頑張ってみようと思ってます!

今までは1つのファイルに複数のクラスの宣言を書いていたのを、
1クラスにつき1ファイルに変えようとしたためか、ファイルがどんどん増え、
しかもほぼ全てのメンバ変数にget、set関数を用意するので作業量が膨大になりそうな感じ・・・。
161: SGGK ◆6pZCoAtaxk 2011/03/03(木)22:36 ID:dBNi9i4V(1) AAS
class FieldControl
{
(略)
FieldData m_Field;//クラスFieldDataの型を持つオブジェクトm_Field
AnimDraw m_FieldAnim;//クラスAnimDrawの型を持つオブジェクトm_FieldAnim
(略)
};
省9
162: SGGK ◆6pZCoAtaxk 2011/03/06(日)15:46 ID:CeMkUuli(1) AAS
>>155>>160の変更を同時にやろうとして収拾がつかなくなってきた。
>>160の>1クラスにつき1ファイルに変えようとした・・・のが良くなかったかもしれない。
クラスにあるメンバ関数をcppファイルの中で定義しようとしたときに、そのクラスのヘッダファイルに無い他のクラスのメンバ変数が含まれていたら
その含まれていないクラスのヘッダファイルをインクルードしたり、または前方宣言とかいうのを書いたりするんだけど、いまいちよく理解しないでやってるからなのか
どうもその辺が原因になってるような気がする。
それと移動処理のクラスは外部変数的な感じで外部に実体を定義するんだけど、
これも思い通りに出来ていないような気がする。ちゃんと書いたつもりなのに定義が無いといった意味合いのエラーが出る。
省4
163
(1): SGGK ◆6pZCoAtaxk 2011/03/07(月)22:53 ID:A2V6WI7O(1/2) AAS
エラーメッセージが出なくなった。
問題となっていた部分はいわゆるクラス同士が相互参照していて、どちらかのクラスが宣言や定義されていないと矛盾してしまうんだけど、
先に宣言するべきクラスもその後に宣言されるクラスが宣言されていないと宣言できないという問題。
これがよくわからなくて後宣言のクラスがクラス名くらいの簡単な場合は前方宣言を使い、
後宣言のクラスの関数まで記述されているときは、前に宣言しておくべきクラスのヘッダファイルを置けばいいような感じで理解してみるものの自信無し。
結局、処理を順番に見ていきこの行では何が決まっていないと不具合になるか考えて順番に設定していき、
なんとかクリアできた。(自信無し)
省4
164: SGGK ◆6pZCoAtaxk 2011/03/07(月)23:18 ID:A2V6WI7O(2/2) AAS
今見たら、先頭に//が付いて注釈行になっていた。
画像データロードの注釈化を解除してコンパイルしたらエラー無し。
だからといって安心とは限らないけど次にいく。
選手の初期化でエラー、アサーションとかイテレータがどうのこうのというメッセージ。
明日はここからということで・・・(寝)
165
(1): 2011/03/07(月)23:44 ID:XFYVl8h4(1) AAS
>あのクラスの定義はどのファイルに書いたのか分からなくなるので

クラスビュー(ソリューションエクスプローラのタブを切り替える)を使えば、
関数、変数の宣言箇所もしくは定義箇所が引き出せるよ。
166
(1): SGGK ◆6pZCoAtaxk 2011/03/08(火)23:20 ID:pzJV24Q0(1) AAS
>>165
クラスビュー、使えました。クラスが一覧されて、ソース内の関数名をマウス右クリックメニューで定義を書いた場所に移動してくれるので便利です。
これがあれば、空のcppファイルを用意して定義先を書くような事をしなくて済みます。ありがとうございました!

今日は選手の初期化でエラーの件がまだ上手くいかず、選手22人分のデータ読み込みで
while文を使う時の条件文にファイルリードの成否判定を入れていたのを試しにはずしてみたら
エラーは出なくなったけど、選手の表示は無し。
試しに選手初期化処理直後にブレークポイントを置いて処理を停止させてからデバッガ(使い方自信無し)で見ると、
省1
167
(1): 2011/03/09(水)04:35 ID:WaGJIOge(1) AAS
>>163についてちょっと気になったので質問させて下さい
クラス同士が相互参照という事ですが、なぜそんな構造になってしまったんですか?
168
(1): SGGK ◆6pZCoAtaxk 2011/03/09(水)23:02 ID:u9XYEX3Y(1) AAS
>>167
これは書籍(14歳シリーズ)を参考に書いた処理で、
今も自信ないけど、以下の様な感じで相互参照のクラスが出来てしまってます。

選手22人分の移動関数をループから同じ書き方で呼び出しても、
異なる移動関数を選択できるようにしたいという目的があり、まず移動関数を持つ基底クラスを作成。
その基底クラスの継承クラス内で移動関数をオーバーライドしてその関数を呼び出せれば様々な移動関数を使えるはず。
継承クラスのオブジェクトのポインタを格納するための「 基底クラスのポインタ型を持つメンバ変数を選手のデータ内に持たせ 」て、
省6
169: 2011/03/09(水)23:20 ID:Vm9YGKI1(1) AAS
宣言前のクラスのポインタをメンバ変数として宣言したければ、

class CclassA{
  class CclassB *pB;
};

class CclassB{
;
};
省2
170
(2): 2011/03/10(木)00:29 ID:BwtNGrdz(1/2) AAS
クラスを前方宣言してみては?
171
(1): 2011/03/10(木)01:22 ID:B4bIYd4z(1) AAS
>>168
なるほど意図が分かり納得しました
相互参照は何だか卵が先か鶏が先かみたいで何となく嫌な感じがしたんですが、それが必要な場合もあるんですね
172: 2011/03/10(木)01:39 ID:BwtNGrdz(2/2) AAS
読み間違えていたので>170は無視してください…
173: SGGK ◆6pZCoAtaxk 2011/03/10(木)23:15 ID:m0PXWZxb(1) AAS
このようなやり方があるとは知りませんでした。
自分の技術不足のため直接的な解決には至りませんでしたが、この方法を試す過程でcppファイルもほぼ別々に分ける事が出来るようになりました。
残っているのは、移動関数クラスの継承クラスの実体を選手関係処理を集めたクラスのcppファイルの中で定義しなければ
エラーになってしまうという点だけ(一行しかない処理なので今は問題視しないつもりです。)なのでソースがすっきりしました!
ありがとうございました!
>>170、172
実は前方宣言もちょっと使っています。今回のプログラム修正は自分にはかなり複雑な内容でした…
省3
174: SGGK ◆6pZCoAtaxk 2011/03/20(日)08:59 ID:mbRpLbd0(1) AAS
東北地方太平洋沖地震発生から約一週間。
亡くなられた方々のご冥福を祈ると共に被災地の早期復旧復興を願いながら書き込み再開。

>>166
>while文を使う時の条件文にファイルリードの成否判定を入れていたのを試しにはずしてみたら
>エラーは出なくなったけど、選手の表示は無し。
>試しに選手初期化処理直後にブレークポイントを置いて処理を停止させてからデバッガ(使い方自信無し)で見ると、
>どうやら22人分のデータの読み込みがされていない様子。
省10
175: STG 2011/03/21(月)00:44 ID:TWP+xA6r(1) AAS
おお、ご無事で何より
176: SGGK ◆6pZCoAtaxk 2011/03/22(火)00:28 ID:yLNIaGwb(1) AAS
STG氏もご無事で何よりです。
災害関係で協力できる事をやりつつ、自分はプログラムをいままで通り続けていくつもりです!
177: SGGK ◆6pZCoAtaxk 2011/03/23(水)23:45 ID:0VAAbS39(1) AAS
これから初期化するということはまだデータを入れるコンテナクラス(配列みたいなもの?自信無しで使ってる)が
22人分用意されてないはずなので、
while(it!=m_FieldPlayerList.end()){データ初期値入力}
では、条件が満たされず、データ初期値入力に進まないような気がした。
試しに
if(it==m_FieldPlayerList.end()){printfDx( "リストが最後 \n") ;}

省5
178
(1): SGGK ◆6pZCoAtaxk 2011/03/24(木)22:43 ID:KuIDadu5(1) AAS
forループでどうやら問題無さそうな感じ。
選手の移動処理も最初何も表示されず悩んだが、どうやら直った感じ。
原因は、ビルボードに使うデータをロードする関数にメタセコイアのデータをロードする関数を
使おうとしていたことと、ビルボードに使うデータはBMPデータなのにそれを忘れてて
メタセコイアで作った平面にBMPデータを張り付けたメタセコイアデータをロードさせようとしていたという
2重の間違いをしてしまっていた事。

gh3d[0] = MV1LoadModel("media\\player11.mqo");  ←1回目の間違い
省5
179
(15): 2011/03/29(火)00:57 ID:W5EaQ6/R(1/2) AAS
久々にまたがんばろうかな っと思ったけど
この板すんげぇ過疎ってんのね・・・
このスレにちょいとお邪魔してもいいかな

とりあえず2DでSLGぽいのを目指して。
180
(1): SGGK ◆6pZCoAtaxk 2011/03/29(火)22:55 ID:KAewGcjL(1/2) AAS
>>179
よろしくおねがいします。
お互い頑張りましょ〜!
181: SGGK ◆6pZCoAtaxk 2011/03/29(火)23:05 ID:KAewGcjL(2/2) AAS
>>178の問題は解決。
選手の現在位置を表すベクトルに1ループあたりの移動距離分の大きさを持つベクトルを足すべきところを
間違えて、選手の移動目標となるマウスカーソルの位置を表すベクトルに足していたのが原因。

そして現在の問題点は、フィールドと選手の座標にずれがある事。
カメラの注視点を変えて向きを変えるとフィールドはそれに応じて画像が変化するけど、
何故か選手の出てくる場所はフィールドに関係なく毎回同じで変化していない感じ。
しかもマウスの指し示す位置座標もフィールドの変化と連動していないようで毎回同じ状態。
省2
182: 179 2011/03/29(火)23:53 ID:W5EaQ6/R(2/2) AAS
>>180
いつまで続くか分かりませんがヨロシクお願いします

とりあえずVC++2010Expressインストして
昔の何かのつくりかけのソースをこねくり回してます。。。
183: SGGK ◆6pZCoAtaxk 2011/03/30(水)23:05 ID:oI0LR1GW(1) AAS
このスレは次の書き込みが数か月後になっても全然OKなので自分はマイペースでやってます。
進捗が0になると突然書き込み0になったりしますので、その時はスミマセン・・・。

昨日の問題は解決。
原因は、選手の移動関数の最初の行にカメラ関係の関数、
SetCameraPositionAndTarget_UpVecY( VGet(0,680,340), VGet(0.0f,-100.0f,0.0f));
を書いてあったため、これがループの最初に書いてあったSetCameraPositionAndTarget_UpVecY(略)と重複してしまい、
両関数の注視点が異なっていたのでズレが生じた事。
184: 179 2011/03/31(木)00:56 ID:MmtwFkf5(1) AAS
こっちの場合熱が冷めるとマズイ事になる予感w
なので、その前にある程度作れれば・・・と思ったり。

こねくり回したソースはミートソースになってしまった。
食わせたらウィンドウは一応出た。
これでようやく次の作業へ…。
185
(2): SGGK ◆6pZCoAtaxk 2011/03/31(木)23:16 ID:K/Mu7f7g(1) AAS
こちらは、balldata.h を作成。
2次元でやってた時のヘッダファイルに修正を加えて作成。
メンバ変数をプライベート変数にしてget関数、set関数の宣言まで。
このような修正をボール、ゴール、レーダー関係のファイルに行わなければならず、
残りは全部で8ファイル。
186: 179 2011/04/01(金)00:43 ID:wHWoDhco(1) AAS
なんという手間のかかる作業を。。。
グローバルで適当に書いて放置してる誰かさんとはえらい違いだなぁ
ぃゃ直しますよ…後で…イツカ,タブン。

今日の作業:マウスアイコン作って動かせるようにした。
なんかsprintfとかの警告でまくってるけど気にしない。
ユニットとマップの大きさどうしよかな…。
187: SGGK ◆6pZCoAtaxk 2011/04/02(土)00:05 ID:7Uv0Gp7Y(1) AAS
ファイルを分けているのは14歳シリーズC++本の影響でたまたまこのやり方しか知らないのが理由。
このやり方だとオブジェクトを増やす毎に新しいファイルを増やさなければいけないので大変だけど頑張ってみます。

今日は進捗なし。自信ないけど土日で>>185のファイルを片づけたい。もう4月…。
188: 179 2011/04/02(土)01:41 ID:YKJBI5s3(1/2) AAS
オブジェクト毎に1ファイルというのはこちらも似たような感じなんですが、
その…GET、SET関数書くのがメンドくてそのままパブリックで書いて直接・・・
なんてダメな事をやってる所を放置したままで・・・w

以下日記:中身の何も無い板ポリユニット表示した。
ちょっとソースを綺麗にしようと思ったら
同じようなクラスが2個出来上がって汚くなった。
どうしてこうなったorz
189
(1): 2011/04/02(土)08:01 ID:0qk/4v/F(1) AAS
メンバ変数を読み書きして外で処理するのではなく、
メンバ関数にハンドルを渡して中で処理させる設計に変えるといいんじゃないかな。
190: 179 2011/04/02(土)21:31 ID:YKJBI5s3(2/2) AAS
class HUMAN_UNIT
{
public:
void Damage(int point);
  void Heal(int point);
private:
int hp;
省17
191: STG 2011/04/02(土)21:33 ID:piT73rrN(1) AAS
Get、Setはほとんど使ってないなぁ
大抵>>189の人のようにメンバ関数からのみアクセスするだけで済むようにしてる
クラスが何をしているかと再利用性と扱いと管理が楽になってよい
192: SGGK ◆6pZCoAtaxk 2011/04/03(日)00:07 ID:1D3iDnp3(1) AAS
自分は>>155からget、set関数方式への書き直しを進行中だけど、書き直しにものすごい時間がかかってます。
そして今更ながらそのように直すメリットを見つけられないような気がしてきて不安だけど、
もうほとんど書き直してしまったし、ソースも多少見やすくなったような感じはするので、このまま頑張ってみます!。

今日は、ボール関係をなんとか実装したけど、ボールはフィールド中央に表示され続けるのみとし、まだ蹴れないようにしておく。
レーダー関係は何故かレーダーが表示されないので、原因を調べているところ。
193
(1): SGGK ◆6pZCoAtaxk 2011/04/03(日)22:57 ID:FQAs1SPd(1) AAS
昨日はget、set関数方式のメリットを見つける自信が無いような事を書いてしまったけど、
ネットで検索してみると、異常な数値がセットされないようにset関数の中でチェックしたり、
get、set関数のどちらかをあえて書かない事でプライベート変数を書き込み専用、読み込み専用にすることも可能といったメリットがあるとの話。
自分の場合、今までx、y座標を別々の変数にしてたときは、(オブジェクト).x のようにしてたのが、途中でVECTOR構造体を使おうということになって、
そうなると今までのソースを(オブジェクト).x から(オブジェクト).(構造体変数).x に全部書き変えなければならなくて面倒だったので、
これが、(オブジェクト).getX() にしてあったら、getX()の中身を return x から return(構造体変数).x にするだけで済んだのでは?との思いがあって、
同じような事がそう何度も出てくるとは思わないけど、get、set関数に変えてみたという話。
省10
194
(1): 179 2011/04/04(月)00:25 ID:1C3wAcIh(1) AAS
最近、処理してから数値返したりする場面が出てきたような気がする
が、無駄な関数ががんがん増えてる気がしないでもない。
ソースを綺麗にする作業は挫折しました。。。

>>193
表示したら動かしたくなりませんか…?w
テンション上がって強引に動作実装、
→バグだらけ→バグ取りでテンションダウン→汚いソースの出来上がり
省5
195
(1): 2011/04/04(月)01:24 ID:zaeNjYQd(1) AAS
やっぱりこのスレがいちばん居心地いいなあ
月曜火曜休みなので、この連休は本気出す!
寝て起きたら、もやもやしながらゲームや2chに明け暮れずVisualStudio立ち上げて何か事を起こす!

小難しい本読んでたら、ホントに小難しすぎておもろうてやがて悲し
教科書を超えて念仏レベルで、ただ文字を追いかけてるだけ

すべてのメンバ変数privateにして無条件ゲトセトは俺も馬鹿だなと思う。
そんなことするくらいならpublicでいい
省1
196: SGGK ◆6pZCoAtaxk 2011/04/05(火)00:03 ID:S0hRYVkN(1) AAS
>>194
以前、動くところまで書いたのですが、試合前半後半で選手の向きを入れ替えたりとか
いろいろ条件を加えていくうちにソースがわかりにくくなってきた事があったので、
もしまたそうなっても、今の状態からならやり直しやすいだろうと思い、ここを区切りにして保存しておこうと思ってます。
>>195
ともに頑張りましょう!

get、set関数の件、たしかにそのとおりで、直すときは検索つかえばいいんだし、これから書く部分はpublicにしてみます。
省5
197: 2011/04/05(火)02:28 ID:t5qV24Bh(1/2) AAS
あーそういえばC++は文字列が鬼門だよな
UNICODEかSHIFT-JISかっていうのは、要はwcharかcharかって事だ
だからwchar〜charを変換する関数作っておくといいかもしれない

ちなみに俺は基本的に文字列はstringで扱って
wcharとかcharを要求する関数を使う時にstringから渡せるような作りにしてる
もうしばらく使ってないから、マクロで組んだか関数だったかは忘れたけど
198: 2011/04/05(火)02:29 ID:t5qV24Bh(2/2) AAS
あー
使ってないっていうのは、C++触ってないっていう意味ね
199
(1): SGGK ◆6pZCoAtaxk 2011/04/06(水)00:31 ID:0VHuOF2K(1) AAS
な…なるほど、変換する関数が必要となると、それは自分には難易度の高い対策方法なので、もうしばらく考えてみます。
もしかするとコンパイラがこわれてしまったかもしれない様子。
200
(1): 2011/04/06(水)01:27 ID:T5BENq16(1) AAS
>>199
MultiByteToWideChar とか WideCharToMultiByte とかいう WindowsAPI を呼べば
SJIS ←→ UNICODE 相互変換はできる
201
(2): 179 2011/04/06(水)23:50 ID:Qi29hSL7(1) AAS
VC++のデバック関数でなんか開放忘れのメモリリークを簡単に見つけられるとか
WEBに乗ってたのを試したら余裕でリークしてた。。。
直してたら今度はdeleteがエラー出す、なにこのスパイラル
本体が進まない罠
202: SGGK ◆6pZCoAtaxk 2011/04/07(木)00:03 ID:1CreScRP(1/2) AAS
やっぱり自分は永遠に初心者のようです…。

>>200 MultiByteToWideChar、調べてみました。
引数にコードページというのがあって、いきなりここから躓いてしまうレベルなので、APIの難しさがよくわかりました。
感謝します。いつかもっと勉強してAPIの領域まで入っていけるようになってみたいです。

まず、DXライブラリを疑ってみる。
DXライブラリのホームページを見ると更新履歴に何箇所かユニコードがどうのこうののバグを解決みたいな事が
書いてあったので期待して最新のバージョンにしたけど、こちらのバグは解決できなかった。
省11
203: SGGK ◆6pZCoAtaxk 2011/04/07(木)00:21 ID:1CreScRP(2/2) AAS
>>201
メモリリークは難しくてわかりませんが、バグの為に本体を進められない気持ちは自分にもよくわかります。
1日ソースから離れてもう一度見るとふと原因が分かったりすることもあるので、お互い頑張っていきましょう!
204
(1): 2011/04/07(木)02:08 ID:ATP6AwEd(1) AAS
>>201
さあ早くスマートポインタに移行するんだ
205
(1): SGGK ◆6pZCoAtaxk 2011/04/08(金)00:00 ID:WGj3ab+N(1) AAS
昨日は説明が不足していたので補足。
コンパイラがこわれたのではと思ったのは他にも理由があり、プロジェクトのプロパティ画面が出てこなかった事。
画面を出そうとすると、共通言語ランタイムに問題があるといった感じのメッセージや.NETがどうのこうのというメッセージが出てどうにもならなかったので、
コンパイラのアンインストール、インストールに踏み切った訳。
その結果、プロパティ画面を出せるようになり、14歳シリーズVC++2008編にあるやり方で再設定できるようになった。
設定は文字セットとランタイムライブラリのところ。
文字セットはマルチバイトセットを使用する。
省13
206
(1): 179 2011/04/09(土)00:10 ID:rY2c9kYC(1) AAS
>>204
スマートポインターもString系も便利そうだなぁ
次回ソース再構築するときに移行しようと思う
今はちょっとやる気がデナイ…とりあえずメモリリーク直ったぽいし(ぇ

>>205
バグ取れるとすっきりするよね
こっちもすっきりしたよ。
省3
207
(1): SGGK ◆6pZCoAtaxk 2011/04/10(日)00:36 ID:TFhm8weY(1) AAS
>>206
お互いバグとれて良かったですね。
プログラムはバグ取れなければ先に進まなくなってしまうのでいつも冷汗です。

今日はファイルをまとめてUP
前から見てる人は知ってるので大丈夫だけど、最近見た人がすごいの作ってると誤解されてると心配なので昔UPしたのもUPしてます。
間違えて変なファイルとか書き込みとかしてるかもしれない…

SGGK019 : 2Dで書いていた時の最終版
省6
208
(1): SGGK ◆6pZCoAtaxk 2011/04/10(日)23:13 ID:Opp/fMA0(1) AAS
今日は進捗無し。来週は現実の方がいろいろあり、作業が進まない予感。
とりあえずの目標は、2D座標系でやったのと同じ事が3D座標系でも出来るようにしたい。
時間、得点表示、前半、ハーフ、後半の切り替え関係などの実装を予定。
2Dの時はメインループの中にそのまま処理を書いてしまったため、メインがすごい長文になり読みにくかったので、
メインからは関数が呼ばれて、その関数の中に色々処理を書くようにしたい。
それと昨年末に読みかけだった3Dの本をもう少し読んでみたい。
今のままだと当たり判定をどうすればよいのかわからないのでそのヒントを探すのが目的。
209
(1): 179 2011/04/12(火)01:29 ID:iONqvBHy(1) AAS
動かしてみました。普通にもりもり動きましたよ〜
2D版でボール蹴ってゴールまで持っていこうと思ったけど体力切れて動けなくなったw
説明JPGは良く理解できなかったぜ…

日記の裏:
前回ユニットリストを表示させようとかなんとか言ってたけど
気がついたらWINDOWシステムを作っていた
何を言ってるか分からないと思うg(ry
省1
210
(1): SGGK ◆6pZCoAtaxk 2011/04/13(水)05:32 ID:c5UQB0E3(1) AAS
>>209
使ってみてくれてありがとうございます。
体力ゲージについては今度実装するときには修正してみます。
説明JPGについては今見直してみると説明というよりは説明図だけのような作りになってるので
また似た事をやるときがあればもう少し改善しようと思います。
関数はDXライブラリのものを使っていると注意書きしておけば良かったと今反省。

ユニットリストがマウスドラッグ出来るようになってるとか?
省8
211: 179 2011/04/14(木)01:35 ID:euSLNc/U(1) AAS
アレダデスヨネ、カメラからマウスの座標にレイ飛ばしてYが0になる場所を求めどうのこうのってヤツ。
それが良く分からなかったらから2Dに逃げた(ぉぃ
イエ、ハイ、勉強するのが嫌だっただけですゴメンナサイw

メニューバーをマウスドラッグで動かせるように〜ってヤツですね
WIN APIにその変の便利なのあるかもしれないけどWIN API良く分からないので
自前でメニューバーのボックス(唯のポリゴンの板です)とマウスポインタと当たり判定して
マウスクリック中なら移動させるってのをやろうと思った。
省3
212: SGGK ◆6pZCoAtaxk 2011/04/14(木)23:22 ID:XhLhjLQN(1/2) AAS
WINDOWは難しそうなテーマですね。
画面内のWINDOW全てが奥側から数えて何番目にあるかを記憶してその順番に描画してみるとか。
マウスでクリックしたら奥から一番最後の番号が付けられるとか。
でも複数のWINDOWが重なったらどうすればよいのかわからなくなってくる…。

今日は作業時間ほんのわずか。
2Dの最後のプログラムSGGK019(020はソース見づらいので使わない)のdrawGameMain()関数から抜き出した時間関係の行を使って、
GameTimeクラスを宣言してみた。このクラスのヘッダファイル作成作業がまだまだ途中。
省4
213: SGGK ◆6pZCoAtaxk 2011/04/14(木)23:30 ID:XhLhjLQN(2/2) AAS
最後から2行目は自分のプログラムの進捗的なものがわずかという意味であり、
ここで得たものがわずかという意味では無いので念の為。
ここではいろいろ多く学ばせてもらってますので…(汗;
読み直してあせった。言葉って難しい。
214: SGGK ◆6pZCoAtaxk 2011/04/15(金)23:10 ID:2Uog82ch(1) AAS
>>210の試合経過時間は未だ実装出来ず。
結構難しいかもしれない。
215
(1): 179 2011/04/16(土)03:34 ID:WryT+KpS(1/2) AAS
IF文とboolフラグのオンパレードになってきた…orz
とりあえずの×ボタンは簡単に実装できたけど、
消したのを表示するのは作ってない罠

経過時間は1フレーム毎の時間を求めてカウンタに足していくか引いてくか
するのがいいんじゃないカナー
gettimeとかの関数で取り出したのをそのまま使うと
ポーズとかややこしい事になりそうw
省7
216
(2): 179 2011/04/16(土)03:42 ID:WryT+KpS(2/2) AAS
あ、初期化ミス…↓こうでしたorz

//初期化
static int frame_time = 0
static inttime_know = GetNowCount() - 1;
static inttime_back = GetNowCount() - 1;

//1フレームの時間を求める処理
if(time_back != know_time;)time_back = time_know;
省2
217
(2): 2011/04/16(土)15:03 ID:aTo50Zu7(1) AAS
サッカーゲームのような、フレームごとの計算を繰り返していくタイプのプログラムの場合、
経過時間の管理は、実際の(現実世界の)経過時間ではなく、
処理したフレーム数で管理するほうが、合理的な結果が得られると思います。
218: SGGK ◆6pZCoAtaxk 2011/04/17(日)00:44 ID:mWz5D8BJ(1/2) AAS
>>215,216
ありがとうございます。
自分はいままでbackとknowに相当するコードをなぜかソース内の別々の場所に書いてあり、ソースが読みにくくなっていたけど、
これを見て3行続けて書ける事が分かりましたので、早速修正してみます。

今回はメインループ内に書かれるソースコードを減らしてみたくてこの3行に相当する機能をクラス化することに挑戦。
結果、クラス内の行数はかなり増えてしまうけどreleaseモードでは成功。
debugモードでは時間表示が正しくなく、プログラムを終了させると「ヒープが壊れていることが原因として考えられます。」のようなエラーメッセージ。
省5
219: SGGK ◆6pZCoAtaxk 2011/04/17(日)01:48 ID:mWz5D8BJ(2/2) AAS
そういえば以前にもdebugモードでダメでreleaseモードではOKというのは、
releaseモードではチェックがされていないだけなので、バグが無いという意味ではないとこのスレで教わったのを思い出す。

まだ、この前UPしたバージョンにちょっと書き足しただけなんだから、
どこかに内容的な間違いがあるはずと思い良く見てみると1か所あったので直してコンパイルしてみたら直った!
これがなんでヒープ壊れる事につながっていたのかは結局わからずだけど、
とりあえずすっきり。(寝)
220: SGGK ◆6pZCoAtaxk 2011/04/17(日)23:21 ID:VrjRr7OP(1) AAS
昨日は起きていたのがいつもより遅かったので書けなかったけど、
昨日の間違いというのは、メインループ内のゲーム処理関数の最初の行に書いた2行の順序が逆だったこと。
(間違い)
m_Time.countGameTime();
if(m_Time.m_GameTimeState==CONTINUE){m_Time.displayGameTime();}
(正解)
if(m_Time.m_GameTimeState==CONTINUE){m_Time.displayGameTime();}
省11
221
(1): 179 2011/04/18(月)02:43 ID:OTLjhXG7(1/2) AAS
AA省
222
(1): 179 2011/04/18(月)02:55 ID:OTLjhXG7(2/2) AAS
AA省
223: SGGK ◆6pZCoAtaxk 2011/04/18(月)23:13 ID:kLP7Gc7/(1) AAS
>>221,222
ループが最速で到達した場合というのは想定してなかったので勉強になりました。
ありがとうございました。

今日は次の目標を考えて終了。
次の目標は、前半、ハーフタイム、後半、試合結果表示の4つの状態遷移実装。
224
(1): SGGK ◆6pZCoAtaxk 2011/04/19(火)22:59 ID:Y5+hNJcp(1) AAS
状態遷移は以下のような感じで実装。SGGK_019のソースの頃に比べれば短くなった感じ。
でも、これに選手の前半後半の攻撃方向入れ替えや得点表示などを組み込むとなると混乱しそうな予感。

switch (m_MatchState) {
case FIRST_HALF:
if(m_Time.m_TotalGameTime >= FIRST_HALF_GAME_TIME){
m_MatchState=HALF_TIME;
m_Time.resetGameTime();
省23
225: SGGK ◆6pZCoAtaxk 2011/04/20(水)22:43 ID:rAZcxTJj(1) AAS
でも、もっと良いやり方があるはずなので、
「ゲームプログラム 状態遷移」でネット検索。
以前も挫折したけど、また少しだけ調べてみるつもり。
226: 179@SLG? 2011/04/23(土)00:02 ID:EVcHPUn1(1) AAS
うーん、基地というか資源地ぽいクラスを作ったけど
中身がユニットと変わらない罠・・・
後、マウスの座標をWINDOWSのアイコンの位置から取るようにしたら
なんかバグって座標がずれてたりしたけどなんとか直した。

手間食ったけど、やっとALT+TAB押さないと違うWINDOW行けない仕様から
普通にマウスでいけるようになった(ノ∀`)
227: SGGK ◆6pZCoAtaxk 2011/04/24(日)00:01 ID:rFlUji0A(1) AAS
こちらの進捗は調べたり休んだりを繰り返しながら実質何も進まずな状態が続きそうな予感…(汗
228: SGGK ◆6pZCoAtaxk 2011/04/25(月)00:12 ID:oJBn91bE(1) AAS
>>224でも短くなった方だけど、ゲームのメイン処理の先頭にこれを書くのは
まだ長いような感じがした。それと、ゲームの時間帯の状態を表す定数と時間のリセットの処理を一緒に書くのも
後々わかりにくくなるような気がした。今はたまたま、この定数の切り替わりが起きる条件と時間のリセットが起きる条件が一緒だから
このように書けているだけなので、将来の想定外の変更を考えて分ける事を考えた。
ゲーム時間帯の状態を表す定数を決める関数を>>224の改造で作成。
>>224から時間のリセットの行を削除しただけのもの。
calMatchState()という名前にでもしておく。
省14
229
(1): SGGK ◆6pZCoAtaxk 2011/04/29(金)23:24 ID:r0lSNY0W(1) AAS
今、自分に負け気味な感じなのでしばらくダメかもしれない予感…。
いろいろ考えがあり、次は当たり判定をクラスで実装しようとしたけれど、
本当にクラスにした方がいいのか迷う。
当たり判定の関数を持つクラスのオブジェクトを選手やボールのオブジェクトに
メンバとして持たせるつもりだけど、時間が掛かりそうな予感。(理由は1行目)
230
(1): 179 ◆SLG//siTD6 2011/05/01(日)01:09 ID:wJ8tL1/e(1) AAS
トリップてすと。
プログラムの方はサボり気味で余りすすんでないけど
とりあえずユニットから弾撃てるようにしてみた。
実験的に実装したんで中身がスカスカだけどw

>>229
当たり判定はどうするか迷うねぇ
こっちも当たり判定はかなりややこしい事になってる・・・w
231
(2): SGGK ◆6pZCoAtaxk 2011/05/02(月)00:20 ID:iqr3WKp3(1) AAS
>>230
トリップの文字にSLGが入ってる!

当たり判定のクラスは、当たり判定の範囲を示す四角の情報をメンバ変数に持ち、
そのメンバ変数を取り込んで番号を付けるメンバ関数、
当たり判定をしたいオブジェクトの四角情報を取り込み、その情報を基に判定する関数があればいいかなと考えてるけど、
まだ考えてるだけで実装が進んでない状況。ヘッダファイルだけは書いてみたけど、あまり自信無し。
232: SGGK ◆6pZCoAtaxk 2011/05/08(日)00:12 ID:K9cPT3KQ(1) AAS
試行錯誤した挙句自分には>>231を実装するのは無理と判断…。
これをやりたかった理由は、選手のアニメパターンがジャンプしたりキックしたり変化した時にそれぞれに応じた
当たり判定を呼び出せるようなしくみがこの先必要なんじゃないかと思ったからだけど、とりあえず断念。

その他
今日は、ボールをメタセコイアモデルにしていたのをあえて以前の2Dに戻した。

当たり判定は、選手の足元xz平面上に32x32の矩形があるとし、
ボールも同様に8x8の矩形があるとし、これで書いてみる予定。
省3
233
(3): SGGK ◆6pZCoAtaxk 2011/05/08(日)22:55 ID:MKRAe4w3(1) AAS
今日もあまり進まず。
当たり判定クラスの中に作った矩形当たり判定用メンバ関数は最初は、
bool CollisionCheck::isHit(FieldPlayer *, BallData *);//選手とボールの当たり判定
のようなものを考えていたけど、
bool CollisionCheck::isHit(VECTOR,int,int,VECTOR,int,int);//引数:オブジェクト座標、当たり矩形縦、横、オブジェクト座標、当たり矩形縦、横
に変更してみた。1番目の方は選手とボールにしか使えないけど、2番目のようにすれば汎用性が高いのではと考えたのが理由。

ボールをけるボタンを押したときに選手とボールのあたりが真なら、ボールが一定の速度で移動するようにするつもり。
省3
234
(2): 2011/05/08(日)23:55 ID:45vHEn5A(1/2) AAS
move += f;
x += move;
物理は基本的にこれ
力fで加速(減速)して、現在地xから速度move分だけ動く
>>233ならf=move/2とか、そんな感じで
235
(1): 2011/05/08(日)23:58 ID:45vHEn5A(2/2) AAS
すまん訂正、-moveにしないとダメだなw
f=-move/2
-moveを使うと常に移動方向と逆向きに力がかかる
236
(2): 2011/05/09(月)00:20 ID:Q5/CRoYG(1) AAS
F=ma
v+=aΔt
x+=vΔt
だろ
237
(1): 2011/05/09(月)01:17 ID:SHBGDval(1) AAS
>>236
教科書を丸写しするとそうだな
それをプログラム用に単純化したのが>>234
238
(1): 2011/05/09(月)03:49 ID:FkwWv0YK(1/2) AAS
>>231
ボールとの当たり判定をするなら矩形よりも円(球)の方が自然じゃないでしょうか。
プレイヤー側も球体の集合として定義しておき、
ボール中心とプレイヤー判定球の中心間の距離<ボール半径+プレイヤー判定球の半径
となったら、接触していることになります。
プレイヤー判定球に頭、足、手などの属性をつければ、どこに当たっているかも判定できると思います。
239
(1): 2011/05/09(月)03:54 ID:FkwWv0YK(2/2) AAS
>>233
物理的には、
・重力
・跳ね返りによるロス…地面やゴールポストとのバウンドの際、運動エネルギーの一部が消失
・ころがり摩擦抵抗…ボールが着地しているときのみ
・空気抵抗…ボールの高度に関わらず場の空気の流れ(風)との速度差に応じて加速
風が無い環境なら、極端な例だと紙風船を思い切り投げたときのようになります。
省5
1-
あと 248 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s