Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 22.06.05 12:28 
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:
ausblenden 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).
ausblenden 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:
ausblenden 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:
ausblenden 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:
ausblenden 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:
Einloggen, um Attachments anzusehen!
Larus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 431



BeitragVerfasst: Do 23.06.05 20: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 23.06.05 21:04 
ja es sollte ein kleines witziges Beispiel sein, außerdem stimmts ja :lol: da musste halt irgendwas rein 8)
CaliTuner1988
Hält's aus hier
Beiträge: 8

Win XP, Win 2k, Linux
Borland Developer Studio 2k6, Borland CBuilder 5, Borland CBuilder 6
BeitragVerfasst: Di 27.03.07 19: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

_________________
Gute Programmierer kommentieren und dokumentieren ihr Programm und dessen Quellcode nicht.
Das Programm war schwer zu implementieren - es soll auch schwer zu verstehen sein


Zuletzt bearbeitet von CaliTuner1988 am Mo 02.04.07 14:02, insgesamt 1-mal bearbeitet
Backslash
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202

WIN XP
Delphi 5 Ent, Delphi 2005 Prof
BeitragVerfasst: Mi 28.03.07 13: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
Hält's aus hier
Beiträge: 8

Win XP, Win 2k, Linux
Borland Developer Studio 2k6, Borland CBuilder 5, Borland CBuilder 6
BeitragVerfasst: Fr 30.03.07 11: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 ;)

_________________
Gute Programmierer kommentieren und dokumentieren ihr Programm und dessen Quellcode nicht.
Das Programm war schwer zu implementieren - es soll auch schwer zu verstehen sein