Die Community zu .NET und Classic VB.
Menü

Spieleprogrammierung

 von 

Übersicht 

Ziele & Danksagung
Ich möchte mit diesem Kurs zeigen, daß es entgegen anders lautenden Gerüchten möglich ist, in Visual Basic Spiele zu programmieren, die durchaus aktzeptable Ablauf-Geschwindigkeiten erreichen. Der Artikel wird von mir auf Grund seines Umfangs ungefähr wöchentlich um je ein Kapitel erweitert werden. Besonderer Dank geht hierbei an die Zeichnerin Edith Vis, für ihre exklusiv zu diesem Artikel gefertigten Illustrationen.

Mit freundlichen Grüßen
Dirk Lietzow

Zu Beginn ein paar Gedanken  

Ideen

Ideen sind der Ausgangspunkt für jedes Spiel. Wer eine gute Idee hat und sich sicher ist, nicht schon wieder nur einen dieser zahlreichen Klone erdacht zu haben, hat schon einmal eine gute Basis.
Originalität ist also angesagt. Naja, wird der eine oder andere sagen. "Neue originelle Ideen habe ich genug !", "Nur wie setze ich Sie um ?". Tja, das ist eine zweite Geschichte, zu der wir später noch genauer kommen werden. Theorie und Praxis sind in punkto Ideen die größten Gegensätze.


Abbildung 1

Was sind Ideen eigendlich?

Nein, machen Sie sich keine Sorgen, das wird jetzt hier keine Vertiefung in eine metaphysische Diskussion - sondern mehr eine eigene Definition von mir ;-)

"was Sie denken, daß Sie tun werden - bevor Sie es tun."

Ideen bilden das Spiegelbild für Ihr Spiel. Diese Ideen können Figuren umfassen, oder Zeichnungen, Tätigkeiten, Bewegungen, Diagramme von Puzzlespielen, Schnittstellen-Konzepte, Dialoge, sogar spezifische Programmier-Techniken oder Algorhytmen sein.

Wie erhalte ich sie?

Der eine hat sie, der Andere nicht, könnte man da einfachheitshalber sagen. Für alle die keine Idee darüber haben, wie man zu Ideen kommt, hier ein paar grundlegende Vorraussetzungen:


Abbildung 2

  • Anregung (z.B. spielen Sie andere Spiele, Videos, Filme, Bücher lesen, Musik, was auch immer)
  • Skizzen (sammeln Sie Material, indem Sie alles an das Sie denken, irgendwie notieren damit Sie sich später wieder genau daran erinnern können)
  • Kommunikation (Teilen Sie "Geistesblitze" - mit Freunden oder Gleichgesinnten zum Verfeinern Ihrer Ideen und den dadurch entstehenden neuen Ideen)

Keine Angst vor Kritik, oder daß die Leute die Idee nicht gedanklich teilen können. Sogar der dümmste Vorschlag kann überraschende Wirkungen haben. Wer hätte gedacht, das ein Spiel mit ungeraden geformten fallenden Blöcken die Welt im Sturm erobern würde ("Tetris" für die von Ihnen, die sich nicht an die 8-bit Tage erinnern).
Gehen wir mal einfach davon aus, daß Sie schon ein Menge Ideen gesammelt haben .....

Die reale Welt

Mit diesen wundervollen Ideen fest im Geiste, denken Sie über die Realisierbarkeit Ihres Programms nach. Dabei finden Sie vermutlich heraus, das einiges nicht auf die Weise möglich ist, wie Sie ursprünglich geplant hatten, oder Sie bekommen andere und bessere Ideen während der Planung selbst.
Dieses ist vermutlich eine normale Sache, denn wenn Sie Ihre Ideen sofort umsetzen könnten, müssten Sie ein Meister der Planung sein. Es ist ja vielmehr so, daß Sie Ihr eigenes mit Ihren Ideen Spiel entwickeln, und das kann je nach vorhandenem Ehrgeiz, ein Kampf bis aufs letzte Bit werden.
Jetzt haben Sie Ideen, aber welche bilden ein Spiel ?


Abbildung 3

Was kein Spiel ist

  • Puzzlespiele - Puzzlespiele sind statisch, nicht interaktiv. Gute Spiele haben vermutlich Puzzlespielelemente, sie sollten aber nicht GERADE ein Puzzlespiel sein.
  • Spielwaren - Spielwaren sind interaktiv, aber haben kein Ziel. z.B. mit Blöcken spielen, Simcity.
  • Geschichten - Geschichten sind irgendeine nicht lineare Darstellung, in der der Spieler seine eigenen Entscheidungen trifft.

Was ein Spiel ist

  • Beschlußfassung - Abhängigkeit in sich bildet noch kein Spiel, die Abhängigkeit muß Resultate haben. Folglich trifft der Spieler eine Entscheidung über irgendetwas, das ein Resultat ergibt.
  • Ziele - es muß Ziele in einem Spiel geben, also können Spieler ihren Fortschritt erkennen. Die Qualität der Entscheidungen. Z.B. Punkte, Überleben, erhöhte Funktionen.
  • Opposition - es macht keinen Spaß, mit sich selber zu spielen. Erinnern Sie sich, daß es ein Kampf sein sollte... Es ist bereitet einfach keinen Spaß, zu leicht zu gewinnen.
  • Handhabung und Betriebsmittel - ein Teil der Beschlußfassung und des Fortschritts nennt man Management der Betriebsmittel. Z.B., wann Sie die Extramunition benutzen ?, das magische Schild gebrauchen ?, schicken Sie jene Extratruppen zur Frontseite ?, geben Sie das Geld für neue Reifen aus ? u.s.w....
  • Informationen - ein Spieler benötigt Informationen um Entscheidungen treffen zu können. Informationen fügen zur Erfahrung und zum Realismus des Spiels bei, auch während des Spielablaufs sollte ein Spieler ausreichend damit versorgt werden. Z.B. Hintergrundbiographien in einem Abenteuerspiel oder benutzen Sie das Windmessinstrument, wenn Sie einen Golfschuß nachbilden.

Was ein besseres Spiel bilden kann

  • Diplomatie - Multiuser-Spiele sollten Gruppen der Diplomatie bilden (Soziale Abhängigkeit). z.B. das Erstellen eines neuen Bauteils durch die eine Gruppe, helfen möglicherweise einer anderen Gruppe, obgleich das Ziel unterschiedlich sein kann. Oder Sie betreiben Handelsbeziehungen mit einer anderen Gruppe, wobei Sie die dringend benötigten Ziegelsteine zum Bau des Dorfpalastes liefern und im Gegenzug Bier und Gewürze erhalten.


    Abbildung 4

  • Kunst - nicht gerade graphische Kunst, aber die Kunst der Darstellung. Jedermann bevorzugt ein Spiel mit Atmosphäre, das toll aussieht und sich leicht spielt (Benutzerschnittstelle).
  • Simulation - diese übernimmt die reale (oder fiktive) Situationen mit denen man vertraut ist und übergibt ihnen die Kontrolle. Das gibt Ihnen die Grundlagen der Kommunikation. Berühmte Personen, Nachrichten, die Geschichte und der Hintergrund sind die grundlegende Voraussetzung. Z.B. fliegen Sie ein Flugzeug, steuern eine Stadt, befehlen eine Armee...
  • Vielzahl - Vier Gewinnt interessiert Leute nicht allzu lange. Vielzahl kann in einigen Weisen realisiert werden:
    A) Gelegentliche Elemente z.B. Prämien, Glückstreffer, Bonusrunden, verschiedene Endgegner
    B) Die Kompliziertheit des Spielablaufs zur Verfügung stellen
    C) Progressives gameplay, z.B. die Spieländerungen, während Sie weiterkommen.
  • Rollenspiel - Der Spieler übernimmt die Rolle der Spielfigur und kann sich damit personifizieren, z.B. durch die Rolle von Batman, Caesar, Napoleon annehmen oder allgemeiner einen Zauberer, Magier, Gnom, Kampfzwerg, u.s.w. darzustellen. Der Spieler wird in das soziale Umfeld eingesetzt und spielt seine Rolle im Bezug auf die Abhängigkeiten mit dem Spielszenario, anderen Spielern oder Spielfiguren. Dabei können viele Aspekte der Charakterisierung berücksichtigt werden, z.B. Intelligenz, Geschicklichkeit, Erfahrung, Stärke, Mut, Schnelligkeit ....
  • Geselligkeit - es ist ein interessanter Aspekt, den die meisten Einzel-Computerspiele Spiele inne haben. Dennoch sind eigentlich andere Formen der Spiele ganz sozialer Natur, z.B. Sport, Karten, Brettspiele..., Das Internet bildet für Multiuserspiele eine neue technische Möglichkeit. Das Fördern des kollektiven Bewusstseins und der Ehrgeiz der Bessere zu sein. Oder einfach nur mit mehreren der Lösung ein Schritt näher zu kommen. Dadurch können die verschiedenen Sozialaspekte genutzt werden.
  • Spannung - angelehnt an Filmen, sollte das Schlüsselelement, die Spannung, einer aufregenden Geschichte, bis zum Erreichen des drastischen Endes, folgen.

