UFixedJoint.pas
上传用户:zkjn0718
上传日期:2021-01-01
资源大小:776k
文件大小:3k
源码类别:

Delphi/CppBuilder

开发平台:

Delphi

  1. unit UFixedJoint;
  2. interface
  3. {$I ......SourcePhysics2D.inc}
  4. uses
  5.    UMain, UPhysics2DTypes, UPhysics2D, SysUtils;
  6. type
  7.    TFixedJoint = class(TTester)
  8.    public
  9.       constructor Create; override;
  10.    end;
  11. implementation
  12. { TFixedJoint }
  13. constructor TFixedJoint.Create;
  14. var
  15.    bd, bd1, bd2: Tb2BodyDef;
  16.    sd, sd1, sd2: Tb2PolygonDef;
  17.    ground, body1, body2: Tb2Body;
  18.    jd: Tb2FixedJointDef;
  19. begin
  20.    inherited;
  21.    begin
  22.       bd := Tb2BodyDef.Create;
  23.       {$IFDEF OP_OVERLOAD}
  24.       bd.position.SetValue(0.0, -10.0);
  25.       {$ELSE}
  26.       SetValue(bd.position, 0.0, -10.0);
  27.       {$ENDIF}
  28.       ground := m_world.CreateBody(bd);
  29.       sd := Tb2PolygonDef.Create;
  30.       sd.SetAsBox(50.0, 10.0);
  31.       ground.CreateShape(sd);
  32.    end;
  33.    begin
  34.       bd1 := Tb2BodyDef.Create;
  35.       {$IFDEF OP_OVERLOAD}
  36.       bd1.position.SetValue(1.0, 7.0);
  37.       {$ELSE}
  38.       SetValue(bd1.position, 1.0, 7.0);
  39.       {$ENDIF}
  40.       bd1.angle := 0.7;
  41.       body1 := m_world.CreateBody(bd1);
  42.       sd1 := Tb2PolygonDef.Create;
  43.       sd1.vertexCount := 3;
  44.       {$IFDEF OP_OVERLOAD}
  45.       sd1.vertices[0].SetValue(-2.0, -2.0);
  46.       sd1.vertices[1].SetValue(2.0, -2.0);
  47.       sd1.vertices[2].SetValue(2.0, 2.0);
  48.       {$ELSE}
  49.       SetValue(sd1.vertices[0], -2.0, -2.0);
  50.       SetValue(sd1.vertices[1], 2.0, -2.0);
  51.       SetValue(sd1.vertices[2], 2.0, 2.0);
  52.       {$ENDIF}
  53.       sd1.density := 10.0;
  54.       sd1.friction := 0.2;
  55.       body1.CreateShape(sd1);
  56.       body1.SetMassFromShapes;
  57.       bd2 := Tb2BodyDef.Create;
  58.       {$IFDEF OP_OVERLOAD}
  59.       bd2.position.SetValue(5.0, 6.0);
  60.       {$ELSE}
  61.       SetValue(bd2.position, 5.0, 6.0);
  62.       {$ENDIF}
  63.       bd2.angle := -0.2;
  64.       body2 := m_world.CreateBody(bd2);
  65.       sd2 := Tb2PolygonDef.Create;
  66.       sd2.SetAsBox(1.0, 2.0);
  67.       sd2.density := 30.0;
  68.       sd2.friction := 0.2;
  69.       body2.CreateShape(sd2);
  70.       body2.SetMassFromShapes;
  71.       jd := Tb2FixedJointDef.Create;
  72.       jd.collideConnected := False;
  73.       jd.Initialize(body1, body2);
  74.       m_world.CreateJoint(jd);
  75.    end;
  76.    begin
  77.       bd1 := Tb2BodyDef.Create;
  78.       {$IFDEF OP_OVERLOAD}
  79.       bd1.position.SetValue(20, 20);
  80.       {$ELSE}
  81.       SetValue(bd1.position, 20, 20);
  82.       {$ENDIF}
  83.       body1 := m_world.CreateBody(bd1);
  84.       sd1 := Tb2PolygonDef.Create;
  85.       sd1.SetAsBox(2, 2);
  86.       sd1.density := 10.0;
  87.       sd1.friction := 0.5;
  88.       sd1.restitution := 0.0;
  89.       body1.CreateShape(sd1);
  90.       body1.SetMassFromShapes;
  91.       bd2 := Tb2BodyDef.Create;
  92.       {$IFDEF OP_OVERLOAD}
  93.       bd2.position.SetValue(-5, 10);
  94.       {$ELSE}
  95.       SetValue(bd2.position, -5, 10);
  96.       {$ENDIF}
  97.       body2 := m_world.CreateBody(bd2);
  98.       sd2 := Tb2PolygonDef.Create;
  99.       sd2.SetAsBox(2.0, 2.0);
  100.       sd2.density := 10.0;
  101.       sd2.friction := 0.5;
  102.       sd2.restitution := 0.0;
  103.       body2.CreateShape(sd2);
  104.       body2.SetMassFromShapes;
  105.       jd := Tb2FixedJointDef.Create;
  106.       jd.collideConnected := False;
  107.       jd.Initialize(body1, body2);
  108.       m_world.CreateJoint(jd);
  109.    end;
  110. end;
  111. initialization
  112.    RegisterTestEntry('Fixed Joint', TFixedJoint);
  113. end.