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

Delphi/CppBuilder

开发平台:

Delphi

  1. unit UVaryingFriction;
  2. interface
  3. {$I ......SourcePhysics2D.inc}
  4. uses
  5.    UMain, UPhysics2DTypes, UPhysics2D, SysUtils;
  6. type
  7.    TVaryingFriction = class(TTester)
  8.    public
  9.       constructor Create; override;
  10.    end;
  11. implementation
  12. { TVaryingFriction }
  13. constructor TVaryingFriction.Create;
  14. const
  15.    friction: array[0..4] of Single = (0.75, 0.5, 0.35, 0.1, 0.0);
  16. var
  17.    i: Integer;
  18.    sd: Tb2PolygonDef;
  19.    bd: Tb2BodyDef;
  20.    body: Tb2Body;
  21. begin
  22.    inherited;
  23.    sd := Tb2PolygonDef.Create;
  24.    sd.SetAsBox(50.0, 20.0);
  25.    bd := Tb2BodyDef.Create;
  26.    {$IFDEF OP_OVERLOAD}
  27.    bd.position.SetValue(0.0, -20.0);
  28.    {$ELSE}
  29.    SetValue(bd.position, 0.0, -20.0);
  30.    {$ENDIF}
  31.    m_world.CreateBody(bd, False).CreateShape(sd, False);
  32.    sd.SetAsBox(13.0, 0.25);
  33.    {$IFDEF OP_OVERLOAD}
  34.    bd.position.SetValue(-4.0, 22.0);
  35.    {$ELSE}
  36.    SetValue(bd.position, -4.0, 22.0);
  37.    {$ENDIF}
  38.    bd.angle := -0.25;
  39.    m_world.CreateBody(bd, False).CreateShape(sd, False);
  40.    sd.SetAsBox(0.25, 1.0);
  41.    {$IFDEF OP_OVERLOAD}
  42.    bd.position.SetValue(10.5, 19.0);
  43.    {$ELSE}
  44.    SetValue(bd.position, 10.5, 19.0);
  45.    {$ENDIF}
  46.    m_world.CreateBody(bd, False).CreateShape(sd, False);
  47.    sd.SetAsBox(13.0, 0.25);
  48.    {$IFDEF OP_OVERLOAD}
  49.    bd.position.SetValue(4.0, 14.0);
  50.    {$ELSE}
  51.    SetValue(bd.position, 4.0, 14.0);
  52.    {$ENDIF}
  53.    bd.angle := 0.25;
  54.    m_world.CreateBody(bd, False).CreateShape(sd, False);
  55.    sd.SetAsBox(0.25, 1.0);
  56.    {$IFDEF OP_OVERLOAD}
  57.    bd.position.SetValue(-10.5, 11.0);
  58.    {$ELSE}
  59.    SetValue(bd.position, -10.5, 11.0);
  60.    {$ENDIF}
  61.    m_world.CreateBody(bd, False).CreateShape(sd, False);
  62.    sd.SetAsBox(13.0, 0.25);
  63.    {$IFDEF OP_OVERLOAD}
  64.    bd.position.SetValue(-4.0, 6.0);
  65.    {$ELSE}
  66.    SetValue(bd.position, -4.0, 6.0);
  67.    {$ENDIF}
  68.    bd.angle := -0.25;
  69.    m_world.CreateBody(bd, False).CreateShape(sd, False);
  70.    sd.SetAsBox(0.5, 0.5);
  71.    sd.density := 25.0;
  72.    bd.angle := 0.0;
  73.    for i := 0 to 4 do
  74.    begin
  75.       {$IFDEF OP_OVERLOAD}
  76.       bd.position.SetValue(-15.0 + 4.0 * i, 28.0);
  77.       {$ELSE}
  78.       SetValue(bd.position, -15.0 + 4.0 * i, 28.0);
  79.       {$ENDIF}
  80.       body := m_world.CreateBody(bd, False);
  81.       sd.friction := friction[i];
  82.       body.CreateShape(sd, False);
  83.       body.SetMassFromShapes;
  84.    end;
  85.    bd.Free;
  86.    sd.Free;
  87. end;
  88. initialization
  89.    RegisterTestEntry('Varying Friction', TVaryingFriction);
  90. end.