Box2DはC++で書かれた二次元の剛体のシミュレーションの為のライブラリ(俗に「物理エンジン」、「Physics」とも呼ばれる)。Erin Catto が開発し zlibライセンス で公開しており、クレジットを表記さえすれば許諾なしに誰でも自由にライブラリを利用できる。
C++以外の非常に多くの言語にも移植されており、一般によく知られたプログラミング言語であれば凡そ移植版が存在し利用可能である。
環境 Microsoft Visual Studio Community 2019 Box2D v3.0.0 原因 Box2D v3.0.0ではstdatomic.hが使用されている。stdatomic.hはC++23から採用されたものであるが、プロジェクトのC++言語標準がC++17であった。 解決策 Box2Dのバージョンをv2.4.1まで下げた。stdatomic.hが使用されていないため、ビルドが通る。 Box2Dの最新バージョンを使用したい場合は、C++言語標準を23以上に設定することでも解決できるかもしれない。
「The Nature of Code」から衝突イベントを別クラスに切り分けることについて取り上げます。今までは、実行用のクラスに衝突イベントの処理を書いていました。ここでは、衝突イベントを別クラスに切り分けていきます。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 衝突イベントを別クラスに切り分ける まとめ 参考書籍 衝突イベントを別クラスに切り分ける CustomListenerクラスに衝突イベントを切り分けます。以下は、その参考例です。 //オブジェクトをコントロールする基本例 //どのオブジェクトがヒットした…
「The Nature of Code」から衝突イベントとヒットしたオブジェクトの判別について取り上げます。物体が衝突したあとに、その物体がどのようなオブジェクトなのか判別します。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 衝突イベントとヒットしたオブジェクトの判別 まとめ 参考書籍 衝突イベントとヒットしたオブジェクトの判別 物体が衝突したあとに物体がどのようなオブジェクトなのか判別します。オブジェクトの型の種類によって、処理の内容を変更します。以下は、その参考例です。 //CollisionsAndContr…
「The Nature of Code」から衝突イベントと物体の削除について取り上げます。物体が衝突したらその物体を消します。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 衝突イベントと物体の削除 まとめ 参考書籍 衝突イベントと物体の削除 パーティクルが地面に当たったら、パーティクルの色を変更します。パーティクル同士が当たったら、消します。以下は、その参考例です。 //CollisionListeningDeletionExercise import shiffman.box2d.*; import org.jb…
「The Nature of Code」から衝突イベントの基礎について取り上げます。物体が衝突したときの処理の基本的な書き方を見ていきます。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 衝突イベントのコールバック 衝突イベントの基礎 まとめ 参考書籍 衝突イベントのコールバック 衝突イベントのコールバックは、以下の4つがあります。 beginContact() endContact() preSolve() postSolve() 衝突イベントの基礎 2つの物体が衝突したら色を変更します。以下は、その参考例です。 …
「The Nature of Code」から引き寄せる力ついて取り上げます。ある物体に複数の物体を引き寄せます。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 引き寄せる力 まとめ 参考書籍 引き寄せる力 Box2DのapplyForce()メソッドを利用して、力を適用します。以下は、その参考例です。 //Basic example of falling rectangles //AttractionApplyForce import shiffman.box2d.*; import org.jbox2d.commo…
「The Nature of Code」から風で引き寄せられる力について取り上げます。物体に風の力を適用します。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 風で引き寄せられる力 まとめ 参考書籍 風で引き寄せられる力 Box2DのapplyForce()メソッドを利用して、風の力を適用します。以下は、その参考例です。 //Basic example of falling rectangles //ApplyForceSimpleWind import shiffman.box2d.*; import org.jb…
「The Nature of Code」からマウスに引き寄せられる力ついて取り上げます。マウスでクリックした場所に物体を引き寄せます。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 マウスに引き寄せられる力 まとめ 参考書籍 マウスに引き寄せられる力 Box2DのapplyForce()メソッドを利用して、物体に力を適用します。以下は、その参考例です。 //Basic example of falling rectangles //ApplyForceAttractMouse import shiffman.box2…
「The Nature of Code」からキネマティックボディについて取り上げます。ボディのタイプをキネマティックにして、物体を引っ張ってみます。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 キネマティックボディ まとめ 参考書籍 キネマティックボディ マウスジョイントを使って物体をドラッグしていましたが、ボディのタイプをキネマティックにすることでも実現できます。 以下は、その参考例です。 注意としてキネマティックボディは、キネマティックまたはスタティックなボディと衝突しません。衝突させたい場合は、マウスジョイン…
「The Nature of Code」からマウスジョイントについて取り上げます。マウスジョイントを利用して物体を引っ張ってみます。Processingでプログラムを書いて、動作を確認します。動作を確認できるところがProcessingの楽しいところです。 マウスジョイント まとめ 参考書籍 マウスジョイント 以下は、マウスジョイントで物体を引っ張る参考例です。 //MouseJoint demonstration import shiffman.box2d.*; import org.jbox2d.common.*; import org.jbox2d.dynamics.joints.*; …