質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2517閲覧

当たり判定ですり抜けをなくしたい

gegegeitsu

総合スコア2

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/05/08 10:04

前提・実現したいこと

簡単な2DでオブジェクトAとBを生成し、AはBに向かって移動してるとします。
この時Aの速度がBの大きさより大きい場合場合によってはすり抜けが起きると思います。その時の対応策のヒントを頂きたいです。

試したこと

1フレーム内でAの速度を0~1に置き換えてwhile文を使い1ループ1pixel分ずつ足していき、現在フレームの速度文を足し終える、または衝突したらbreakするという処理を思いつき試してみました。
実際に上手くいったのですが、速度がもし10万だとした場合while文を10万回ループすることになるから他の方法はないかな?と思い質問させて頂きました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

速度がもし10万だとした場合while文を10万回ループすることになるから

実際問題として「速度10万」なんてことがあり得る世界を相手にしているのでしょうか?

1pixel分ずつ足していき…

という話の雰囲気から想像するに,10万なんて値は扱わなさそうに思います.
もしそうであれば,起こりえない事柄を心配しても意味無いし,考慮する必要もないです.

せいぜい,「まずは(「1pixel」より大きな)適当に荒い分解能でやる→衝突したら細かい分解能に」とかして演算回数を減らすような工夫を取り入れるくらいで十分かもしれません.

投稿2020/05/09 01:47

fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/05/09 01:51

どちらかと言えば,「Bもまた移動体である(静止していない)」という状況を適切に扱えるのか? という側を心配した方が有益なんじゃないかと思います. 刻みを「1pixel」という「距離」で考えていると,速度が異なる複数物体間の干渉を扱うのが辛いように思います.
gegegeitsu

2020/05/09 02:11

確かに移動してない物に対してしか試してませんでした、考え直してみるか、もう1人の方がおっしゃっているやり方をとってみたいと思います。
fana

2020/05/09 02:19

例えば, 「データ更新の処理を1回行って,表示を更新する」を繰り返すメインループがあったとして, このときの「1回のデータ更新処理」ではゲーム内時間が1だけ進むとする. ↓ これを 「データ更新の処理をN回行う毎に,表示を更新する」にしても別に良いわけで, この場合に「1回のデータ更新処理」で進むゲーム内時間を 1/N とするならば, 「1pixel分ずつ…」と似たような話:ただし,刻んでいるのは特定の物体の移動距離ではなくて進行時間である という形になります.
fana

2020/05/09 02:22

Nの値は,扱っている世界で一番小さい物体のサイズや取りえる最大速度あたりから(静的でも動的でも)調整すれば,とりあえずは現在の考え方と大きく変わらない方法論で,複数の移動体があろうが問題なく扱える話になるでしょう.
gegegeitsu

2020/05/09 05:37

そのn回更新をする場合、移動するオブジェクト事に演算時間が伸びるっていう認識であってますかね
fana

2020/05/10 00:49

> 移動するオブジェクト事に というところの意味がよくわかりませんが…… 1回で済ませていたのをN回にするなら,演算時間は「N倍」と言えなくもないですかね. N=2なら「全ての移動体の速度を一律半分にして,そのかわり更新処理を2回やる」という話ですので.
fana

2020/05/10 00:52

(回答内容とコメント内容が違う話になってしまったなぁ)
gegegeitsu

2020/05/10 17:57

回答ありがとうございました、メインループ1回に対して更新処理を複数回にわけて行っても別にいいというのを知り驚きました、ずっと1回の更新処理しかしていなかったので…
guest

0

https://zerox4c.hatenablog.com/entry/20101017/1287303954
このあたりのページが参考になると思います。
(「当たり判定 すり抜け」等できちんと検索しましたか?)

投稿2020/05/08 22:29

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gegegeitsu

2020/05/09 02:06

速度が大きすぎる物体との当たり判定などと調べていました。申し訳ないです。自分の方法で1pixelずつの分解を32ずつとかにしたとしてもやはりこのurlの方のやり方を使った方がいいですかね。 動く物体全てに自分のやり方を実装してしまうとwhile文の回数も増えますし
gegegeitsu

2020/05/09 02:14

相手の速度を考慮してませんでした、urlの方は、別の物体の速度も考慮して書かれているのでurlのかたのやり方を参考にしたほうがいいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問