Thema: Delphi Andorra und Newton

Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Andorra und Newton

  Alt 22. Jan 2008, 12:13
Hi,

Danke.. Hab ich auch eben grad festgestellt
Hab da aber noch ne weitere Frage....

Wenn ein Sprite auf den Boden fällt, dann springt es nochmals etwas nach oben, knallt wieder auf und springt wieder ein bisschen und landet dann endlich. Also sone Art "Flummieeffekt". Kann man das irgendwie ausschalten? Mich stört das. Ich dachte mal daran die Masse des fallenden Objekts groß genug zu machen. Nach meinem physikalischen Verständnis sollte da dann eigentlich nichts mehr hüpfen. Funktioniert aber leider nicht. Mein zweiter Ansatz war folgendes:

Delphi-Quellcode:
TDragonSprite = class(TPhysicalBoxSprite)
private
  FFrozen: Boolean;
  procedure SetFrozen(const Value: Boolean);
protected
  procedure DoMove(TimeGap:double); override;
  procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
public
  property Frozen: Boolean read FFrozen write SetFrozen;
  procedure Stop;
end;
Delphi-Quellcode:
procedure TDragonSprite.SetFrozen(const Value: Boolean);
begin
  FFrozen := Value;
  Active := not Value;
  CanDoMoving := not Value;
  if Value then
    Typ := ptStatic
  else
    Typ := ptDynamic;
  InitializeShape;
end;

procedure TDragonSprite.Stop;
begin
  Frozen := true;
  Frozen := false;
end;
Frozen := true; friert das Sprite sofort ein und unterbricht es bei allen physikalischen "Tätigkeiten"

Meine Idee:

Bei der Kollision mit dem Boden Stop; aufrufen. So würde das Sprite gestoppt, es würde nicht mehr hochspringen und danach kann es wieder gegebenenfalls auf weitere Kräfte reagieren. Soooweit die Theorie.

Geplante Durchführung:

Delphi-Quellcode:
procedure TDragonSprite.DoMove(TimeGap: double);
begin
  inherited DoMove(TimeGap);
  Collision;
end;

procedure TDragonSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  inherited DoCollision(Sprite,Done);
  if Sprite is TPhysicalBoxSprite then
    Stop;
end;

Problem:


Es kommt zu keiner Kollision! Anscheinend berührt das Sprite beim "Aufprall" nie wirklich das andere Sprite. Keine Ahnung.

Jedenfalls würde ich gerne wissen was ich da machen kann..

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat