Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zoomen und fixieren (https://www.delphipraxis.net/82931-zoomen-und-fixieren.html)

Kingpin000 22. Dez 2006 12:13


Zoomen und fixieren
 
Hallo zusammen,
ich bin dabei ein eine art brettspiel zu machen, da aber das spielfeld selber recht groß ist, wollt ich zum einen wissen wie man heranzoomt und die bewegung auf die spielfigur selber fixiert!!

danke im voraus!!

:dance:

Der_Unwissende 22. Dez 2006 12:29

Re: Zoomen und fixieren
 
Hi,
die Frage des Heranzoomens ist nicht so leicht pauschal zu beantworten. Das Problem liegt einfach darin, dass du gleich eine ganze Menge von verschiedenen Techniken zur Verfügung hast, um dein Spiel zu realisieren. Dabei sollten die drei gängisten Methoden darin liegen, dass du auf OpenGL, DirectX oder die GDI-Funktionen zurückgreifst.
Dafür gibt es dann z.B. auch in Delphi Kapselungen, hinter der TImage Komponente stehen z.B. zugriffe auf das GDI-Framework.

Für den einfachsten Fall (einfach nur im Sinne, dass du kein Fremdkomponente verwendest), dass du hier einfach mit Bitmaps arbeitest, so kannst gibt es auch hier wieder zwei Möglichkeiten. Einerseits kannst du mit einem großen Bitmap arbeiten, dass du als TBitmap Objekt im Speicher hälst und ständig aktualisierst. Hier kannst du dann einfach (abhängig vom Zoomfaktor) einen Ausschnitt um die Koordinaten deines Ziels kopieren und dann immer nur diesen Ausschnitt anzeigen.
Alternativ kannst du aber auch einfach (wiederum abhängig vom Zoomfaktor) just in time berechnen, was gerade rund um dein Ziel angezeigt werden soll. Dabei hast du halt wirklich nur den aktuell betrachteten Ausschnitt im Speicher, ein Wechsel der Position führt dann ggf. dazu, dass du das Bild komplett neu berechnen musst.

Der erste Weg ist natürlich deutlich speicher-lastiger als der Zweite, sollte dafür aber weniger Rechenzeit benötigen, der zweite Weg wiederum benötigt mehr Rechenzeit, du hälst aber immer nur den aktuellen Ausschnitt im Speicher.

Um einen Ausschnitt schnell zu kopieren (1:1) bietet sich die Funktion BitBlt (Windows API) an, um einen Ausschnitt auch noch zu strecken/stauchen kannst du StretchBlt (auch Windows API) verwenden. Hier musst du die Handle Eigenschaft eines Ziel- und Quellcanvas, die Größe des Ausschnitts (und bei StretchBlt auch des Ziel Ausschnitts) angeben.

Gruß Der Unwissende


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz