diff options
author | chai <chaifix@163.com> | 2018-09-25 20:42:16 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-09-25 20:42:16 +0800 |
commit | 04da427e37c2c30befea6fd750de71e60fb9de22 (patch) | |
tree | 87af0d568e286e8ae0ee87343be12239e2e4e6e9 /Box2d/Assets/Program | |
parent | e61e555361940b1b3c865520d78b203df03237c5 (diff) |
Diffstat (limited to 'Box2d/Assets/Program')
-rw-r--r-- | Box2d/Assets/Program/Test/ApplicationMain.cs | 112 |
1 files changed, 101 insertions, 11 deletions
diff --git a/Box2d/Assets/Program/Test/ApplicationMain.cs b/Box2d/Assets/Program/Test/ApplicationMain.cs index bec4540..15aca5d 100644 --- a/Box2d/Assets/Program/Test/ApplicationMain.cs +++ b/Box2d/Assets/Program/Test/ApplicationMain.cs @@ -8,30 +8,120 @@ using Box2DX.Common; public class ApplicationMain : MonoBehaviour { + public Material material; + private World world; + private Body body; + private Body groundBody; - public Material material; + private Vec2 translate(Vec2 p) + { + //return new Vec2(p.X * 3 + 100, p.Y * 3 + 100); + return new Vec2(p.X, p.Y); + } - void OnPostRender() + private void Awake() + { + material.SetPass(0);//设置该材质通道,0为默认值 + + // if bodies reach the end of the world, but it will be slower. + AABB worldAABB = new AABB(); + worldAABB.LowerBound.Set(-100.0f, -100.0f); + worldAABB.UpperBound.Set(100.0f, 100.0f); + + // Define the gravity vector. + Vec2 gravity = new Vec2(0.0f, -10.0f); + + // Do we want to let bodies sleep? + bool doSleep = true; + + // Construct a world object, which will hold and simulate the rigid bodies. + world = new World(worldAABB, gravity, doSleep); + + // Define the ground body. + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.Position.Set(0.0f, -10.0f); + + // Call the body factory which creates the ground box shape. + // The body is also added to the world. + groundBody = world.CreateBody(groundBodyDef); + + // Define the ground box shape. + PolygonDef groundShapeDef = new PolygonDef(); + + // The extents are the half-widths of the box. + groundShapeDef.SetAsBox(50.0f, 10.0f); + + // Add the ground shape to the ground body. + groundBody.CreateShape(groundShapeDef); + + // Define the dynamic body. We set its position and call the body factory. + BodyDef bodyDef = new BodyDef(); + bodyDef.Position.Set(0.0f, 80.0f); + body = world.CreateBody(bodyDef); + + // Define another box shape for our dynamic body. + PolygonDef shapeDef = new PolygonDef(); + shapeDef.SetAsBox(1.0f, 1.0f); + + // Set the box density to be non-zero, so it will be dynamic. + shapeDef.Density = 1.0f; + + // Override the default friction. + shapeDef.Friction = 0.3f; + + // Add the shape to the body. + body.CreateShape(shapeDef); + + // Now tell the dynamic body to compute it's mass properties base + // on its shape. + body.SetMassFromShapes(); + + // Prepare for simulation. Typically we use a time step of 1/60 of a + // second (60Hz) and 10 iterations. This provides a high quality simulation + // in most game scenarios. + } + + private void Update() + { + float timeStep = 1.0f / 60.0f; + int velocityIterations = 8; + int positionIterations = 1; + world.Step(timeStep, velocityIterations, positionIterations); + } + + private void OnRenderObject() { //绘制正四边形,提供的坐标必须是顺时针或者逆时针 - Draw(100, 100, 100, 200, 200, 200, 200, 100); - //绘制无规则四边形 - Draw(15, 5, 10, 115, 95, 110, 90, 10); + Vec2 position = body.GetPosition(); + Draw( + translate(new Vec2(position.X + 1, position.Y + 1)) + , translate(new Vec2(position.X + 1, position.Y - 1)) + , translate(new Vec2(position.X - 1, position.Y - 1)) + , translate(new Vec2(position.X - 1, position.Y + 1)) + ); + position = groundBody.GetPosition(); + Draw( + translate(new Vec2(position.X + 50, position.Y + 10)) + , translate(new Vec2(position.X + 50, position.Y - 10)) + , translate(new Vec2(position.X - 50, position.Y - 10)) + , translate(new Vec2(position.X - 50, position.Y + 10)) + ); } //绘制四边形,四个点坐标 - void Draw(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) + void Draw(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4) { GL.PushMatrix(); - //material.SetPass(0);//设置该材质通道,0为默认值 + material.SetPass(0);//设置该材质通道,0为默认值 + GL.LoadOrtho();//设置绘制2d图像 GL.Begin(GL.QUADS);//绘制类型为四边形 - GL.Vertex3(x1 / Screen.width, y1 / Screen.height, 0); - GL.Vertex3(x2 / Screen.width, y2 / Screen.height, 0); - GL.Vertex3(x3 / Screen.width, y3 / Screen.height, 0); - GL.Vertex3(x4 / Screen.width, y4 / Screen.height, 0); + GL.Vertex3(p1.X / Screen.width, p1.Y / Screen.height, 0); + GL.Vertex3(p2.X / Screen.width, p2.Y / Screen.height, 0); + GL.Vertex3(p3.X / Screen.width, p3.Y / Screen.height, 0); + GL.Vertex3(p4.X / Screen.width, p4.Y / Screen.height, 0); GL.End(); GL.PopMatrix(); |