Exemplo n.º 1
0
        private void addBaffle(Body body)
        {
            try
            {
                if (body.GetUserData() == null)
                {
                    return;
                }
                GizmoComponents myGizmo = (GizmoComponents)body.GetUserData();
                //添加Shape
                addPolygon(body);
                //添加旋转关节
                BodyDef kinematicBodyDef = new BodyDef();
                Vec2    position         = GizmoShape.PointRotate(new Vec2(myGizmo.PositionX, myGizmo.PositionY),
                                                                  new Vec2(myGizmo.PositionX + myGizmo.Width, myGizmo.PositionY), System.Math.PI * 2 - myGizmo.Angle / 180 * System.Math.PI);
                kinematicBodyDef.Position.Set(position.X, position.Y);
                Body             kinematicBody = myWorld.CreateBody(kinematicBodyDef);
                RevoluteJointDef jointDef      = new RevoluteJointDef();
                switch ((int)myGizmo.Angle)
                {
                case 0:
                    jointDef.LowerAngle = -1.57f; //最小角
                    jointDef.UpperAngle = 0;      //最大角
                    break;

                case 90:
                    jointDef.LowerAngle = -1.57f;   //最小角
                    jointDef.UpperAngle = 1.57f;    //最大角
                    break;

                case 180:
                    jointDef.LowerAngle = 0f;    //最小角
                    jointDef.UpperAngle = 1.57f; //最大角
                    break;

                case 270:
                    jointDef.LowerAngle = 0f;    //最小角
                    jointDef.UpperAngle = 1.57f; //最大角
                    break;
                }
                jointDef.EnableLimit    = true;
                jointDef.MaxMotorTorque = 100.0f;
                jointDef.MotorSpeed     = 0.0f;
                jointDef.EnableMotor    = true;
                jointDef.Initialize(body, kinematicBody, position);
                RevoluteJoint joint = (RevoluteJoint)myWorld.CreateJoint(jointDef);
            }
            catch (Exception e)
            {
                MessageBox.Show("PhysicalWorld-addBaffleX函数出错");
            }
        }
Exemplo n.º 2
0
        public void draw(World world, Graphics g)
        {
            Body b = world.GetBodyList();
            int  i = 0;

            do
            {
                SolidBrush brush;
                if (b.GetUserData() == null)
                {
                    i++;
                    b = b.GetNext();
                    continue;
                }
                GizmoComponents GComp = (GizmoComponents)b.GetUserData();
                switch (GComp.Attribute)
                {
                case GizmoAttribute.pineBall:
                    brush = new SolidBrush(System.Drawing.Color.LawnGreen);
                    break;

                case GizmoAttribute.staticGizmo:
                    brush = new SolidBrush(System.Drawing.Color.LightBlue);
                    break;

                case GizmoAttribute.absorber:
                    brush = new SolidBrush(System.Drawing.Color.Red);
                    break;

                case GizmoAttribute.dynamicGizmo:
                    brush = new SolidBrush(System.Drawing.Color.Yellow);
                    break;

                case GizmoAttribute.track:
                    brush = new SolidBrush(System.Drawing.Color.Brown);
                    break;

                case GizmoAttribute.baffle:
                    brush = new SolidBrush(System.Drawing.Color.Gray);
                    break;

                default:
                    brush = new SolidBrush(System.Drawing.Color.Black);
                    break;
                }

                if (GComp == null)
                {
                    continue;
                }
                switch (GComp.Shape)
                {
                case GizmoType.Circle:
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                    g.FillEllipse(brush, (b.GetPosition().X - GComp.Radius) * Scale, (b.GetPosition().Y - GComp.Radius) * Scale, GComp.Radius * 2 * Scale, GComp.Radius * 2 * Scale);
                    break;

                case GizmoType.Rectangle:
                    g.FillRectangle(brush, (b.GetPosition().X - GComp.Width) * Scale + 1, (b.GetPosition().Y - GComp.Height) * Scale + 1, (GComp.Width) * Scale * 2 - 1, (GComp.Height) * Scale * 2 - 1);
                    break;

                case GizmoType.BaffleX:
                case GizmoType.Baffle:
                case GizmoType.Polygon:
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                    g.FillPolygon(brush, GizmoShape.getBodyPoint(b, Scale).ToArray());
                    break;
                }
                i++;
                b = b.GetNext();
            } while (i < world.GetBodyCount() - 1);
        }