Einen Abspann mit DelphiX
In diesem Tutorial zeige ich die "einfachste" Methode einen Abspann mit
DelphiX zu realisieren.
Was braucht man ?  
- Delphi + DelphiX
- Ein Grafikprogramm (Paint sollte für unsere Zwecke reichen)
Man kann die ganze Sache natürlich auch komplett coden, aber für nen einfachen
Abspann ist das denn doch zu viel Arbeit.
(1). Ein Abspann-Bild mit Paint erstellen
- Paint öffnen, ein neues Bild erstellen.
- Das Bild sollte 250 - 350 Pixel breit und darf beliebig Lang sein.
- Am besten nehmt ihr als hintergrundfarbe schwarz und als Textfarbe weiß.
- Dort können dann die Credits einfach wie folgt reingeschrieben werden:
Titel
Vorname Nachname
...
- Das wird dann als 24 Bit Bitmap im ProjektOrdner gespeichert.
(2). Komponenten platzieren und einstellen
- Öffnet (für dieses Beispiel) am besten ein leeres Projekt.
- Platziert DXDraw auf eurem Formular und stellt 
Align auf 
alClient.
- die Höhe des Formulars spielt im wesentlichen keine Rolle, aber es sollte nicht zu schmal sein.
- Jetzt Brauchen wir eine ImageList, platziert diese und wählt bei 
DXDraw euer 
DXDraw aus (doppelklick auf das leere feld).
- Wählt 
Items an und klickt auf die 3 Punkte daneben, wählt euer bild aus und
stellt sicher, dass 
Transparent auf 
true gestellt und 
TransparentColor die Farbe eures hintergrundes ist.
- Das gleiche macht ihr mit der 
SpriteEngine (PacMan Symbol).
- Dann brauchen wir noch einen 
DXTimer, dessen 
interval ihr am besten auf 30 - 33 stellt (ergibt eine FPS-Zahl von ~30).
- Alles andere könnt ihr so lassen wie es ist.
(3). Abspann coden
- Wenn ihr das Programm jetzt kompiliert, siehts noch recht langweilig aus.
- Deshalb hier mal etwas code:
- Als erstes braucht ihr eine Variable vom Typ TBackgroundSprite:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 
 | varBG: TBackgroundsprite;
 | 
		
	  
Man könnte auch ne eigene Klasse deklarieren, aber ich wüsste nicht, wozu das hier gut sein sollte.
- Dann werden wir den Sprite erstellen und auf seine StartPosition setzen:
(Das machen wir im 
Form.Create).
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 
 | procedure TForm1.FormCreate(Sender: TObject);begin
 BG := TBackgroundSprite.Create(DXSpriteEngine1.Engine);    with BG do
 begin
 Engine.y := Form1.ClientHeight;
 
 SetMapSize(1, 1);        Image := DXImageList1.Items[0];      end;
 end;
 | 
		
	  
- Nun soll sich das Bild langsam von unten nach oben bewegen,
also wählen wir die 
OnTimer Procedure des Timers und legen los: 
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 
 | procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);begin
 BG.Engine.y := BG.Engine.y - 1;    DXDraw1.Surface.Fill(clblack);    DXSpriteEngine1.Draw;    DXDraw1.Flip;  end;
 | 
		
	  
- Das wars eigentlich schon, nur was ist, wenn man möchte, das am ende zb ein bild ist und der abspann dort stehen bleiben soll, anstatt zu verschwinden ?
Hier ist die Lösung:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);begin
 if BG.Engine.y + BG.image.height > Form1.Clientheight then
 
 BG.Engine.y := BG.Engine.y - 1;
 DXDraw1.Surface.Fill(clblack);
 DXSpriteEngine1.Draw;
 DXDraw1.Flip;
 end;
 | 
		
	  
- Jetzt kann man noch eine DXInput Komponente platzieren, Button3 auf ESC stellen und dafür sorgen, dass man den Abspann abbrechen kann:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);begin
 DXInput1.Update;    if BG.Engine.y + BG.image.height > Form1.Clientheight then
 BG.Engine.y := BG.Engine.y - 1;
 DXDraw1.Surface.Fill(clblack);
 DXSpriteEngine1.Draw;
 DXDraw1.Flip;
 if IsButton3 in DXInput1.States then      Close;  end;
 | 
		
	  
So das wars, hoffe es hat bei euch allen funktioniert und würde mich auf Feedback freuen   
Hier mal mein Ergebnis: