Einzelnen Beitrag anzeigen

Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#15

Re: Bitmap zurück geben und freigeben

  Alt 4. Jan 2008, 09:38
Mal ganz blöd gefragt. Warum musst du eigentlich jedes Mal ein Bild anlegen, wenn du das Objekt zeichnen willst? Wäre es nicht besser, wenn das StaticObjekt sich selbst um die Verwaltung des Bitmaps kümmert und es nur zur Verfügung stellt. Also mit anderen Worten beim Erstellen des StaticObject wird das Bitmap angelegt und evtl schon befüllt und beim Zeichnen greifst du nur noch auf dieses erstellte Bitmap zu.

Wenn das Bitmap sehr dynamisch sein muss, dann kannst es aber auch trotzdem so lösen. Aber in dem Appear dann einfach nur das interne Bitmap befüllen, zurückgeben und nur benutzen. Also nicht freigeben. Um es etwas zu verdeutlichen.

Delphi-Quellcode:
type
  TStaticObject = class
  private
    fBitmap: TBitmap;
  public
    property Bitmap: Integer read fBitmap;

    function Appear: TBitmap;

    constructor Create;
    destructor Destroy; override;
  end;


constructor TStaticObject.Create;
begin
  inherited;
  fBitmap := TBitmap.Create;
  // Entweder hier schon befüllen.
end;

destructor TStaticObject.Destroy;
begin
  fBitmap.Free;
  inherited;
end;

function TStaticObject.Appear: TBitmap;
begin
  // Oder hier das Bitmap befüllen und zurückgeben
  Result := fBitmap;
end;
Darstellen könntest du es dann folgendermaßen.
Delphi-Quellcode:
// entweder direkt das Bitmap darstellen
GameScreen.Canvas.Draw(StaticObject.PosX, StaticObject.PosY, StaticObject.Bitmap);

// oder aber mit der Methode die nur das Bitmap zurück gibt.
GameScreen.Canvas.Draw(StaticObject.PosX, StaticObject.PosY, StaticObject.Appear);
Damit könntest du bei jedem Zeichnen das Bitmap anpassen (Methode Appear), falls das StaticObject doch mehr ein dynamisches Objekt ist. Du würdest aber a. nicht ständig bitmaps anlegen und freigeben und b. hättest auch kein Speicherloch und c. einfacher code und klare regelung wer sich um das Bitmap zu kümmern hat. Nämlich die Klasse TStaticObject zu der es ja schließlich gehört und niemand anders.

PS: Es ist übrigens nicht so abwägig, dass sich die Objekte selber zeichnen. Denn eigentlich ist das genau der tiefere Sinn hinter OOP. Die Szene muss so immer genau wissen wie die Objekte gezeichnet werden müssen. Und das gehört eigentlich nicht zu ihren Aufgaben. Besser (klarrer Strukturiert) wäre es, wenn nur das Objekt wüsste wie es gezeichnet werden muss und sich auch selbst darum kümmert. Die Szene würde dann nur sagen. ObjektXYZ zeichne dich mal. Das aber nur so am Rande.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat