Entwickler-Ecke

Delphi Tutorials - Einen Abspann mit DelphiX


F34r0fTh3D4rk - Mi 22.06.05 13:28
Titel: Einen Abspann mit DelphiX
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:

- 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
1:
2:
var
  BG: 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
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(Sender: TObject);
begin
  BG := TBackgroundSprite.Create(DXSpriteEngine1.Engine);  //Backgroundsprite erstellen
  with BG do
    begin
      Engine.y := Form1.ClientHeight;  
(************************************
Das bild soll ja am Anfang noch nicht zu sehen sein, also setzen wir die oberste Kante, auf die unterste des Formulares, sodass das Bild "unter" unserem Formular existiert
************************************)

      SetMapSize(11);  //Die Map Größe wird gesetzt (sonst ist später nichts zu sehen)
      Image := DXImageList1.Items[0];  //und der Sprite bekommt unser Bild zugewiesen
    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
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  BG.Engine.y := BG.Engine.y - 1;  //Hintergrund bewegen
  DXDraw1.Surface.Fill(clblack);  //Bild Füllen/Leeren (mit schwarz)
  DXSpriteEngine1.Draw;  //Hintergrund virtuell zeichnen
  DXDraw1.Flip;  //Rendern (fertiges Bild anzeigen)
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
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  
(************************************
wenn die unterste Kante des Bildes die unterste Kante des Fomulares ist
***********************************)

    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
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXInput1.Update;  //Alle Tasten aktualisieren (Alle gedrückten Tasten ermitteln und "auflisten")
  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  //Wenn die Taste (ESC) gedrückt wurde (in der Liste ist)
    Close;  //Beenden (Hier: Formular schließen)
end;

So das wars, hoffe es hat bei euch allen funktioniert und würde mich auf Feedback freuen :D

Hier mal mein Ergebnis:


Larus - Do 23.06.05 21:57

Egoist und Selbstbeweiräucherer nenn ich sojemanden :wink:

Find ich gut das Tut besonders das endergebnis.. (deiner EXE) nur selber nach dem Tut gecodet hab ich noch net... mach ich aber


F34r0fTh3D4rk - Do 23.06.05 22:04

ja es sollte ein kleines witziges Beispiel sein, außerdem stimmts ja :lol: da musste halt irgendwas rein 8)


CaliTuner1988 - Di 27.03.07 20:06
Titel: Bei mir gehts nicht :(
Hallo,

fange gerade an mich von C++ auf Delphi um zu gewöhnen (was ja noch recht einfach ist und auch schnell geschehen war) und die DelphiX-Komponenten zu verwenden.

Hierbei bin ich auf Tutorials wie auch dieses hier gestoßen und habe dieses hier als erstes, weil es mir als einfachstes schien mal nachprogrammiert, jedoch musste ich leider feststellen, dass es bei mir nicht funktioniert. woran kann das denn liegen?

gibts so etwas wie die delphix-komponenten evtl. auch für C++ ??

Danke schonmal!

Gruß
CaliTuner1988


Backslash - Mi 28.03.07 14:00

Es kommt drauf an mit welchem C++ du arbeitest. Wenn es Visual C++ ist, dann empfehle ich dir, dir das Microsoft Direct X SDK herunter zu laden. Da ist auch in der Hilfe erklärt wie du DirectX-Funktionalität in deine Anwendung integrierst.

Gruß

Backslash

PS: Der Vollständigkeithalber empfehle ich einen Fragethread im "Delphi Forum" zu stellen.

Nachtrag: Wenn es DelphiX für C++ gäbe, dann wäre es ja nicht mehr "delphi"x, oder?


CaliTuner1988 - Fr 30.03.07 12:17

user profile iconBackslash hat folgendes geschrieben:
Es kommt drauf an mit welchem C++ du arbeitest. Wenn es Visual C++ ist, dann empfehle ich dir, dir das Microsoft Direct X SDK herunter zu laden. Da ist auch in der Hilfe erklärt wie du DirectX-Funktionalität in deine Anwendung integrierst.

Gruß

Backslash

PS: Der Vollständigkeithalber empfehle ich einen Fragethread im "Delphi Forum" zu stellen.

Nachtrag: Wenn es DelphiX für C++ gäbe, dann wäre es ja nicht mehr "delphi"x, oder?



Also, ich arbeite mit dem Borland CBuilder - C++. Zur Zeit bin ich eben auf Delphi umgestiegen, weil ich keine DirectX-Komponente für diesen C++-Builder gefunden habe.

mit deinem Nachtrag hast du natürlich vollkommen recht ;)

ich danke schonmal.
Gruß
CaliTuner1988

P.S.: Der Abspann hier funktioniert bei mir nun doch auch mit Delphi, danke dafür ;)