Grundlegende Spielkategorien

Spiele zerfallen im allgemeinen in grundlegende Kategorien. Sie sollten dieses bis zu dem Einführen Ihres Spiels im Auge behalten, aber Sie können auch beschließen, Teile jedes Genre zu mischen und zusammenzubringen

  • Plattformspiele - lassen Sie laufen und springen z.B. Mario, Jazz Jackrabbit, Prinz von Persien.
  • Schießen - Ballern Sie alles ab was Ihnen unter das Fadenkreuz kommt. (Moorhuhn)
  • Abenteuer - mehrfache Standorte, Nachrichten, Zeichen und Tätigkeiten streben ein Ziel in einer definierten Welt sorgfältig an. z.B. Könige, Quest, Pharao und Maximum...
  • Rollenspiele - mehrfache Standorte, Nachrichten, Zeichen und Tätigkeiten in einer freieren Formularerforschung einer normalerweise größeren weniger definierten Welt. Ultima, Bards Tale...
  • Strategie - Kombination zwischen der Planung, der Analyse, Betriebsmittelverwaltung oder der Logik. z.B. Schach, Tetris, Zivilisation... Befehle und Eroberungen.
  • Kämpfen - Kinnhaken, Doppelter Salto rückwärts mit Bauchkick, die schwingende Hammerfaust ...., Bewegungsabläufe, z.B. Mortal-Kombat, Streetfighter ...
  • Simulation - allgemeine Bezeichnung zum Beschreiben "der realen Welt", z.B. Flugsimulatoren, Olympiaden u.s.w...

Zwei grundlegende Implementierungstechniken

Sie können die Graphiken der Spiele im Allgemeinen in zwei eindeutige Bereiche teilen (obgleich ein Spiel Aspekte von beiden kombinieren kann.):

  • 2D - Sprites, Verschieben der Bildschirmanzeige, Bitübersichten, Bildschirm und Animation - FLACH
  • 3D - freie Veranschaulichung, Texturpolygone - NICHT FLACH
Das kann jetzt stark vereinfacht scheinen, aber im Allgemeinen sind 2d und 3d Graphiken sehr unterschiedliche Techniken.

Wir umfassen die Grundlagen der 2d Graphiken später in einem Musterspiel zusammen. Im Allgemeinen haben 2d Spiele ein ziemlich direktes Konzept - Bilder (wie Papierausschnitte) werden auf dem Bildschirm platziert und im Spielverlauf bewegt und lokalisiert...

3d Spiele bringen unterdessen viel mehr Arbeit (und "höhere" Mathematik !) mit, aber dazu noch später ....

Umsetzung Ihrer Ideen  

Bei was beginnen?

Sie müssen [ wie schon in der Einführung erwähnt ] bei Ihrem Projekt früh beschließen, was für Techniken Sie anwenden - wobei Sie natürlich Ihre Fähigkeiten berücksichtigen sollten - wollen.


Abbildung 5

Die Techniken, die benötigt werden, können bereits Teile Ihrer Ideen, oder noch unbestimmt sein.
Sie recherchieren und prüfen, bis Sie einen genügenden Überblick über die Techniken erhalten, die erforderlich sind um das vollständige Projekt angehen zu können.
Es sollte keine Punkte geben, die Sie 6 Monate in Sachen Musik und Beschaffenheiten von 3d Modellen beschäftigt - was nicht heißen soll , daß Sie die Idee einer 3d Engine aufgeben.
Forschung ist also nicht so falsch, wobei Sie auf Tonnen von Büchern, Artikeln, Websites und Quellencodes gibt, zurückgreifen und diese zu Rate ziehen können.

Vorbereitung

Nehmen Sie sich die Zeit, in einem kurzen Entwurf alles festzulegen. Erstellen Sie Skizzen die Ihr Spiel veranschaulichen und die markanten Punkte verdeutlichen und herausstellen, um so genauer Sie dabei vorgehen desto mehr Zeit sparen Sie sich bei der späteren Realisierung.

Stellen Sie eine Liste der Betriebsmittel und des benötigten Personals auf [Sie können Künstler, Musikgurus, Programmierer, Verfasser benötigen...], Zeit [Sie kennen dieses "Material", von dem es NIE genug gibt - es sei denn, Sie sitzen beim Zahnarzt] und Ausrüstung [Computer, Software, Bildschirm, Miditastaturen...]

Überprüfung der Wirklichkeit

Sie haben bereits die zur Verfügung stehende Technik erfaßt, Sie haben einen kurzen Schriftsatz, der Ihr Spiel beschreibt - jetzt müssen Sie das folgende prüfen

  • Machbarkeit - überprüfen Sie ob Ihr Vorhaben überhaupt möglich ist. Ziehen Sie vergleichbare Techniken heran.
  • Können - ist der Bereich des Projektes innerhalb Ihrer Reichweite ? Bedenken Sie, dass das beste Spiel ein fertiges Spiel ist
  • Können - haben Sie das Geld und die Betriebsmittel [oder die richtien Kontakte] ? Bedenken Sie, dass Videoausrüstung, Künstler, spezielle Effekte und Arnold Schwarzenegger nicht gerade billig kommen.
  • Potential - was denken Ihre Freunde [Verleger, Mitarbeiter] von Ihrem Spiel, würden sie spielen wollen, was Sie beschreiben?
Dieses Stadium kann eine Menge Enttäuschung und verlorene Arbeit sparen. Lassen Sie sich also genügend Zeit wenn Sie die Wirklichkeit überprüfen und das Ergebnis Sie zum überarbeiten Ihres Schriftsatzes veranlasst.

Wie Sie beginnen?

Splitten Sie Ihr Spiel in Bestandteile. Grundlegende Kategorien "der Bestandteile", die Sie für Ihre Planung benötigen, umfassen:

  • Spielmaschine [Engine]
  • Extraprogrammierung [Anlage, Extrapuzzlespiele]
  • Benutzerschnittstelle, Design
  • Werte [Modelle, Kunst, Stichhaltige Effekte, Musik, Bildschirm]
  • Zufriedener Herausgeber und Hilfsprogramme
  • Inhalt Designs


Abbildung 6

Planung, Planen und noch mehr planen ...
Wenn es sich bei Ihrem Spiel um ein größeres Projekt handelt, besonders wenn Ihr Team größer als eine Person ist, kommt es am meisten auf eine gute Organisation an. Erarbeiten Sie Checklisten und stellen Sie Zeitlimits. Regelmäßige Besprechungen sind ebenso wichtig wie das deutliche formulieren und erklären Ihrer Ideen.

