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

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

新規登録して質問してみよう
ただいま回答率
85.35%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Box2D

Box2Dは、C++で記述された2D物理演算エンジン。C++以外にも多くの言語に移植されています。円形・多角形の物体の運動をシミュレーションすることが可能で、GUIで動作を確認できるテストベッドが付属されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1035閲覧

Box2Dにおいて、物体同士がすり抜けてしまう問題について

justmeet0924

総合スコア44

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Box2D

Box2Dは、C++で記述された2D物理演算エンジン。C++以外にも多くの言語に移植されています。円形・多角形の物体の運動をシミュレーションすることが可能で、GUIで動作を確認できるテストベッドが付属されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/11/22 11:18

Box2Dにおいて、作成した物体同士がすり抜けてしまいます。
createCircle(type,x,y,a){

//Box this._bodyDef.position.Set(x / PTM_RATIO, y / PTM_RATIO); this._bodyDef.type = type; this._bodyDef.userData = null; this._fixDef.shape = new b2PolygonShape; this._fixDef.friction = 0; this._fixDef.restriction = 0; this._fixDef.shape = new b2CircleShape(a/PTM_RATIO); let body = this._world.CreateBody(this._bodyDef); body.CreateFixture(this._fixDef); return body; } createTriangle(type,x,y,vertices,n){ //Box this._bodyDef.position.Set(x / PTM_RATIO, y / PTM_RATIO); this._bodyDef.type = type; this._bodyDef.userData = null; let polygonShape = new b2PolygonShape() polygonShape.SetAsArray(vertices,n) var triangle = this._world.CreateBody(this._bodyDef); triangle.CreateFixture2(polygonShape,1); return triangle; }

上記のような設定で作ったCircleとTriangleがぶつかってくれません。
ちなみに、class Box2dManagerというクラスの中に、上記の図形作成の関数を定義しています。
また、Circle同士はぶつかってくれます。
どなたか理由をお知りの方はいらっしゃいますか?

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

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

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

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

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

guest

回答1

0

自己解決

解決しました。bodyを作る際のポジション(b2body.GetPosition())と、頂点の位置関係の問題だったようです。
頂点を設定する順番が時計回りであること、及び、bodyを作る際のポジション(b2body.GetPosition())を図形が包み込むように頂点を配置すること、そして、図形が凸包(数学的に厳密な定義は私にとって少しあやふやですが)であること、などの条件を満たしていないと、図形作成がうまくいかないようでした。
以上を満たすように配置した結果、上手くいきました。

投稿2021/11/23 10:56

justmeet0924

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問