トップページ > 過去ログ > 記事閲覧
跳ね返り判定
名前:本田 日時: 2009/10/19 22:34

こんばんは 現在ボールの反射判定を作っているのですがX軸は反射するのですがY軸が反射されません。 以下がソースです。またよろしければ配列を使用したブロックの配置方法を教えていただけますでしょうか(アイディア等ですと助かります) 大変厚かましいですが、どなたかよろしくお願いいたします。 if(Bally = MouseY - 5 && Ballx >= MouseX - 50 && Ballx <= MouseX + 50 || Bally < 0){ //バーか天井にぶつかったらY軸移動方向を反転 Movey = -Movey; //Y軸の移動方向を反転させる } if(Ballx > 640 || Ballx < 0){ //横壁にぶつかったら Movex = -Movex; //X軸の移動方向を反転させる } Ballx+= Movex; Bally+= Movey; バー作成の部分 DrawBox(MouseX-50,MouseY-5,MouseX+50,MouseY+5,red,TRUE);

Page: 1 |

Re: 跳ね返り判定 ( No.1 )
名前:sy(サイ) 日時:2009/10/20 01:18

きっとブロック崩しですね。自機のバーが100pxだと、やや広く思えますが。 //============================================== // バーか天井にぶつかったらY軸移動方向を反転 //============================================== if( Bally = MouseY - 5 // バーの上部分(?) && Ballx >= MouseX - 50 // バーの左部分 && Ballx <= MouseX + 50 // バーの右部分 || Bally < 0 // 天井 ){ //━━━━━━━━━━━━━━━━━━ // Y軸の移動方向を反転させる //━━━━━━━━━━━━━━━━━━ Movey = -Movey; } (?)の行部分が明らかにおかしいのでこの条件式のせいだと思います。コメントの充実と見やすさを心がけましょう。 ちなみに当たり判定はボールのサイズも考慮しましょう。ボールとバーが重なると不細工です。 そしてブロック並べる方法ですが、配列の中身を例えば int block[3][10] = { {1,0,1,0,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,1,0} }; として、画面左上から1のところにブロックを等間隔に描画してゆく。 そして、矩形の当たり判定などをしてボールと接触をしたら、1を0にしてブロックの描画を切る。 1を2にしたりして2のところを固いブロックの表示にして、当たり判定の時、数値を1づつ減らせば、 2回当てないと壊れないブロックとか表現できると思います。
Re: 跳ね返り判定 ( No.2 )
名前:かたぱると 日時:2009/10/20 09:26

横からついでに失礼。 四角形と点での当たり判定を簡単に行いたいのであれば PtInRect関数あたりを利用すると楽です。 (windows.hをincludeする必要がありますが…。) BOOL PtInRect( CONST RECT *lprc, // 長方形 POINT pt // 点 ); 引数のRECTに当たり判定の四角形の座標を、 POINTに判定を行いたい座標を入れればOKです。 当たってればtrueが返却されます。 詳しい使い方などは調べてみると良いでしょう。 横槍失礼〜
Re: 跳ね返り判定 ( No.3 )
名前:本田 日時:2009/10/26 20:42

say(サイ)さん、かたぱるとさんありがとうございます。 しかしながら色々と調べてみたのですがうまくいきませんでした 私の中のイメージとしましては int block[3][10] = { {1,0,1,0,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,1,0} }; とあるのを毎回配列に対しfor文で配列の中を判定。 1以上ならば描画、0なら消滅。というイメージができています。 しかしながらこのfor文における配列の判定の仕方が分かりません。また、for文でなくてもwhileでも構いません。 度々申し訳ありませんがご教授のほうお願いいたします。 また、別件なのですが画像ファイルがなぜか表示されません。 フォルダの構造はDxLibのフォルダ(DxLib_VC)がデスクトップにあります。 プロジェクトは C:\Documents and Settings\ユーザー名 \My Documents\Visual Stdio\Blockです。 そのフォルダの中にあるimgフォルダに画像フォルダが入ってます。 ソースでは BGimg(int型変数) = LoadGraph("img/ファイル名.bmp"); DrawGraph("0,0,ファイル名.bmp, FALSE");です 大変長文となってしまいすいませんでした。 ご迷惑ばかりおかけしていますが何卒よろしくお願いいたします。
Re: 跳ね返り判定 ( No.4 )
名前:sy(サイ) 日時:2009/10/27 22:13

アクションの基本が分かっていらっしゃらないようなので。 ●1フレーム中に行う事 入力 → 動かす → 当たり判定 → 描画 (もしくは動かす時に判定しながら更新) この繰り返し。大雑把ですが、これが理解できてないとゲームは作れませんので。 そして次に、当たり判定で何をすべきなのか分かってらっしゃらないのではないかと推測しました。 配列で判定と言う前に、「二つの矩形が当たっているか」を判定する方法を知っていますでしょうか? 一番基本となるものなので、まずそこから調べてみてはどうでしょう? あなたの質問はこのサイトのサンプルで紹介されていることばかりですので、 まずはそのプログラムを見て勉強されてはどうでしょう^^; DXライブラリ サンプルプログラム ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html DXライブラリ ゲームプログラム講座 ttp://homepage2.nifty.com/natupaji/DxLib/dxlecture_main.html あとは応用力♪ どうしても分からない場合は、僕がサンプルを書きますので。
Re: 跳ね返り判定 ( No.5 )
名前:本田 日時:2009/11/04 20:21

sy(サイ)さん 遅れながらありがとうございます。 一通りとまではいきませんがある程度拝見させていただきました。何から何まで皆様にご迷惑おかけして申し訳ありませんでした。 今後はなるべくこちらの方で対処するよう、より一層心掛けたいと思う次第であります。

Page: 1 |