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

Delphi/CppBuilder

开发平台:

Delphi

  1. unit UPhysicsDebug;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, UPhysics2D, UPhysics2DTypes, StdCtrls, ExtCtrls;
  6. type
  7.   TfrmDebug = class(TForm)
  8.     ListBox1: TListBox;
  9.     procedure FormCreate(Sender: TObject);
  10.   private
  11.     { Private declarations }
  12.   public
  13.     { Public declarations }
  14.   end;
  15. var
  16.   frmDebug: TfrmDebug;
  17. implementation
  18. {$R *.dfm}
  19. var
  20.    world: Tb2World;
  21.    groundBody: Tb2Body;
  22. procedure TfrmDebug.FormCreate(Sender: TObject);
  23. var
  24.    worldAABB: Tb2AABB;
  25.    gravity: TVector2;
  26.    groundDef, bodyDef: Tb2BodyDef;
  27.    groundShapeDef, shapeDef: Tb2PolygonDef;
  28.    body: Tb2Body;
  29.    timeStep: Float;
  30.    iterations: Int32;
  31.    i: Integer;
  32.    position: TVector2;
  33.    angle: Float;
  34. begin
  35.    //ReportMemoryLeaksOnShutdown := True;
  36.    SetValue(worldAABB.lowerBound, -100, -100);
  37.    SetValue(worldAABB.upperBound, 100, 100);
  38.    //worldAABB.lowerBound.SetValue(0 ,0);
  39.    //worldAABB.upperBound.SetValue(img.Width, img.Height);
  40.    SetValue(gravity, 0, -10);
  41.    world := Tb2World.Create(worldAABB, gravity, True);
  42.    groundDef := Tb2BodyDef.Create;
  43.    SetValue(groundDef.position, 0, -10);
  44.    groundBody := world.CreateBody(groundDef);
  45.    groundShapeDef := Tb2PolygonDef.Create;
  46.    groundShapeDef.SetAsBox(50.0, 10.0);
  47.    // Add the ground shape to the ground body.
  48.    groundBody.CreateShape(groundShapeDef);
  49.    // Define the dynamic body. We set its position and call the body factory.
  50.    bodyDef := Tb2BodyDef.Create;
  51.    SetValue(bodyDef.position, 0.0, 4.0);
  52.    body := world.CreateBody(bodyDef);
  53.    // Define another box shape for our dynamic body.
  54.    shapeDef := Tb2PolygonDef.Create;
  55.    shapeDef.SetAsBox(1.0, 1.0);
  56.    // Set the box density to be non-zero, so it will be dynamic.
  57.    shapeDef.density := 1.0;
  58.    // Override the default friction.
  59.    shapeDef.friction := 0.3;
  60.    // Add the shape to the body.
  61.    body.CreateShape(shapeDef);
  62.    // Now tell the dynamic body to compute it's mass properties base
  63.    // on its shape.
  64.    body.SetMassFromShapes();
  65.    // Prepare for simulation. Typically we use a time step of 1/60 of a
  66.    // second (60Hz) and 10 iterations. This provides a high quality simulation
  67.    // in most game scenarios.
  68.    timeStep := 1.0 / 60.0;
  69.    iterations := 10;
  70.    ListBox1.Items.BeginUpdate;
  71.    for i := 0 to 59 do
  72.    begin
  73.       {$IFDEF DEBUG_LOG}
  74.       DEBUG.Add('i  ' + IntToStr(i));
  75.       {$ENDIF}
  76.       // Instruct the world to perform a single step of simulation. It is
  77.       // generally best to keep the time step and iterations fixed.
  78.       world.Step(timeStep, iterations);
  79.       // Now print the position and angle of the body.
  80.       position := body.GetPosition;
  81.       angle := body.GetAngle;
  82.       ListBox1.Items.Add(Format('%d  x: %f  y: %f  a: %f', [i, position.x, position.y, angle]));
  83.    end;
  84.    ListBox1.Items.EndUpdate;
  85.    world.Free;
  86.    {$IFDEF DEBUG_LOG}
  87.    DEBUG.SaveToFile('Log.txt');
  88.    {$ENDIF}
  89. end;
  90. end.