Ich habe mal alle Stellen zusammengesucht.
Die Deklaration der neuen Engine:
Delphi-Quellcode:
TZoomSpriteengine = class(TSpriteEngine)
private
FZoom: Integer;
procedure SetZoom(const Value: Integer);
public
property Zoom: Integer Read FZoom Write SetZoom;
end;
{............}
procedure TZoomSpriteengine.SetZoom(const Value: Integer);
var
r: TRect;
w, h: integer;
begin
FZoom := Value;
r := FSurfaceRect;
w := r.Right - r.Left;
h := r.Bottom - r.Top;
FSurfaceRect := Rect(r.Left - w * Zoom, r.Top - h * Zoom,
r.Right + w * Zoom, r.Bottom + h * Zoom);
end;
Und jetzt die Zoomfunktionen im Hauptprogramm:
Delphi-Quellcode:
procedure TForm1.ZoomIn(Sender: TObject);
begin
if Settings.Zoom = 1 then // Only Setup Zoom if change is necessary
Exit;
Settings.Zoom := 1; // Change Zoom to Close-View
SpriteEngine.Zoom := Settings.Zoom; // Apply View to Engine
AdDraw.AdAppl.Setup2DScene(DrawBox.Width * Settings.Zoom, // Recalibrate Viewports
DrawBox.Height * Settings.Zoom);
Spriteengine.X := Spriteengine.X - DrawBox.Width / 2; // Make Camera focus old target point
Spriteengine.Y := Spriteengine.Y - DrawBox.Height / 2;
end;
DrawBox ist eine PaintBox, die ich als Positionshilfe nutze. Settings ist nur eine Hilfsklasse.