[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/03 05:51 / Filesize : 187 KB / Number-of Response : 608
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

1人でゲームが作れるように修行します。



1 名前:名無しさん@お腹いっぱい。 mailto:  [01/11/21 04:33 ID:???]
がんばりましょう。

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!






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<187KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef