1 名前:名無しさん@お腹いっぱい。 mailto: [01/11/21 04:33 ID:???] がんばりましょう。
568 名前: ◆Fp.xSEIREI mailto:sage [2009/02/24(火) 11:51:58 ID:5+X9BMJV] うぉぉ(・∀・)こんなに難解なのか… もうちょっとがんばってみる ともかくd
569 名前:名前は開発中のものです。 mailto:sage [2009/02/24(火) 14:01:41 ID:cPcauKWt] >>568 あー、いや、そんなむずいもんじゃないにょ。 多分俺の書き方が悪い。ぶっちゃけズゴックって言いたかっただけ。 構造体に限らず、変数はメモリのどっか特定のアドレスに格納される。 変数のアドレスは変数名の前に&付けると取り出せて、ポインタ変数へ保存できる。 int *pi;でint型のポインタ変数piが作れるように、S *ps;でS型のポインタ変数psが作れる。 int ai[num];でint型num個の配列aiが作れるように、 S as[num];でS型num個の配列asが作れる。 構造体のメンバにポインタ経由でアクセスする時は「.」じゃなく「->」。 構造体配列sのi番目の要素のメンバにアクセスする時はs[i].member。 >>567 のtypedefのとこは純C用の書き方。C++ならふつーにstruct S{char the_red_comet};でいい。 ちなみにfunc2(S ps[], int num)のとこは実際はfunc2(S *ps, int num)と同じだったりする。 配列にsizeof使うと配列全体のサイズが取れるけど、関数に渡した場合その中では 配列じゃなくポインタが正体なんで、sizeof使ってもポインタのサイズしか取れないのに注意。 配列の名前は単体で使うと先頭要素のアドレスを指すポインタになるんで、 呼ぶ時にfunc2(&as[0], sizeof as/sizeof as[0])としても同じ。 (関数に配列渡してる訳じゃなく、ポインタを渡してる) うん、確かに自分で言ってて難解な気がしてきた。俺は説明が下手だ。 このへんは構造体の話というより配列とポインタの話やね。 細かいこと気にせず動きゃいーんだの精神でがんがれ!
570 名前:名前は開発中のものです。 mailto:sage [2009/02/24(火) 14:16:53 ID:cPcauKWt] う、よく見返したら'\0'まで出力してんな。恥ずっ。
571 名前: ◆Fp.xSEIREI mailto:sage [2009/02/24(火) 14:28:51 ID:5+X9BMJV] >>569 MSとかズゴックがCの関数か何かかと思った俺は うちのソース風にやりたいこと書くと 〜〜ヘッダー〜〜〜〜〜〜 typedef struct{ char the_red_comet; } S; void func1(ぽいんたっぽい引数){うんたら}; 〜〜〜〜〜〜〜〜〜〜〜〜 〜〜別のソースファイル〜〜 extern void func1(ぽいんたっぽい引数); extern S MOBILE_SUIT[100]; void func2{ int i; for(i=0;i<100;i++){ funk1 (ここにMOBILE_SUIT[i]のthe_red_cometのポインタをあげたい); } } こんな感じ。ちなみにmainとかは行数の都合により省略。mainは別のファイルにあるよっ あとDXライブラリだからstdio.hは入れられないんだ
572 名前:名前は開発中のものです。 mailto:sage [2009/02/24(火) 15:27:17 ID:cPcauKWt] >>571 ↓こんな感じ。 void func1(char *p) { /* 何かの処理 */ } void func2(void) { int i; for (i=0; i<100; i++) { func1( &(MOBILE_SUIT[i].the_red_comet) ); } } アドレス取得の「&」よりメンバ選択の「.」が優先度低い演算子なので、 括弧で順序を指定してやる必要がある。 takagi.in/modules/bwiki/index.php?%B1%E9%BB%BB%BB%D2
573 名前: ◆Fp.xSEIREI mailto:sage [2009/02/24(火) 15:37:15 ID:5+X9BMJV] >>572 うおおおおおおおおおおおお!!!?コンパイル通ったwwwwwwwwwきちんと動いたSUGEEEEEEEEEEEEEEEEEEEEEE できたうっひょおおおおおおおおおおおおおおおおおぴょおおおおおおおおおおお 某関数がシンプルになったぜええええええええええええええええええええええYEAAAAAAAAAAAAAAAA ありがとう、ありがとうズゴック先生(;∀;) てか->とか * とか考えなくても &つけりゃよかったのねorz
574 名前: ◆Fp.xSEIREI mailto:sage [2009/02/24(火) 15:45:04 ID:5+X9BMJV] www.dotup.org/uploda/www.dotup.org2320.jpg ここに使われますた ポインタって便利だね
575 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/02/24(火) 23:16:12 ID:AWriAbTE] >>564-565 チェック厳しいですが、なんとかVC++2008EEでやってみようと思います。 ソース上書きしてしまって直前の内容には戻れなくなったしw >>566-574 ポインタっていつ見てもややこしいですね〜。勉強してる時はなんとなく分かった感じになっても しばらくして自分で書こうとするとまた分からなくなってしまってたりする・・・w 今日もコンパイラの使い方で足踏み状態。 既にあるソースをコンパイルに含める方法はわかったので、もう前のバージョンに上書きされる事は無くなった。 プロジェクトファイルのフォルダにソースをコピーしてから、「新しい項目の追加」の▼押して「既存項目の追加」で出来る。 処理がどこで止まっているかわからないので、画面右下の「呼び出し履歴」を表示させたいが、 デバッグでプログラムが止まった時に出るエラー画面でデバッグの「中止」を押すと、「呼び出し履歴」が消えてしまう。 これはエラー画面でデバッグの「再試行」を押し、次に出る画面で「中断」を押せば、「呼び出し履歴」が残る。 履歴は上からじゃなく下から上に向かっている事に気付くのに時間掛かった。 とりあえず、ゴールのデータを初期化する所で止まっているらしい。 ちなみにエラー画面の英文は、イテレータがどうのこうのという感じの内容でよく分からなかったけど、 たしかにそういうのを使っているので、その辺が原因かも?というところまで来てマス。
576 名前:436 mailto:sage [2009/02/25(水) 01:06:52 ID:ueY3gPVj] マウスとホイールの挙動も大体出来て、今はコンフィグ画面を組み立て中
577 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/02/25(水) 23:02:59 ID:yn9MVXN6] バグ変化無し・・・。 一行ずつ実行させようとすると勝手にWinMain関数から始まり、内部の関数を呼ぶところで 「現在の場所のソースコードを記述できません」と表示され先に進まず。 それならばと思い、昨日問題があると思ったゴール関係の処理関数内部一行目にブレークポイントを設定し、デバッグ開始し、 ブレークポイントで止まったところからF11キーを押して一行ずつ実行させてみたら いつの間にかエディタ画面内に「list」というタブが付いた画面が表示され、 その画面中身は見覚えのない理解不能なソースが書かれていて、何故か一行実行がこの画面に移ってしまっている・・・orz ちなみにエラー文は、「Experssion:list iterator not dereferencable」 一応検索してみたけど、自分に分かりそうなのは見つからず・・・。 気持ちを切り替えた方がいいと思い、今日はここで終了。
578 名前:名前は開発中のものです。 mailto:sage [2009/02/25(水) 23:18:59 ID:M83kTzla] リリースモードでやって、逆アセの画面みてるとかw MOV AX,BXとかそういうんあった?
579 名前:436 mailto:sage [2009/02/26(木) 01:18:57 ID:F2EPEs+N] 引き続きコンフィグ画面を〜
580 名前:名前は開発中のものです。 mailto:sage [2009/02/26(木) 04:04:36 ID:qHLjortN] >>577 ひょっとしてiteratorを++とかやってたり
581 名前:名前は開発中のものです。 mailto:sage [2009/02/26(木) 04:13:26 ID:qHLjortN] いや、ちがうなんだっけ えーとstd::list.iterator itr とかしたとき何かができなかったような…
582 名前: ◆Fp.xSEIREI mailto:sage [2009/02/26(木) 10:02:19 ID:0TSvd06Q] 二次元上での物体の自由落下についていろいろ(・∀・) 既存の関数を利用してそれっぽいのなら作れそう
583 名前: ◆Fp.xSEIREI mailto:sage [2009/02/26(木) 11:43:11 ID:EbeM2R2x] 矩形の4点座標を計算する関数に便利機能をつけたら引数14個のアホみたいな関数になってしまった
584 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/02/26(木) 22:12:21 ID:1SuK1bkP] >>578 確認したところデバッグモードでした。listというタブと逆アセンブルというタブの付いたウィンドウが出てきて デバッグを中断すると見れます。MOVとかは逆アセンブルの方に出ていて listのウィンドウは、 #if _HAS_ITERATOR_DEBUGGING if (this->_Mycont == 0 || _Ptr == 0 || _Ptr == ((_Myt *)this->_Mycont)->_Myhead) { _DEBUG_ERROR("list iterator not dereferencable"); _SCL_SECURE_TRAITS_OUT_OF_RANGE; } #else ・・・のような感じで意味不明な文が延々と1300行近く出力されます・・・。 >>579 早くバグを取って自分も先に進みたいです。w >>580 、581 iteratorをあまり理解しないうちにプログラムを書いていたら、 やっぱりそういうところがバグになって現れてしまうみたいです。 iteratorはプログラム内のあちこちで使ってるので大変ですが、 とりあえず本当にすべてのiteratorを使っているところでバグになるのか 切り分けをしてみようと考えてます。 >>582 ,583 自分もいつか選手にジャンプ&自由落下させてみたいけれど、バグが・・・w
585 名前:436 mailto:sage [2009/02/27(金) 00:36:41 ID:JFxOaYgu] まだまだコンフィグ画面 項目をオンマウスでアクティブ、から、オンマウス+クリックでアクティブ、に変更 たったそれだけの変更でもあちこち書き換えなきゃならない羽目に 仕様は予め細部まで熟考しとく事!>自分
586 名前: ◆Fp.xSEIREI mailto:sage [2009/02/27(金) 02:03:40 ID:gp2A0UAm] >>584 俺はそんなことなったこと無いなぁ…難しいことしてないからかもしれないけど レーザーの幅と長さに対する倍率で当たり判定のサイズを指定できるようにしてみた 長さ0.9倍、幅0.5倍を当たり判定に指定するとこの赤い四角が当たり判定に(・∀・)一枚目:最大時 二枚目:消滅時 きちんとレーザーの状態に合わせて自動で当たり判定のサイズも変わる便利仕様 www.dotup.org/uploda/www.dotup.org0283.jpg
587 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/02/27(金) 23:24:49 ID:U/xgHr9a] >>585 なんだか自分も仕様について考えてみたくなってきました。w >525の頃に言っていた「やる事リスト」の前に仕様決めた方がいいのかも・・・。 >>586 製作中は当たり判定表示した方が便利そうですね〜。(引数が15個に増えてる〜!) 自分もバグ取れたらちょっと考えてみたいです。 バグはまだ取れないけど、iteratorを使っている関数(選手、ボール、ゴールの初期化、 選手、ボール、ゴールの移動、当たり判定)の内、コンパイラで停止した関数がゴール関係だったので、 とりあえずゴールの初期化と移動の関数を呼び出す行に // をつけて注釈文にしたら、画面が表示された! なので、ゴール関係関数と他の関数でのiteratorの使い方に違いが無いか見比べてみるつもり。
588 名前:436 mailto:sage [2009/02/28(土) 01:22:18 ID:BN0uPU4y] そう、コンフィグです、今日も >>586 複雑そう・・・自分には無理だ; >>587 おぉ復活しつつあるようで、ひとまずホッとしました
589 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/02/28(土) 23:41:24 ID:6cM45uPX] なんとかコンパイルできるようになりました。 初期化関数については、元々上手くいってる選手やボールの初期化関数ではiteratorを使ってませんでした。 ゴール関係初期化関数だけiteratorを何故か使ってしまっていてそれがプログラム実行中のエラーになっていたらしい。 結局>577のエラーメッセージの意味は分からなかったので、先がちょっと不安な感じ。 何故か移動用関数内では、(*it). で要素にアクセスできているので不思議〜。 これでやっと>539のバグ取りに戻れる・・・orz (プログラム実行時エラーになる書き方、詳細は略) init(){ goallist.clear(); //GoalData型(ゴール関係のデータが入ってるクラス)のリストgoallistの要素を空にする。 list<GoalData>::iterator it; //GoalData型リストgoallistのどれかを指定するためのiteratorを設定 it=goaldata.begin; //iteratorをGoalData型リストgoallistの先頭を指すようにする (データの数だけループ){ (*it).x1=10; //GoalData型の要素に初期データを代入する (*it).x2=50; ++it; //iteratorを1つ上げて次のGoalData型の要素を指すようにする。 } (プログラムが無事実行できた書き方、詳細は略) init(){ GoalData gd; //GoalData 型データ1個分を仮保存するためのローカル変数gdを定義 (データの数だけループ){ gd.x1=10; //GoalData型の要素に初期データを代入する gd.x2=50; goallist.push_back(gd); //gdに仮保存したgoallistの要素一個分のデータをまとめてgoallistの最後尾の要素に登録 }
590 名前:436 mailto:sage [2009/03/01(日) 02:02:50 ID:fK/bT0En] >>589 お〜おめでとうございます 自分は停滞気味・・・
591 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/03/01(日) 22:35:05 ID:4AGEbIXn] >>590 ありがとうございます〜。 今日はほとんど進みませんでした。orz この数日のバグ取りの反動かもw
592 名前:436 mailto:sage [2009/03/02(月) 01:26:59 ID:yUGCkh1E] マウスオン+クリックで選択できる様に変更 もう3月!今年も残り10ヶ月を切ったぞーいそげいそげ
593 名前: ◆Fp.xSEIREI mailto:sage [2009/03/02(月) 17:23:38 ID:O2JzSRpM] list<GoalData>::iterator it; こ…これはいったい何をしているんだ…俺にはわからない…/(^o^)\ ゲームシステムについていろいろ(・∀・) 面白くするにはどうすればいいか、を考えてみる クソゲーを観察してみるのも勉強になるみたいね
594 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/03/02(月) 23:46:06 ID:MvrVI/rB] >>592 そういえばもう3月ですね〜、時間の流れが速すぎる〜。 >>593 C++で、配列みたいに複数のデータを管理できるコンテナクラスというのが標準でいろいろ用意されていて、 そのひとつにlistクラスというのがあり、そのlistクラスでGoalData型(←これは自分でプログラムの中で宣言して作った型)のデータを複数管理したいので、 どのGoalData型かを指し示す為にイテレータit(←配列変数の要素にアクセスするための添え字みたいなやつ)というものを宣言しますみたいな感じで自分は理解していますが、 自信はあまり無いです・・・orz ボール動かないバグ取れないですね〜。 if(ボール蹴る時のキーが押されてる)&&(ボールと選手の当たり判定用フラグ変数==true)の条件部分が真になっていない感じ。 ボールと選手の当たり判定用フラグ変数が、当たり判定関数で当たり=1と成っていても if文に来る直前でprintfDX()使って表示させて確認してみると何故か0になってる。 プログラム中では同じ変数名で書いていても中身は違うとなると 変数のスコープ(有効範囲みたいなやつ?)をよく分かっていなくてそれが原因なのかもしれないというのが思いついたけど それを確かめる方法が無い・・・orz
595 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 00:53:43 ID:j/EdIaTK] ひょっとして「押されている」と思ってるのが「押されたとき」だったり 【ハウツー】最初にマスターしたいVisual Studioのデバッグ機能 - 基本編 (1) ブレークポイント | エンタープライズ | マイコミジャーナル ttp://journal.mycom.co.jp/articles/2008/08/18/debug/index.html
596 名前:436 mailto:sage [2009/03/03(火) 01:13:26 ID:B6hdHZko] ウィンドウモード変更・表示倍率変更・フレームレート変更・FPS表示切替を選択できる様になりました >>593 面白く・・・最大の問題すなぁ・・・
597 名前: ◆Fp.xSEIREI mailto:sage [2009/03/03(火) 21:05:59 ID:9wM7nouk] www.dotup.org/uploda/www.dotup.org4085.jpg 回転行列による矩形と点の当たり判定実装(・∀・)
598 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/03/03(火) 22:56:23 ID:vs8eMq8g] >>595 ありがとうございます〜。デバッグは機能が色々ある様なので少しずつ覚えていこうと思います。 キー入力の状態については、実は自分はまだよく理解できぬままプログラムやってます・・・orz >>596 かなり順調にいっててうらやましいですー。 >>597 回転行列を当たり判定に使う・・・、む・・・難しそうな世界。 ボール動かないバグの原因なんとなく見えた。 フラグ用変数のスコープが違ってて名前は同じでもアドレスが異なっている別々の変数を それぞれの関数内で操作してるのではないかと思ったけど、どうもそうではなさそう。 ボールが選手に当たっている状態を表すフラグの立て方に原因があったと思われる。 これを説明するには一週間分の書き込みスペースを使ってしまいそうな感じ。
599 名前:436 mailto:sage [2009/03/04(水) 01:23:23 ID:+kKOKlkp] フルスクリーンから復帰すると古い方の拡大率になってたのに気付いて修正 マウスで窓枠ドラッグした時の拡大率を取得出来る様にした 今になってもっとシンプルなインタフェイスを思いつく・・・あ〜全体的に作り直したい >>595 勉強になります >>598 一つの結果が出るまでのスパンというか下ごしらえが段々長く大変になってきました;
600 名前:せいれい mailto:sage [2009/03/04(水) 21:55:43 ID:1TDttkKc] もうちょっと調整したらゲームシステム部分の作成に移れそう そろそろ背景やファイル入出力もいじらねば(・∀・)
601 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/03/04(水) 22:20:50 ID: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 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 22:40:39 ID:/ZV4wLD2] 何故else条件でボールのフラグを落とすのか、40文字以内で説明せよ(5点) フラグ落とすのは選手だけでいいと思うんだが。そもそもボールのフラグもいらない。 ボール持ってる選手しか蹴る(移動の初期値を与える)ことができないのなら ボール支配できたときにボール蹴る関数にでも飛ばせばいいと思うが、どうか。
603 名前:436 mailto:sage [2009/03/05(木) 00:50:31 ID:LR5dYdvr] ああああせりました; 窓枠ドラッグ時の拡大率を取得する為SetAlwaysRunFlag();をON-OFF多用してたら なぜかSetAlwaysRunFlag();をOFFにするとデバッグに行く途中で止まり、 ON状態の一文を入れないと動かなくなり、とうとうそれを入れても入れなくても動かなくなり・・・ VCリインストールしたら今度はヘッダファイルを読まなくなり(パスは渡してるのに)、 レジストリからVC関連を全消去してリインストール、さっきようやくまともに動いたっぽい SetAlwaysRunFlag();を乱用乱発してたのが悪かったのかなぁ
604 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/03/05(木) 23:27:28 ID:hIYt1MGi] >>602 else条件でボールのフラグを落とすのは、(Xキー押し)&&(ボール接触フラグON)がボールを蹴れる条件なので、 選手がボールから離れている(else)時には、ボール接触フラグをOFFにする必要があった為。 今のプログラムでは、ボールに接触してるので蹴ろうとしても、ボールに接触していない選手がいたら、elseが成立してしまい ボールの接触フラグをOFFされてしまうという問題がありました・・・。 確かに今思うとボールのフラグは必要無かった様です。 選手全てにボールに接触してるかどうかを表すフラグを持たせておいたのは、同時に複数の選手がボールを蹴る様な場合を考えてました。 同時蹴りの時にボールに接触してる複数の選手から一人を選ぶ仕組みが必要かと思いながら実装の案はまだ何もなし・・・。 バグの修正はもう少し検討中〜、今のボール移動関数は、選手のデータを引数に持っていないので、選手のフラグ変数を使えないのデス・・・orz >>603 レジストリとか全然わからないので、自分もその関数には注意しておきます〜。
605 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 00:01:32 ID:zNsEmWk0] >同時に複数の選手がボールを蹴る様な場合を考えてました。 それは「蹴った」時の処理であって、 接触したかどうか判定する時点では関係ないんじゃないかな。 同時蹴りの優先度は確かに悩むところだね。
606 名前:436 mailto:sage [2009/03/06(金) 00:30:05 ID:SvQUccHR] 拡大率取得する関数がすでにあったorz 拡大率変えるとSetMousePointが元のウィンドウの大きさ基準で動く為、 元の解像度を超える座標を指定出来ないorz ので、新たに思い付いたインタフェース案はモロにその影響を受ける為、 すっぱりあきらめられたw 今は構造をもっとスッキリ出来ないかイジクリ中 >>604 今後は念の為C:とソースのバックアップを取る様にしました;
607 名前:SGGK ◆6pZCoAtaxk mailto:sage [2009/03/06(金) 23:39:57 ID:Fo+vpfkW] >それは「蹴った」時の処理であって、 >接触したかどうか判定する時点では関係ないんじゃないかな。 た・・・確かにそうです。 メインループ内での処理を移動、当たり判定に分けておいて、当たり判定内で いろいろな組み合わせの当たり判定をあらかじめ行い、その結果を各種フラグ変数に記憶させておいて 移動関数でそのフラグ変数を参照するようにすれば、移動関数から当たり判定関数を呼ばなくても済み、 プログラムが整理できそうな気がしたけど、なかなか上手く行っていないです・・・orz >>606 そういえば自分もバックアップ全然取っていないです。もしもハードディスクがクラッシュしたら・・・。(汗;) やっと>539のバグがなんとか取れました。(もっと日数かかるかと思ってた) このスレでやってたおかげでVC++2008EEに移れた影響も大きかった。 ボール移動関数に選手のオブジェクトのアドレスを渡して、選手のメンバ変数の中から ボールとの当たり判定用フラグにアクセスして、(Xキー押し)&&(ボールとの当たり判定用フラグON)が真なら ボール移動処理に移る様にするとOK!