Programmier-Techniken  

Klassen & Collections


Abbildung 7

Seit VB 5.0 spricht eigentlich nichts mehr dagegen, auch komplexe Spiele unter VB zu entwickeln und umzusetzen. Natürlich kann in VB nicht alles gemacht werden und gerade bei der Spiele-Engine würde man in VB sehr schnell an Grenzen stoßen. Trotzdem ist VB in Verbindung mit DirectDraw durchaus eine ernstzunehmende Entwicklungs-Umgebung für zeitgerechte Spiele.

In VB ist die Möglichkeit Klassen zu nutzen und individuelle Eigenschafts-Schablonen zu ziehen verhältnismäßig neu. Man kann mit Collections eine Reihe von Informationen dynamisch zur Verfügung stellen und handhaben.
Das hört sich erst mal komplizierter an als es letztendlich ist.

Ein sehr kurzes OOP-Tutorial

Eine Klasse ist eine Schablone, mit deren Hilfe Sie beliebig viele Objekte gleichen Typs erstellen können. Jedes dieser Objekte belegt für seine Eigenschaften eigenen Speicherplatz und teilt den Code für seine Methoden und Ereignisse mit denen der gleichen Klasse angehörigen.
Denken Sie z.B an ein Gebäude, Sie können den Bauplan eines Gebäudes nehmen und damit 30 identische Gebäude aufbauen. Sie können dann durchmarschieren und die Eigenschaften der einzelnen Gebäude ändern und z.B. jedes in einer anderen Farbe anmalen.
Die VB-Hilfe beschreibt sogar Klassen und "benutzerdefinierte Typen mit Einstellung" weil Sie die Ereignisse und Methoden zusammen mit den Daten [Kapselung] speichern können.
Collections wiederum machen die Sache erst richtig interessant. Sie liefern eine einfache Weise, Objekte dynamisch zu handhaben. Collections besitzen die Möglichkeit der Indexierung, also können Sie spezifische Objekten in großen Collections schnell finden.
Weil Objekte Collections anderer Objekte enthalten können, ist es möglich auch komplexe Strukturen zu erstellen, die Früher nicht oder nur mit Zeigern [Pointer] realisierbar waren. Wollen wir uns das ganze mal an einem Beispiel verdeutlichen:


Abbildung 8

Die Klasse Spieler enthält Eigenschaften wie Name, Alter, Geschlecht, Größe, Erfahrung, Geschwindigkeit, Beweglichkeit, und Stärke ... und eine Collection, die Holding genannt wird.
Diese Collection enthält eine Gruppe anderer Objekte wie Kleidung, Messer, Rucksack. Jedes dieser Objekte hat wiederum ihre eigenen Eigenschaften. Der Rucksack enthält zum Beispiel Eigenschaften wie Größe, Farbe und wiederum eine Collection namens Holding. Diese Collection kann erneut weitere Objekte.
VB5 und höher bietet einen Class-Wizard, der das Erstellen und der Klasse und ihrer Schnittstelle sehr erleichtert.

Hier Teile des Codes:

'Dimensionieren der Variable des Typs Axt
Dim Meine_Axt As Axt

'Erstellen einer neuen Instanz der Klasse &Axt"
'Das so erzeugte Objekt befindet sich dann in
'der Variablen "Meine_Axt"
Set Meine_Axt = New Axt

Listing 1: Verwenden von Klassen

Dies bedeutet, daß Sie ein Objekt namens Meine_Axt vom Typ der Klasse Axt erstellt haben. Um eine größere Flexibilität zu erzielen, kann Meine_Axt auch als Object dimensioniert werden. Damit kann Meine_Axt jedes beliebige Objekt zugewiesen werden:

Dim Meine_Axt As Object
Set Meine_Axt = New Whatever

Listing 2: Das Zuweisen von Klassen

