09/03/03 22:56:23 vs8eMq8g
>>595
ありがとうございます~。デバッグは機能が色々ある様なので少しずつ覚えていこうと思います。
キー入力の状態については、実は自分はまだよく理解できぬままプログラムやってます・・・orz
>>596
かなり順調にいっててうらやましいですー。
>>597
回転行列を当たり判定に使う・・・、む・・・難しそうな世界。
ボール動かないバグの原因なんとなく見えた。
フラグ用変数のスコープが違ってて名前は同じでもアドレスが異なっている別々の変数を
それぞれの関数内で操作してるのではないかと思ったけど、どうもそうではなさそう。
ボールが選手に当たっている状態を表すフラグの立て方に原因があったと思われる。
これを説明するには一週間分の書き込みスペースを使ってしまいそうな感じ。
599:436
09/03/04 01:23:23 +kKOKlkp
フルスクリーンから復帰すると古い方の拡大率になってたのに気付いて修正
マウスで窓枠ドラッグした時の拡大率を取得出来る様にした
今になってもっとシンプルなインタフェイスを思いつく・・・あ~全体的に作り直したい
>>595
勉強になります
>>598
一つの結果が出るまでのスパンというか下ごしらえが段々長く大変になってきました;
600:せいれい
09/03/04 21:55:43 1TDttkKc
もうちょっと調整したらゲームシステム部分の作成に移れそう
そろそろ背景やファイル入出力もいじらねば(・∀・)
601:SGGK ◆6pZCoAtaxk
09/03/04 22:20:50 M0lqZAHx
こちらは、まだまだバグ取り中~。
昨日言っていたバグの原因は、プログラムをかなり略して書くと、
メインループ(){
選手.move();//選手の移動処理
ボール.move();//ボールの移動処理
ゴール.move();//ゴールの移動?処理
当たり判定();//それぞれのオブジェクトの当たり判定をここでまとめて行う
}
・・・となっていて、当たり判定関数の中では、
while(最後の選手まで繰り返す){
if( 選手とボールが当たっているか? ){
a->atari=true;// 選手のメンバ変数atariのフラグをONする。
b->atari=true;// ボールのメンバ変数atariのフラグをONする。
}
else{
a->atari=false;// 選手のメンバ変数atariのフラグをOFFする。
b->atari=false;// ボールのメンバ変数atariのフラグをOFFする。
}
ボールを蹴る処理は、メインループの「ボール.move();//ボールの移動処理」の中にあって、蹴れる条件は、
(Xキーが押されている)&&(ボールのatariフラグがONである)
なのに対し、今のプログラムでは、自分がコントロールできるのは一番目の選手だけなので、
選手をボールに接触させてatariフラグをONにしても当たり判定関数のwhile内で最後の選手まで
判定するので、最後の選手はボールに触れてないから、b->atari=falseになって、ボールのatariフラグは結局最後にはOFFにされてしまう。
その状態でメインループのボール移動関数に戻るので、いつまでたってもボールを蹴れる条件が成立しない・・・orz
602:名前は開発中のものです。
09/03/04 22:40:39 /ZV4wLD2
何故else条件でボールのフラグを落とすのか、40文字以内で説明せよ(5点)
フラグ落とすのは選手だけでいいと思うんだが。そもそもボールのフラグもいらない。
ボール持ってる選手しか蹴る(移動の初期値を与える)ことができないのなら
ボール支配できたときにボール蹴る関数にでも飛ばせばいいと思うが、どうか。
603:436
09/03/05 00:50:31 LR5dYdvr
ああああせりました;
窓枠ドラッグ時の拡大率を取得する為SetAlwaysRunFlag();をON-OFF多用してたら
なぜかSetAlwaysRunFlag();をOFFにするとデバッグに行く途中で止まり、
ON状態の一文を入れないと動かなくなり、とうとうそれを入れても入れなくても動かなくなり・・・
VCリインストールしたら今度はヘッダファイルを読まなくなり(パスは渡してるのに)、
レジストリからVC関連を全消去してリインストール、さっきようやくまともに動いたっぽい
SetAlwaysRunFlag();を乱用乱発してたのが悪かったのかなぁ
604:SGGK ◆6pZCoAtaxk
09/03/05 23:27:28 hIYt1MGi
>>602
else条件でボールのフラグを落とすのは、(Xキー押し)&&(ボール接触フラグON)がボールを蹴れる条件なので、
選手がボールから離れている(else)時には、ボール接触フラグをOFFにする必要があった為。
今のプログラムでは、ボールに接触してるので蹴ろうとしても、ボールに接触していない選手がいたら、elseが成立してしまい
ボールの接触フラグをOFFされてしまうという問題がありました・・・。
確かに今思うとボールのフラグは必要無かった様です。
選手全てにボールに接触してるかどうかを表すフラグを持たせておいたのは、同時に複数の選手がボールを蹴る様な場合を考えてました。
同時蹴りの時にボールに接触してる複数の選手から一人を選ぶ仕組みが必要かと思いながら実装の案はまだ何もなし・・・。
バグの修正はもう少し検討中~、今のボール移動関数は、選手のデータを引数に持っていないので、選手のフラグ変数を使えないのデス・・・orz
>>603
レジストリとか全然わからないので、自分もその関数には注意しておきます~。
605:名前は開発中のものです。
09/03/06 00:01:32 zNsEmWk0
>同時に複数の選手がボールを蹴る様な場合を考えてました。
それは「蹴った」時の処理であって、
接触したかどうか判定する時点では関係ないんじゃないかな。
同時蹴りの優先度は確かに悩むところだね。
606:436
09/03/06 00:30:05 SvQUccHR
拡大率取得する関数がすでにあったorz
拡大率変えるとSetMousePointが元のウィンドウの大きさ基準で動く為、
元の解像度を超える座標を指定出来ないorz
ので、新たに思い付いたインタフェース案はモロにその影響を受ける為、
すっぱりあきらめられたw
今は構造をもっとスッキリ出来ないかイジクリ中
>>604
今後は念の為C:とソースのバックアップを取る様にしました;
607:SGGK ◆6pZCoAtaxk
09/03/06 23:39:57 Fo+vpfkW
>それは「蹴った」時の処理であって、
>接触したかどうか判定する時点では関係ないんじゃないかな。
た・・・確かにそうです。
メインループ内での処理を移動、当たり判定に分けておいて、当たり判定内で
いろいろな組み合わせの当たり判定をあらかじめ行い、その結果を各種フラグ変数に記憶させておいて
移動関数でそのフラグ変数を参照するようにすれば、移動関数から当たり判定関数を呼ばなくても済み、
プログラムが整理できそうな気がしたけど、なかなか上手く行っていないです・・・orz
>>606
そういえば自分もバックアップ全然取っていないです。もしもハードディスクがクラッシュしたら・・・。(汗;)
やっと>539のバグがなんとか取れました。(もっと日数かかるかと思ってた)
このスレでやってたおかげでVC++2008EEに移れた影響も大きかった。
ボール移動関数に選手のオブジェクトのアドレスを渡して、選手のメンバ変数の中から
ボールとの当たり判定用フラグにアクセスして、(Xキー押し)&&(ボールとの当たり判定用フラグON)が真なら
ボール移動処理に移る様にするとOK!