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

Delphi/CppBuilder

开发平台:

Delphi

  1. unit UBridge;
  2. interface
  3. {$I ......SourcePhysics2D.inc}
  4. uses
  5.    UMain, UPhysics2DTypes, UPhysics2D, SysUtils;
  6. type
  7.    TBridge = class(TTester)
  8.    public
  9.       constructor Create; override;
  10.    end;
  11. implementation
  12. { TBridge }
  13. constructor TBridge.Create;
  14. const
  15.    numPlanks = 30;
  16. var
  17.    i: Integer;
  18.    ground, prevBody, body: Tb2Body;
  19.    sd: Tb2PolygonDef;
  20.    bd: Tb2BodyDef;
  21.    jd: Tb2RevoluteJointDef;
  22. begin
  23.    inherited;
  24.    begin
  25.       sd := Tb2PolygonDef.Create;
  26.       sd.SetAsBox(50.0, 10.0);
  27.       bd := Tb2BodyDef.Create;
  28.       {$IFDEF OP_OVERLOAD}
  29.       bd.position.SetValue(0.0, -10.0);
  30.       {$ELSE}
  31.       SetValue(bd.position, 0.0, -10.0);
  32.       {$ENDIF}
  33.       ground := m_world.CreateBody(bd);
  34.       ground.CreateShape(sd);
  35.    end;
  36.    begin
  37.       sd := Tb2PolygonDef.Create;
  38.       sd.SetAsBox(0.5, 0.125);
  39.       sd.density := 20.0;
  40.       sd.friction := 0.2;
  41.       jd := Tb2RevoluteJointDef.Create;
  42.       prevBody := ground;
  43.       bd := Tb2BodyDef.Create;
  44.       for i := 0 to numPlanks - 1 do
  45.       begin
  46.          {$IFDEF OP_OVERLOAD}
  47.          bd.position.SetValue(-14.5 + 1.0 * i, 5.0);
  48.          {$ELSE}
  49.          SetValue(bd.position, -14.5 + 1.0 * i, 5.0);
  50.          {$ENDIF}
  51.          body := m_world.CreateBody(bd, False);
  52.          body.CreateShape(sd, False);
  53.          body.SetMassFromShapes;
  54.          jd.Initialize(prevBody, body, MakeVector(-15.0 + 1.0 * i, 5.0));
  55.          m_world.CreateJoint(jd, False);
  56.          prevBody := body;
  57.       end;
  58.       bd.Free;
  59.       sd.Free;
  60.       jd.Initialize(prevBody, ground, MakeVector(-15.0 + 1.0 * numPlanks, 5.0));
  61.       m_world.CreateJoint(jd);
  62.    end;
  63. end;
  64. initialization
  65.    RegisterTestEntry('Bridge', TBridge);
  66. end.