Ich versuche mich gerade mal wieder an der Newton Physik Engine. Im Speziellen habe ich ein Spiel, in welchem es jede Menge "Objekte" gibt. Diese Objekte will ich nun in die Newtonwelt einbinden, das mache ich mehr oder weniger in dem ich die unten stehende Routine aufrufe :
Code: Alles auswählen
type
NewtonApplyForceAndTorque = Procedure(Const body: PNewtonBody; timestep: Float; threadIndex: int); cdecl;
Procedure NewtonBodySetForceAndTorqueCallback(Const body: PNewtonBody; callback: NewtonApplyForceAndTorque); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetForceAndTorqueCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
Die Callbach Routine darf zumindest nach der Definition wie sie oben steht, keine Objekt Methode sein ( zudem ist sie noch in C Notation).
Nun kann ich mir natürlich was basteln, dass ich meine Objekte Global verfügbar macht und dann eine normale Routine als Callback übergibt, doch irgendwie wäre es mir viel lieber, wenn ich die Objektbezogene Routine
Code: Alles auswählen
type tBlabla =class
private
public
Procedure ForceAndTorqueCallback_LevelObjects(Const body: PNewtonBody; timestep: Single; threadIndex: integer); cdecl;
Procedure InitNewton();
end;
var bla:TBlabla;
Code: Alles auswählen
Procedure TBlabla.InitNewton();
Begin
FWoodBall.InitNewton(nil, @ForceAndTorqueCallback_LevelObjects);
End;
So meine Frage, weis hier jemand wie man es trotzdem machen kann, oder bleibt mir tatsächlich nur der Weg über die "Globale" Procedur ?