Man nennt diese Vorgehensweise Late Binding zu deutsch "Zur Laufzeit einbinden". Sie ist zwar wie gesagt flexibler, aber dafür insgesamt auch langsamer. Falls irgendwie möglich, sollte also darauf verzichtet werden. Nun haben wir ein Objekt, daß wie jedes andere unter VB genutzt werden kann, z.B.:

text1.text = "Test"
oder
Meine_Axt.Schlagkraft = 400
So jetzt noch was über Collections ...
Dim Rucksack As New Collection
Wir haben jetzt eine Variable Rucksack vom Typ Collection geschaffen. Die jede Art von Objekten aufnehmen kann:

'Fügt ein neues Objekt hinzu, das Meine_Axt heißt
'und optional mit dem Textindize "Axt" versehen wird
Rucksack.Add Meine_Axt, "Axt"

'Gibt die Anzahl der Objekte in der Collection zurück
x = Rucksack.Count

'Löscht das Objekt mit dem Text-Indize "Axt" aus der
'Collection. Sie können auch, falls bekannt, über den
'Index auf das Objekt zugreifen z.B. löscht
'Rucksack.remove 2 das zweite Objekt in der Collection
Rucksack.Remove "Axt"

Listing 3: Collections

Anmerkung: Bevor Sie den Eintrag Meine_Axt hinzufügen, müssen Sie eine Variabel Meine_Axt vom Typ Axt dimensionieren und mit Set Meine_Axt = New Axt neu instanzieren. Setzen sie dann die erforderlichen Eigenschaften auf die gewünschten Werte um sie letztendlich in die Collection aufzunehmen.
Geben Sie dann zuerst alle mögliche Eigenschaften ein, die Sie für diese spezifische Axt wünschen, bevor Sie sie dem Rucksack hinzufügen.
Jetzt wissen Sie wie man Objekte in eine Collection sammelt, zählt und löscht. Aber ich habe das beste bis zum Ende aufbewahrt:

For Each Spieler In MeinerWelt
Next

Spieler ist eine Sammlung von Objekten der Klasse MeinerWelt. Sie können jetzt Code schreiben, der auf jedes Objekt in einer Collection bezieht:
For Each Spieler In MeinerWelt
  If Spieler.Geschwindigkeit < 50 Then
    Spieler.Sterbe
  End If
Next

Listing 4: Die Benutzung von Klassen und Collections

Kommen wir zu etwas mehr grafischem ...

BitBlt

Setzen wir einfach voraus, daß die API-Funktion BitBlt schneller sei als die in VB bekannte PaintPicture-Methode. Im Wesentlichen macht BitBlt folgendes. Sie kopiert einen Speicher-Block in einen anderen Speicher-Block. Auf Grafiken bezogen, ist er immer rechteckig.
Beispiel:

Public Declare Function BitBlt Lib "gdi32" (ByVal _
       hDestDC As Long, ByVal X As Long, ByVal _
       Y As Long, ByVal nWidth As Long, ByVal _
       nHeight As Long, ByVal hSrcDC As Long, ByVal _
       xSrc As Long, ByVal ySrc As Long, ByVal _
       dwRop As Long) As Long

Public Const SRCAND = &H8800C6    'Source AND Dest
Public Const SRCCOPY = &HCC0020   'Dest = Source
Public Const SRCINVERT = &H660046 'Source XOR Dest

Listing 5: BitBlt

Fügen Sie Ihrem Projekt ein Modul hinzu und kopieren Sie den Code hinein. Schauen wir uns einmal an, was die unterschiedlichen Parameter bei BitBlt bewirken:

  • hDestDC dieser Parameter legt den hDC des Zielbildes fest. Ein hDC ist das Handle eines Gerätekontextes, wie ihn die PictureBox oder ein Formular besitzt.
  • X,Y legt die Koordinaten der rechten, oberen Ecke des Zielrechtecks fest.
  • nWidth, nHeight legt Breite und Höhe des Rechtecks fest.
  • hSrcDC legt den hDC des Quellbildes fest, z.B. Form oder PictureBox.
  • ySrc, ySrc legt die Koordinaten der rechten, oberen Ecke des Quellrechtecks fest.
  • dwRop bestimmt die Rasteroperation, die Art der booleschen Operation, die beim Kopieren ausgeübt werden soll.
Das Anwenden von BitBlt ist recht leicht, weil z.B. Pictureboxen gute Quellen für BitBlting darstellen. Wenn Sie ein PictureBox auf Autoredraw = True und Visible = False einstellen und dann eine Grafik hineinladen, wird dadurch automatisch ein Offscreen-Puffer für Sie erstellt:
Call BitBlt(Form1.hDC, 10, 10, 20, 20, _
                  Picture1.hDC, 0, 0, SRCCOPY)

Hierbei ist Form1 das Zielbild [dort wo die Abbildung erscheinen soll]. 10, 10 ist Koordinate des Pixels, auf Form1 ab der die Kopie anfangen soll, während das zu kopierende Rechteck ein Quadrat von 20 Pixeln darstellt. Picture1 [unsichtbar, und Autoredraw = True] ist der Puffer, von dem ab der Koordinate 0,0 mit der Operation SRCCOPY auf Form1 kopiert wird [SRCCOPY - einfaches Kopieren der Daten]
So, das ist erst mal alles was wir brauchen und wir können uns gleich mit dem nächsten Punkt beschäftigen.

Sprites

Gut, nun wissen Sie ein bißchen über BitBliting. Wollen wir jetzt herausfinden was Sprites sind...
Sprites sind kleine eigenständige Grafiken, mit unregelmäßigen Konturen, also nicht rechteckig. Um diese unregelmäßig geformten Grafiken zu erzeugen, bedarf es etwas Getrickse. Es gibt verschiedene Methoden, da wir uns aber eben mit BitBlt auseinandergesetzt haben, wollen wir damit mal probieren.
Die verwendete Technik, wird Maskierung genannt. Die Idee ist, daß jedem Bild eine passende Schablone [Maske] zugeordnet. Die Schablone wird zu Beginn so angelegt, daß sie eine Aussparung für die eigentliche Grafik erhält. Dies wird durch das umkopieren mittels BitBlt den entsprechenden ROP-Konstanten erreicht. ROPs basieren auf einer breiten Palette von booleschen Ausdrücken.
Schablonen [Masken] bestehen aus einem weißen Hintergrund und besitzen in schwarzer Farbe eine Art Bohrung in Form der Kontur des unregelmäßigen Bildes.


Abbildung 9

Um eine solche Maske mit dem Zielbild zu verschmelzen, verwenden wir zuerst den ROP SCRAND zwischen Maske und Bild. Dies bedeutet also eine ein logische UND-Verknüpfung mit jedem Pixel der beiden zu bilden. Das Ergebnis ist, daß das Zielpixel geANDed mit weiß das Zielpixel ergibt, während das Zielpixel geANDed mit schwarz wiederum nur schwarz übrigläßt [die "Bohrung"].
Wir verwenden dann den ROP SCRINVERT, dieser entspricht dem logischen XOR [exklusiv Oder]. Das Resultat ist, daß die Zielpixel des Hintergrundes geXORed mit den schwarzen Umlagerungen sich selbst ergeben und geXORed mit der farbigen Mitte des Sprites und der ebenfalls schwarzen Bohrung die Kerngrafik des Sprites selbst übertragen wird.
Wir kommen später noch in einem ausführlichen Beispiel darauf zurück ...
Das Problem bei der Verwendung von Masken besteht im wesentlichen darin, Grafiken die ganze Zeit hin und her kopiert werden müssen. Wenn Rechner beliebig schnell wären gäbe es hiermit keine Schwierigkeiten. Aber wie wir ja alle nur zu gut wissen sind sie das dummerweise nicht.
Bei so manchen Spielen tummeln sich jedoch manchmal hunderte von fließend bewegten Figuren [Sprites] auf dem Bildschirm herum, wie geht das?

Ihre Meinung  

Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.