box2djsの作法 その2
4753 ワード
概要
box2djsの作法、調べてみた。
gameです。
写真
サンプルコード
var b2Vec2 = Box2D.Common.Math.b2Vec2,
b2BodyDef = Box2D.Dynamics.b2BodyDef,
b2Body = Box2D.Dynamics.b2Body,
b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
b2World = Box2D.Dynamics.b2World,
b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef,
b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef,
b2RopeJointDef = Box2D.Dynamics.Joints.b2RopeJointDef,
b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef,
b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
b2Fixture = Box2D.Dynamics.b2Fixture,
b2AABB = Box2D.Collision.b2AABB,
b2MassData = Box2D.Collision.Shapes.b2MassData,
b2Color = Box2D.Common.b2Color,
b2PrismaticJointDef = Box2D.Dynamics.Joints.b2PrismaticJointDef;
var canvas = document.getElementById("c");
canvas.width = 456;
canvas.height = 456;
var world = new b2World(new b2Vec2(0, 10), true);
var count = 10;
function wall(angle, x, y, width, height) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_staticBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2PolygonShape;
fixDef1.shape.SetAsBox(width, height);
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
box1.SetAngle(angle * 3.14 / 180);
return box1;
}
function pin(x, y, r) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_staticBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2CircleShape(r);
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
return box1;
}
function tama(x, y, r) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_dynamicBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2CircleShape(r);
fixDef1.density = 0.09;
fixDef1.friction = 0.1;
fixDef1.restitution = 0.9;
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
return box1;
}
function box(angle, x, y, width, height) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_dynamicBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2PolygonShape;
fixDef1.shape.SetAsBox(width, height);
fixDef1.density = 0.9;
fixDef1.friction = 0.1;
fixDef1.restitution = 0.9;
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
box1.SetAngle(angle * 3.14 / 180);
return box1;
}
var w0 = wall(45, 21, 2, 1, 0.1);
var w1 = wall(-45, 2, 3, 1, 0.1);
var w2 = wall(-60, 1, 5, 1, 0.1);
var w3 = wall(-90, 1, 7, 1, 0.1);
var w4 = wall(-45, 17, 14, 1, 0.1);
var w5 = wall(45, 4, 14, 1, 0.1);
var w6 = wall(60, 2, 12, 1, 0.1);
var w8 = wall(-45, 15, 16, 1, 0.1);
var w9 = wall(45, 6, 16, 1, 0.1);
var g0 = wall(90, 8, 19, 1, 0.1);
var g1 = wall(0, 10, 20, 2, 0.1);
var g2 = wall(90, 12, 19, 1, 0.1);
var b0 = pin(14, 8, 1);
var p0 = box(0, 14, 8, 2, 2);
var _revoluteJointDef = new b2RevoluteJointDef();
_revoluteJointDef.Initialize(b0, p0, b0.GetPosition());
_revoluteJointDef.enableMotor = true;
_revoluteJointDef.motorSpeed = -2;
_revoluteJointDef.maxMotorTorque = 100;
_revoluteJointDef.enableLimit = false;
world.CreateJoint(_revoluteJointDef);
function shoot() {
count--;
if (count < 0) return;
//var c = document.getElementById("ball");
//c.innerHTML = "Ball: " + count;
var ball = tama(20, 16, 1.0);
//var p = Math.random() * 1 - 0.5;
ball.ApplyImpulse(new b2Vec2(0, -10), ball.GetWorldCenter());
}
function onMouseUp(e) {
//alert("")
shoot();
}
var debugDraw = new b2DebugDraw();
debugDraw.SetSprite(document.getElementById("c").getContext("2d"));
debugDraw.SetDrawScale(20);
debugDraw.SetFillAlpha(0.9);
debugDraw.SetLineThickness(1.0);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
world.SetDebugDraw(debugDraw);
window.addEventListener("mouseup", onMouseUp, false);
window.setInterval(loop, 1000 / 60);
function loop() {
world.Step(1 / 60, 10, 10);
world.DrawDebugData();
world.ClearForces();
};
成果物
var b2Vec2 = Box2D.Common.Math.b2Vec2,
b2BodyDef = Box2D.Dynamics.b2BodyDef,
b2Body = Box2D.Dynamics.b2Body,
b2FixtureDef = Box2D.Dynamics.b2FixtureDef,
b2World = Box2D.Dynamics.b2World,
b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,
b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,
b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef,
b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef,
b2RopeJointDef = Box2D.Dynamics.Joints.b2RopeJointDef,
b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef,
b2DebugDraw = Box2D.Dynamics.b2DebugDraw,
b2Fixture = Box2D.Dynamics.b2Fixture,
b2AABB = Box2D.Collision.b2AABB,
b2MassData = Box2D.Collision.Shapes.b2MassData,
b2Color = Box2D.Common.b2Color,
b2PrismaticJointDef = Box2D.Dynamics.Joints.b2PrismaticJointDef;
var canvas = document.getElementById("c");
canvas.width = 456;
canvas.height = 456;
var world = new b2World(new b2Vec2(0, 10), true);
var count = 10;
function wall(angle, x, y, width, height) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_staticBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2PolygonShape;
fixDef1.shape.SetAsBox(width, height);
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
box1.SetAngle(angle * 3.14 / 180);
return box1;
}
function pin(x, y, r) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_staticBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2CircleShape(r);
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
return box1;
}
function tama(x, y, r) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_dynamicBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2CircleShape(r);
fixDef1.density = 0.09;
fixDef1.friction = 0.1;
fixDef1.restitution = 0.9;
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
return box1;
}
function box(angle, x, y, width, height) {
var box1Def = new b2BodyDef;
box1Def.type = b2Body.b2_dynamicBody;
box1Def.position.Set(x, y);
var fixDef1 = new b2FixtureDef;
fixDef1.shape = new b2PolygonShape;
fixDef1.shape.SetAsBox(width, height);
fixDef1.density = 0.9;
fixDef1.friction = 0.1;
fixDef1.restitution = 0.9;
var box1 = world.CreateBody(box1Def);
box1.CreateFixture(fixDef1);
box1.SetAngle(angle * 3.14 / 180);
return box1;
}
var w0 = wall(45, 21, 2, 1, 0.1);
var w1 = wall(-45, 2, 3, 1, 0.1);
var w2 = wall(-60, 1, 5, 1, 0.1);
var w3 = wall(-90, 1, 7, 1, 0.1);
var w4 = wall(-45, 17, 14, 1, 0.1);
var w5 = wall(45, 4, 14, 1, 0.1);
var w6 = wall(60, 2, 12, 1, 0.1);
var w8 = wall(-45, 15, 16, 1, 0.1);
var w9 = wall(45, 6, 16, 1, 0.1);
var g0 = wall(90, 8, 19, 1, 0.1);
var g1 = wall(0, 10, 20, 2, 0.1);
var g2 = wall(90, 12, 19, 1, 0.1);
var b0 = pin(14, 8, 1);
var p0 = box(0, 14, 8, 2, 2);
var _revoluteJointDef = new b2RevoluteJointDef();
_revoluteJointDef.Initialize(b0, p0, b0.GetPosition());
_revoluteJointDef.enableMotor = true;
_revoluteJointDef.motorSpeed = -2;
_revoluteJointDef.maxMotorTorque = 100;
_revoluteJointDef.enableLimit = false;
world.CreateJoint(_revoluteJointDef);
function shoot() {
count--;
if (count < 0) return;
//var c = document.getElementById("ball");
//c.innerHTML = "Ball: " + count;
var ball = tama(20, 16, 1.0);
//var p = Math.random() * 1 - 0.5;
ball.ApplyImpulse(new b2Vec2(0, -10), ball.GetWorldCenter());
}
function onMouseUp(e) {
//alert("")
shoot();
}
var debugDraw = new b2DebugDraw();
debugDraw.SetSprite(document.getElementById("c").getContext("2d"));
debugDraw.SetDrawScale(20);
debugDraw.SetFillAlpha(0.9);
debugDraw.SetLineThickness(1.0);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
world.SetDebugDraw(debugDraw);
window.addEventListener("mouseup", onMouseUp, false);
window.setInterval(loop, 1000 / 60);
function loop() {
world.Step(1 / 60, 10, 10);
world.DrawDebugData();
world.ClearForces();
};
以上。
Author And Source
この問題について(box2djsの作法 その2), 我々は、より多くの情報をここで見つけました https://qiita.com/ohisama@github/items/6e0421736d94cad303fe著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .