![]() |
[Andorra 2D]PhysicalTriangleSprite
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:
In beiden InitializeShape-Prozeduren wird das Construct so gefüllt;
//TPhysicalCylinderSprite
Construct := TPhysicalCylinderConstruct.Create(Physics); //TPhysicalBoxSprite Construct := TPhysicalBoxConstruct.Create(Physics);
Delphi-Quellcode:
Also hab ich meine TPhysicalTriangleSprite-Klasse und die TPhysicalTriangleConstruct-Klasse geschrieben.
Construct.CreateConstruct(Data);
Das einzig wichtige ist nur die CreateConstruct-Funktion, die ich so geschrieben habe (ziemlich gleich wie die vom Box-Sprite):
Delphi-Quellcode:
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).
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; 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 |
Re: [Andorra 2D]PhysicalTriangleSprite
*push*
Weis wirklich niemand weiter? Ich auch nicht! :wall: Oder ist das überhaupt nicht möglich? :gruebel: |
Re: [Andorra 2D]PhysicalTriangleSprite
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe einen kleinen Fortschritt gemacht: Das Dreieck ist jetzt einigermaßen stabil, nur die Textur ist ein bisschen zu klein. Also die anderen Physicalsprites kollidieren noch ausßerhalb der Textur (im Anhang ist ein Bild, mit dem man das besser zeigen kann. Die grünen Linien sind die Grenzen des Dreiecks, an denen die blauen Bälle kollidieren)
Der Quelltext sieht jetzt so aus:
Delphi-Quellcode:
procedure TPhysicalTriangleConstruct.CreateConstruct(
AData: TPhysicalConstructData); var Collision:PNewtonCollision; Inertia:TAdVector3; Mat1:TAdMatrix; begin if AData is TPhysicalSimpleData then begin with AData as TPhysicalSimpleData do begin Mat1 := AdMatrix_Rotation(0, 0 ,135 * Pi / 180); Collision := NewtonCreateCone(Parent.NewtonWorld, Width, Height, @mat1[0,0]); 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz