トップページ > 過去ログ > 記事閲覧
当たり判定
名前:ミカエル弾正 日時: 2008/09/02 21:22

四角に当たり判定をつけるを、自分なりに応用して、ボールにも当たり判定をつけようとしてみましたが、どうしてもうまくいきません。 四角をボールに変えたりShotをETamaに変えたりしているだけなのでここが違うと思うのですが・・・。 よろしくお願いします。

Page: 1 |

Re: 当たり判定 ( No.1 )
名前:Will 日時:2008/09/03 10:34

質問はもう少し具体的にしないと回答が得られにくいです。 1.元になったサンプル名は正確に  「ゲーム制作講座1−6 敵の当たり判定をつけよう 」ですか? 2.やりたいことは具体的に  当たり判定の範囲を丸くしたいの? 3.どこをどう変えたかを具体的に  長くないのであればソース丸ごと提示してください。 4.どううまくいかないのか具体的に  うまくいかないでは何も伝わりません。
Re: 当たり判定 ( No.2 )
名前:ミカエル弾正 日時:2008/09/03 16:29

1.そうです。 2.1−6のボール君(=自機)にも当たり判定を付けたいのです。 3. if( ( ( ShotX > SikakuX && ShotX < SikakuX + SikakuW ) || ( SikakuX > ShotX && SikakuX < ShotX + ShotW ) ) && ( ( ShotY > SikakuY && ShotY < SikakuY + SikakuH ) || ( SikakuY > ShotY && SikakuY < ShotY + ShotH ) ) ) { // 接触している } else { // 接触していない } 定義にEtamaXなどを加え、 上のソースのSikakuをBallに変え、ShotをETamaに変えただけです。 4.↑なのでうまくいかないのだろうなと。 製作講座と全く同じものなので、詳しいソースはそちらを見れば分かります。 よろしくお願いいたします。
Re: 当たり判定 ( No.3 )
名前:Will 日時:2008/09/03 17:37

> 定義にEtamaXなどを加え Etamaとは、敵の弾の位置が入っているということですか? 1−6のサンプルソースは、敵が弾を打つようにはなっていませんけど、 Etamaにはどのような値が入っているのでしょうか? 追加 1−8のことですか? これにボールの当たり判定を加えるのであれば // 弾と敵の当たり判定、弾の数だけ繰り返す のforループをコピーしてボールと敵の弾の当たり判定に書き換えれば出来ると思います。
Re: 当たり判定 ( No.4 )
名前:ミカエル弾正 日時:2008/09/03 19:31

よくわかりません。 ソースの一部です。他は講座と一緒です。 int BallX , BallY , BallW , BallH , BallGraph ; int Bw, Bh, Sw, Sh ; int SikakuX , SikakuY , SikakuMuki , SikakuGraph ; int SikakuDamageFlag , SikakuDamageCounter , SikakuDamageGraph ; int ShotX[SHOT] , ShotY[SHOT] , ShotFlag[SHOT] , ShotGraph ; int SikakuW , SikakuH , ShotW , ShotH ; int ShotBFlag ; int i ; double ETamaX[ETama] , ETamaY[ETama] ; int ETamaFlag ; double ETamaSx, ETamaSy ; int ETamaW[ETama] , ETamaH[ETama] , ETamaGraph ; int ETamaCounter ;       中略 // 弾と敵の当たり判定、弾の数だけ繰り返す for( i = 0 ; i < ETama ; i ++ ) if( ( ( ETamaX > BallX && ETamaX < BallX + BallW ) || ( BallX > ETamaX && BallX < ETamaX + ETamaW ) ) && ( ( ETamaY > BallY && ETamaY < BallY + BallH ) || ( BallY > ETamaY && BallY < ETamaY + ETamaH ) ) ) { // 接触している } else { // 接触していない } エラー等 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(18) : error C2065: 'ETama' : 定義されていない識別子です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(70) : error C2446: '>' : 'int' 型から 'double *' 型への変換ができません。 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(70) : error C2040: '>' : 'double [1]' は 'int' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(70) : error C2446: '<' : 'int' 型から 'double *' 型への変換ができません。 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(70) : error C2040: '<' : 'double [1]' は 'int' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(71) : error C2446: '>' : 'double *' 型から 'int' 型への変換ができません。 1> この変換が可能なコンテキストはありません。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(71) : error C2040: '>' : 'int' は 'double [1]' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(71) : error C2110: '+' : ポインタにポインタを加えようとしました。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(72) : error C2446: '>' : 'int' 型から 'double *' 型への変換ができません。 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(72) : error C2040: '>' : 'double [1]' は 'int' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(72) : error C2446: '<' : 'int' 型から 'double *' 型への変換ができません。 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(72) : error C2040: '<' : 'double [1]' は 'int' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(73) : error C2446: '>' : 'double *' 型から 'int' 型への変換ができません。 1> この変換が可能なコンテキストはありません。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(73) : error C2040: '>' : 'int' は 'double [1]' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(73) : error C2110: '+' : ポインタにポインタを加えようとしました。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(88) : error C2664: 'GetGraphSize' : 2 番目の引数を 'int (*__w64 )[1]' から 'int *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(266) : error C2296: '/' : 無効です。左オペランドには型 'int [1]' が指定されています。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(267) : error C2296: '/' : 無効です。左オペランドには型 'int [1]' が指定されています。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(273) : error C2296: '/' : 無効です。左オペランドには型 'int [1]' が指定されています。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(274) : error C2296: '/' : 無効です。左オペランドには型 'int [1]' が指定されています。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(305) : error C2106: '+=' : 左のオペランドが、左辺値になっていません。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(306) : error C2106: '+=' : 左のオペランドが、左辺値になっていません。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(310) : error C2446: '>' : 'int' 型から 'double *' 型への変換ができません。 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(310) : error C2040: '>' : 'double [1]' は 'int' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(311) : error C2446: '>' : 'int' 型から 'double *' 型への変換ができません。 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(311) : error C2040: '>' : 'double [1]' は 'int' と間接操作のレベルが異なります。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(314) : warning C4311: '型キャスト' : ポインタを 'double *' から 'int' へ切り詰めます。 1>c:\documents and settings\user\my documents\visual studio 2005\projects\teste\rr.cpp(314) : warning C4311: '型キャスト' : ポインタを 'double *' から 'int' へ切り詰めます よろしくお願いします。
Re: 当たり判定 ( No.5 )
名前:Will 日時:2008/09/03 20:50

動作確認してませんけど以下であってると思います。 ベースは1-8です。 1-9に入れる場合は、doubleの変数をintにキャストしないと警告が出るかもしれません。 四角領域でしか判定していませんので、ボール君の画像が無い角部分でもHITします。 // 弾と敵の当たり判定 // 弾が存在している場合のみ次の処理に映る if( ETamaFlag == 1 ) { // ボール君との当たり判定 if( ( ( ETamaX > BallX && ETamaX < BallX + BallW ) || ( BallX > ETamaX && BallX < ETamaX + ETamaW ) ) && ( ( ETamaY > BallY && ETamaY < BallY + BallH ) || ( BallY > ETamaY && BallY < ETamaY + ETamaH ) ) ) { // 当たり } else { // はずれ } }
Re: 当たり判定 ( No.6 )
名前:ミカエル弾正 日時:2008/09/03 23:15

何から何までありがとうございます。解決しました。

Page: 1 |