게임 개발 11
15336 단어 JavaScript
box2dweb 사용
① 물리적 세계의 제작
② 동적 충돌 객체 만들기
③ 정적 충돌 객체 만들기
④ 드로잉 디버깅
나는 단숨에 하고 싶다.
이번 캡처.
공이 땅에 떨어져 구르다
모든 소스 코드.
test.html
<canvas id="canvas" width="600px" height="420px" style="background-color:#333333;"></canvas>
<script type="text/javascript" src="Box2dWeb-2.1.a.3.min.js"></script>
<script type="text/javascript">
// Box2Dオブジェクトを取得
var b2Vec2 = Box2D.Common.Math.b2Vec2 // 2Dベクトル
, b2BodyDef = Box2D.Dynamics.b2BodyDef // Body定義
, b2Body = Box2D.Dynamics.b2Body // Body
, b2FixtureDef = Box2D.Dynamics.b2FixtureDef // Fixture定義
, b2Fixture = Box2D.Dynamics.b2Fixture // Fixture
, b2World = Box2D.Dynamics.b2World // 物理世界
, b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape // 衝突オブジェクトの形状(多角形)
, b2CircleShape = Box2D.Collision.Shapes.b2CircleShape // 衝突オブジェクトの形状(円)
, b2DebugDraw = Box2D.Dynamics.b2DebugDraw // デバッグ描画
// 物理世界を作る
var world = new b2World(new b2Vec2(0,10), true);
// 動的衝突オブジェクト生成
var bodyDef = new b2BodyDef;
bodyDef.type = b2Body.b2_dynamicBody;
bodyDef.position.Set(4,8);
bodyDef.userData = 'obj'; // 任意のユーザーデータ
// 材質と形状
var fixDef = new b2FixtureDef;
fixDef.density = 10.0; // 材質の密度(重さ)
fixDef.friction = .9; // 摩擦係数
fixDef.restitution = .2; // はね返り係数
fixDef.shape = new b2CircleShape(1); // 円形状
// 円作成
var wheel = world.CreateBody(bodyDef);
wheel.CreateFixture(fixDef);
// 角速度(回転速度)指定
wheel.SetAngularVelocity(Math.PI*2);
// 位置と角度指定
wheel.SetPositionAndAngle(new b2Vec2(2,3),-20*(Math.PI/180));
// 静的衝突オブジェクト
var bodyDef = new b2BodyDef;
bodyDef.type = b2Body.b2_staticBody;
bodyDef.position.Set(10,12);
// 材質と形状
var fd = new b2FixtureDef;
fd.shape = new b2PolygonShape;
fd.shape.SetAsBox(10,1); // 箱型形状
// 地面作成
var holder = world.CreateBody(bodyDef);
holder.CreateFixture(fd);
// デバッグ描画の設定
var debugDraw = new b2DebugDraw();
debugDraw.SetSprite ( document.getElementById ("canvas").getContext ("2d"));
debugDraw.SetDrawScale(30); //描画スケール
debugDraw.SetFillAlpha(0.3); //半透明値
debugDraw.SetLineThickness(1.0);//線の太さ
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);// 何をデバッグ描画するか
world.SetDebugDraw(debugDraw);
window.setInterval(update,1000/60);
function update() {
world.Step(1 / 60, 10, 10); // 物理世界を更新する
world.DrawDebugData(); // デバック描画
world.ClearForces(); // 物理世界上の力をリセットする
};
</script>
다음은 해설.우선, Box2D의 개체는 매우 긴 것 같습니다.
우선 약칭 이름을 변수로 가져옵니다.
// Box2Dオブジェクトを取得
var b2Vec2 = Box2D.Common.Math.b2Vec2 // 2Dベクトル
, b2BodyDef = Box2D.Dynamics.b2BodyDef // Body定義
, b2Body = Box2D.Dynamics.b2Body // Body
, b2FixtureDef = Box2D.Dynamics.b2FixtureDef // Fixture定義
, b2Fixture = Box2D.Dynamics.b2Fixture // Fixture
, b2World = Box2D.Dynamics.b2World // 物理世界
, b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape // 衝突オブジェクトの形状(多角形)
, b2CircleShape = Box2D.Collision.Shapes.b2CircleShape // 衝突オブジェクトの形状(円)
, b2DebugDraw = Box2D.Dynamics.b2DebugDraw // デバッグ描画
충돌 객체 작성하기Body 및 Fixture가 필요합니다.
Body는 충돌 대상이 물리 세계에서 하는 동작을 결정한다.
Fixture는 재료와 모양을 결정합니다.
동적 신체는 물리 세계에서 충돌 판정이 있는 이동 대상이다
bodyDef.type = b2Body.b2_dynamicBody;
정적 신체는 물리 세계에서 충돌 판정이 있는 이동할 수 없는 대상이다 bodyDef.type = b2Body.b2_staticBody;
Body와 Fixture가 완료되면 물리적 세계에서 원과 지면이 생성됩니다. // 円作成
var wheel = world.CreateBody(bodyDef);
wheel.CreateFixture(fixDef);
...
// 地面作成
var holder = world.CreateBody(bodyDef);
holder.CreateFixture(fd);
디버그 드로잉을 설정합니다. // デバッグ描画の設定
var debugDraw = new b2DebugDraw();
debugDraw.SetSprite ( document.getElementById ("canvas").getContext ("2d"));
debugDraw.SetDrawScale(30); //描画スケール
debugDraw.SetFillAlpha(0.3); //半透明値
debugDraw.SetLineThickness(1.0);//線の太さ
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);// 何をデバッグ描画するか
world.SetDebugDraw(debugDraw);
준비가 다 된 후 정기적으로 다음 처리를 호출하십시오물리적 세계에서의 처리 진행
world.Step(1 / 60, 10, 10); // 物理世界を更新する
world.DrawDebugData(); // デバック描画
world.ClearForces(); // 物理世界上の力をリセットする
• 반탄 계수마찰력
각속도
매개 변수를 하나씩 해보면 될 것 같아요.
다음에는 모양이 복잡한 충돌 대상을 만들어야 돼요.
Reference
이 문제에 관하여(게임 개발 11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/teradonburi/items/c180ab545f3c39b4eb22텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)