|
|
Transparenz
|
|
|
Autor/Einsender: Datum: |
|
Peter Töws 10/2001 |
|
|
|
Transparenz ist mit das Wichtigste in einem 2D- und 3D-Spiel, denn in jedem gutem Spiel gibt es Figuren und Gegenstände wie z.B. Autos, die sich bewegen.
|
|
|
Bei Fragen zu diesem Tutorial nutzen Sie bitte unser VB-/VBA-Forum. |
|
|
Da Grafiken in der Regel immer rechteckig sind, sollen, wenn man nun eine Figur über einen Hintergrund bewegt, die Ecken dieser Grafik und die Teile, die z.B. nicht zu einer Figur gehören, auch nicht sichtbar sein. D.h. diese nicht benötigten Teile der Grafik müssen also transparent also unsichtbar sein. Um eine Transparenz zu erzeugen braucht man 2 Grafiken ein Original Bild und eine passende Maske.
|
|
|
Original:
|
Maske:
|
Ergebnis:
|
|
|
In den beiden Bildern (Original und Maske) sieht man immer wieder den weißen Hintergrund der später als Transparenz angezeigt wird. In der Maske sieht man die schwarze Figur die angezeigt werden soll, d.h. alles was in der Maske schwarz ist, wird später zusehen sein.
|
|
|
Um eine Spielfigur zu erstellen sollte man am besten erst mal Skizzen zeichnen. Nun wird mit dem Grafikprogramm die Figur gezeichnet. Zu empfehlen ist zum Zeichnen Paint oder PaintShop Pro und für besondere Effekte wie Lensflare oder Glitzereffekte PhotoImpact. Natürlich kann man auch professionellere Grafikprogramme bzw. Modelling-Programme wie Cinema4D oder 3D Studio MAX, die allerdings recht teuer
sind, benutzen.
|
Benötigt wird natürlich ein Hintergrund, ein Objekt und die Maske. Die Maske ist das Objekt, und alles was beim Objekt nicht weiß ist, wird an über dem Hintergrund angezeigt.
|
|
|
Um ein solches Projekt zu realisieren, erstellen wir ein neues Projekt mit einer Form. Auf diese setzen Sie eine PictureBox mit ca. 640x480 Pixel. Stellen Sie bei den Eigenschaften:
|
|
|
Name: Display
AutoRedraw: True
|
|
|
Nun erstellen Sie noch eine PictureBox für den Hintergrund mit den Eigenschaften:
|
|
|
Name: BG
AutoRedraw: True
AutoSize: True
Picture: bg.bmp
Visible: False
|
|
|
Da das Bild auch nicht sichtbar sein soll, sind die o.g. Eigenschaften sehr wichtig. Die Bilder werden später in den Display kopiert, deshalb soll man sie nicht einfach sehen.
|
Nehmen Sie eine weitere PictureBox für den Skater mit den o.g. Eigenschaften.
|
Nach den Vorbereitungen und den Grafiken wird nun das Prinzip gebraucht. Damit der Skater durch das Bild fahren kann, zeichnet ein Timer immer wieder den Hintergrund neu und darauf "transparent" den Skater. Das verhindert ein Flackern.
|
|
|
Zuerst werden die notwendigen Variablen deklariert
|
|
|
Dim posX As Long ` Left des Bildes
Dim posY As Long ` Top des Bildes
|
|
|
Auf die Form wird jetzt ein Timer-Steuerelement mit dem Timer-Intervall 1 gesetzt. In die Timer-Prozedur kommt nun folgender Code:
|
|
|
Private Sub game_Timer()
Display.PaintPicture bg.Picture, 0, 0
Display.PaintPicture skaterm.Picture, posX, posY, , , , , , , _
vbMergePaint
Display.PaintPicture skater.Picture, posX, posY, , , , , , , _
vbSrcAnd
End Sub
|
|
|
Mit der ersten Zeile wird der Hintergrund auf den Bildschirm kopiert. In der nächsten Zeile wird die Maske auf den Hintergrund aufgetragen. Dabei stehen die Variablen posX, posY für die Position der Figur. Danach werden Pixel der eigentliche Figur und der Maske mit Hilfe von And kombiniert. Dadurch entsteht die Transparenz.
|
Jetzt fehlt nur noch das manuelle Bewegen eines Objektes, d.h. das Bewegen des Skaters per Tastendruck.
|
|
|
Private Sub Display_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyRight Then
posX = posX + 5
If posX > Me.ScaleWidth - 5 Then posX = -35
End If
If KeyCode = vbKeyLeft Then
posX = posX - 5
If posX < 0 - 25 Then posX = Me.ScaleWidth - 15
End If
End Sub
|
|
|
Mit den o.g. Codezeilen wird die Figur über das "Spielfeld" nach links und nach rechts bewegt, und wenn die Figur rechts oder links aus dem "Spielfeld" läuft, erscheint er auf der jeweils anderen Seite.
|
Viel Spaß mit dem Ausprobieren, und Testen. Den kompletten Beispiel-Code finden Sie in unserer
Tipp-Rubrik.
|
|
|
Download (12 kB)
|
Downloads bisher: [ 8228
]
|
|
|