Einzelnen Beitrag anzeigen

Benutzerbild von bigben37
bigben37

Registriert seit: 19. Dez 2007
Ort: Freiburg
116 Beiträge
 
Delphi 2009 Professional
 
#1

[Andorra 2D]PhysicalTriangleSprite

  Alt 8. Dez 2008, 12:57
Hallo DP, ich brauche für mein Projekt ein PhysicalSprite in Form von einem Dreieck.

Ich habe mir die Constructors(eigentlich ja die Prozedur "InitializeShape") von TPhysicalBoxSprite und TPhysicalCylinderSprite angeschaut und habe entdeckt, dass sich diese beiden Prozeduren nicht unterscheiden, bis auf diese Zeile:
Delphi-Quellcode:
//TPhysicalCylinderSprite
  Construct := TPhysicalCylinderConstruct.Create(Physics);
//TPhysicalBoxSprite
  Construct := TPhysicalBoxConstruct.Create(Physics);
In beiden InitializeShape-Prozeduren wird das Construct so gefüllt;
Construct.CreateConstruct(Data); Also hab ich meine TPhysicalTriangleSprite-Klasse und die TPhysicalTriangleConstruct-Klasse geschrieben.

Das einzig wichtige ist nur die CreateConstruct-Funktion, die ich so geschrieben habe (ziemlich gleich wie die vom Box-Sprite):
Delphi-Quellcode:
procedure TPhysicalTriangleConstruct.CreateConstruct(
  AData: TPhysicalConstructData);
var
  Collision:PNewtonCollision;
  Inertia:TAdVector3;
begin
  if AData is TPhysicalSimpleData then
  begin
    with AData as TPhysicalSimpleData do
    begin
      Collision := NewtonCreateCone(Parent.NewtonWorld, Width, Height, nil);
      NewtonBody := NewtonCreateBody(Parent.NewtonWorld, Collision);
      NewtonReleaseCollision(Parent.NewtonWorld, Collision);

      with Inertia do
      begin
        x := Mass * (sqr(Height) + 10000) / 12;
        y := Mass * (sqr(Width) + 10000) / 12;
        z := Mass * (sqr(Width) + sqr(Height)) / 12;
        NewtonBodySetMassMatrix(NewtonBody, Mass, x, y, z);
      end;

      NewtonBodySetForceAndTorqueCallback(NewtonBody, ForceAndTorqueCallback);
    end;
  end;
end;
Nun funktioniert das ganze nicht so, wie ich will. Es wird zwar compiliert, aber wenn ein Bild mit einem Dreieck dem Sprite zuweise, passt das Bild nicht zum Sprite(Kollision ist anders).
Ich denke, dass der Fehler im 2. With-Block (with Inertia do ...) liegt, weil ich nicht recht verstehe, was x, y und z zugewiesen werden soll. Bis jetzt habe ich den With-Block vom TPhysicalBoxConstruct übernommen.

Weis jemand, wie man ein PhysicalTriangle macht?

MFG, Benjamin
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat