• 締切済み

壁との当たり判定

objective-cでプレイヤーと壁の当たり判定に困っています。 いろいろと検索して参考になるサイトをさがしてはいるんですが なかなか見つかりません。 何かお勧めのサイト、または書籍などあれば教えて下さい。 ちなみに当たる壁は複雑な地形の画像でやっています。

みんなの回答

  • cpen
  • ベストアンサー率58% (18/31)
回答No.1

ゲームは2D?3D? プレイヤーの形は?(ただの点?それとも複雑な形?) 壁の形は数式で表せますか?  もし、プレイヤーが複雑な形で三角形で出来ているのなら、三角形と壁の数式が交差するか調べるのが一番簡単。 ただ、毎回全ての三角形を調べたら時間がかかるから、プレイヤーが壁から離れている時間の方が長ければ、bounding boxと壁が交差するか先に調べたり。

関連するQ&A

  • 当たり判定

    ゲームで欠かせない処理それが「当たり判定」ですよね。 攻撃によるダメージ、倒したり、倒されたり。 アイテム獲得や複雑な地形に対する行動範囲設定。 複雑な形をした敵(ボスキャラなど)の当たり判定など。 当たり判定にも多数あり、それぞれメリット・デメリットがあると思います。 最近はゲームも2Dから3Dに移りつつあるので方法は余計に増えてきたと思います。 その「当たり判定」の方法とメリット・デメリットを出来るだけたくさん教えてください。

  • C#で壁の当たり判定と自キャラの移動で困っています

    初投稿です。C#のコンソールアプリケーションでゲーム作りをしているC#初心者です。 GraphicsExというフォームを作ってそこに壁を描画するところまではできたのですが、画像を自キャラとして動かせるとよいのですが、できないので今はとりあえず丸を描画して動かしています。 質問なのですが、自キャラを丸で描画して動かすと、壁の当たり判定が分からないので、キャラ(ただの丸ですが)が壁をすり抜けてしまいます。壁にぶつかった時にそれ以上進めないようにするために壁の当たり判定をどなたか教えてほしいです。 あとGraphicsを使っているからか、プログラムがおかしいのか分かりませんが(おそらく後者(汗)キャラの移動はキー入力でやっていて、数秒は意図した通りに移動できるのですが何故かキャラを移動しても、しなくても数秒後にフォームがとまってしまい動かなくなります。どのようにプログラムを記述をするとうまく自キャラの操作をできるのかも教えていただけるとすごく嬉しいです。 重ね重ね恐縮ですが、できればソース付でお願いします。 そもそも、コンソールアプリケーションでゲームを作るべきではない、DirectXを使うべきだ、とかあると加えてアドバイスほしいです。 (ウインドウズフォームもDirectXもあまり詳しくないですが。。。orz) 一応いままでのおおまかなプログラムを載せておきます。長文失礼しました。

  • 回転する矩形同士の当たり判定について

    C++でゲームのSTGのようなゲームを作成しています。 ショットの当たり判定は全て矩形で行っていますが、 レーザーのような細長いショットの場合、 どうしても斜め方向の判定が必要になってきます。 単純な回転しない矩形ならば、 それぞれの矩形の頂点座標の距離を比較するだけでいいので、 4回の比較で判定することができるのですが、 回転が加わってしまうとどうしても複雑になってしまい、 どういう風にとればいいのか解らずに困っています。 例えば、以下のような場合など、 回転を考慮しない判定だと衝突と判定されます。      ┌――┐      |   |      |   |   /\└――┘ /    \ \    /   \/ 解説サイト等を拝見しましたが、 矩形の回転の加わった当たり判定まで解説しているサイトが見当たらず、 ベクトルを使えば出来るという情報は得たものの その方法が解らずに困っています。 シーンによっては多くのショットが生成されるので 付加をするならば、できる限り高速な処理で、判定をしたいのですけども、 どなたがその方法をご存じないでしょうか? よろしくお願いします。

  • 当たり判定のデータを残したい

    前回、簡単な当たり判定作りたいの追加希望です。 振り返りますと現状 sassakunさん回答ANo.3参考のフロー出来上がりました。 今回質問1です。 前回フロー(4)の判定結果を履歴と残し表示させたいのです。 つまり、フロー途中で・・・              ↓ (4)プログラム判定結果、画面上スベリで当たりor外れ表示              ↓ (4.1)    履歴 当たり○回 外れ○回 を適当に付近へ表示              ↓ としたいです。もちろん繰り返しフローですので 外れ及び当たりの履歴は増えていきます。(できたら履歴を0にする リセット機能もあれば便利です) 質問2 タイムラインでなくダイナミックテキストのみでスクロールさせて いますがフロー(2)~(4)の最中サウンドは可能なのでしょうか、 つまりボタン“オン”で音楽スタート→(2)・・(4)の判定後表示と同時にサウンド停止。 以上ここまでの(追加部分)フローをまとめます (1)ボタン“オン”      ↓ (2)音楽スタート(今回追加) 画面上当たり、ハズレ、当たり、はずれ・・とループ横スクロール       ↓ (3)ボタン“オン” 音楽再生中・・      ↓ (4)プログラム判定結果、画面上スベリで当たりor外れ表示同時に再生 中の音楽ストップ   同時に当たり○回 外れ○回 を適当に付近へ表示(今回追加)      ↓ (5)ボタン“オン”      ↓      (2)へ 質問3  フロー(4)“スベリ”部分速度って調節可能ですか? 質問4 当たりのときにタイムフレームへ移動、画面上演出したいのでが複雑になりかけているので今後の希望にします。 何度もお手数かけています。           

    • ベストアンサー
    • Flash
  • すいません、質問というか困っていることがあります。

    すいません、質問というか困っていることがあります。 私は今C#でイライラ棒を作成しているのですが、ピクチャーボックス内での、プレイヤー(自機)の動かし方と。壁に当たった時の当たり判定のプログラミングが分りません。 グーグルなどで検索をかけましたが、私が納得するような回答はありませんでした。 C#に詳しい方、お手数ですがご教授お願いします。 できればソース付でお願いします。

  • 高さのあるクォータービューの当り判定について

    VC++2010&DXライブラリを使用してタクティクスオウガやモナークモナークのようなSLGをふと作りたくなり、クォータービューを採用しました。 全くの平面な状態ですと、それぞれのブロックチップのひし形の4つの座標を、それぞれ通る4本の一次関数式と現在のマウスカーソル位置との範囲内計算をさせることで、カーソルがあたっている部分だけ色を変えるという処理(ゲーム内カーソルの表示)をさせる処理は上手くいきました。 また、ひし形の頂点の座標をCreatePolygonRgn();とPtInRegion();を使う処理に変えてみても大丈夫でした。 しかし添付しました画像のようにマップに高さの概念を加えていくと、ひし形が重なり合う部分が出てきてしまい、画像のように 青の部分にマウスカーソルが入るとAとBが選択されて色が変わった状態になり、 緑の部分にマウスカーソルが入るとCとBが選択されて色が変わった状態になり、 赤の部分にマウスカーソルが入るとDとBが選択されて色が変わった状態になってしまいます。 (いずれの場合も、一番手前にあるBの面だけが選択され、色が変わった状態になってほしい、 というのが理想としている動きです) CreatePolygonRgn();も使えるので、例えばこの画像のような例ですとAは変形六角形、CとDは変形五角形として扱うこともできそうですが、常にこういった高さの違うマップだけを表示する、というわけではなく、ブロックによっては高さが任意に変わってしまうため、変形多角形のパターンも多岐になるであろうことが予測できてしまい、目の前が真っ暗になってしまっております。 こういった場合のマウスカーソルの当り判定につきまして、何か良い処理方法をご存知の方がいらっしゃいましたら何卒お教えくださいますようお願いします。

  • Objective-C 勉強方法をお願い致します。

    iPhoneアプリケーションを開発したいと思います。 Xcodeなどは既に入手しており、開発するばかりの状態です。 皆様がObjective-C言語を開発するときは、何を参考にしましたか? おすすめの書籍、URLなどを教えてください。 皆様の御回答をお待ちしております。 宜しくお願いいたします。

  • 壁に張ってあるのはラグ?

    壁に張ってあるのはラグ? 寝室の壁などに、ラグのようなカラフルな布が貼ってあるのを アメリカの映画(「ドニー・ダーコ」でもありました)などで 目にしたりします。 私も実践したいのですが、どのように張るのがよいのでしょうか? あの布はラグなのでしょうか? 参考になるサイトや、検索ワードなどありましたら教えてください。

  • xcodeについてご相談です。

    objective-c初心者です。 画像の16行目にある、CMMotionManagerというものは、 どんなカテゴリー内の物で、どんな役割があるのでしょうか。 また、48行目にある同様の物とは役割が違うのでしょうか。 それと質問が複数になってすみませんが、こういった疑問に 答えてくれるサイトや書籍はありませんでしょうか。 以上、何卒宜しくお願い致します。

  • C++で日付判定を行いたい!!

    C++で日付判定を行いたい!! C++でデータを1バイトづつ呼んで(For文で回す)日付かどうかを判断したいのですが、VBのようなIsDateみたいな関数がないので、同じように扱える関数がC++であったら教えてください。 対応する関数が無い場合は参考になるようなサイトでもやり方でも結構ですので、教えてください。 例> tp=&buf[4*16+(16*3)]; //ポインタ for( ixs = 0;ixs<50;ixs++){  //日付判定チェックがしたい  sprintf(aaa,"%08d",*((unsigned int*)(tp+ixs))); } 宜しくお願いします。

専門家に質問してみよう