AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

kleine sprite engine

Ein Thema von byte · begonnen am 3. Mai 2008 · letzter Beitrag vom 3. Mai 2008
Antwort Antwort
byte

Registriert seit: 1. Mai 2008
6 Beiträge
 
Delphi 2007 Professional
 
#1

kleine sprite engine

  Alt 3. Mai 2008, 20:24
Ich habe gedacht, eine kleine, simple Sprite-Engine könnte manchen helfen, weil ich selbst erst eine Weile gebraucht hab, um sie so hinzubekommen, wie sie jetzt ist. Ich will auch sicher nicht sagen, dass das jetzt die ultimativschnellste Methode ist.. das vorweg.
Am leichtesten zu verstehen ist das Tut, wenn man den Anhang runterlädt und es dann vor Augen hat, glaub ich..

Ich habe ersteinmal gegooglet und Sprite-Bildchen von Link aus dem SNES-Zelda geholt, weil er für mich so eine Art Standard-Held ist, wenns um 2D-Games geht. (ich weiß, irgendwas ist da mitn Bildchen bzw deren Reihenfolge nicht so sauber gelungen aber die Sprites die ich gefunden hab, waren nunmal nicht vollständig..)
Im Projekt-Ordner ist ein Unterordner 'sprites', in dem alle Bilder nach l, r, u, d (left, right, up, down) und nummern geordnet sind. 1 ist das Bild, bei dem link sich nicht bewegt, also steht. Die anderen sind nacheinander Bildchen bei denen er läuft.

Man erstelle einen Timer und ein TImage (meins heißt 'link' ).
Delphi-Quellcode:
  public
  i, d :integer; // i als Zählvariable, d für direction, die Laufrichtung von Link.
  end; // nicht irritieren lassen, im anhang sind noch x und y als Koordinaten, die jedoch noch nicht verwendet werden.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (GetAsyncKeystate(VK_left) = 0)
  and (GetAsyncKeystate(VK_right) = 0)
  and (GetAsyncKeystate(VK_up) = 0)
  and (GetAsyncKeystate(VK_down) = 0) then i:=1;
    // wenn der Wert bei allen 4 Pfeiltasten 0 ist, heißt es, dass keine gedrückt ist, also steht.
    // i steht für die Nummer des Sprite-Bildchens. Das 'link steht'-Bild ist ja 1.

if GetAsyncKeystate(VK_left) < 0 then
  begin link.Left := link.Left -2; // link soll sich um 2 bewegen (sah am besten aus, find ich)
    d:=1; // ich musste ja irgendwie Richtungen zuweisen. 1=links, 2=rechts, 3=oben, 4=unten
    i:=i+1; // damit die Laufbildchen sich ändern
    if i=13 then i:=1; // ich habe 6 Bildchen, also müsste ich bei i=7 zu i=1 wechseln.
                        // aber wenn man die zu oft wechselt, siehts aber wie vorgespult aus.
                        // darum jedes 2. später muss ich durch 2 teilen und runden und 13/2 wäre 6,5 und gerundet 7. darum i=1 ^^
  end;
if GetAsyncKeystate(VK_right) < 0 then
  begin link.left := link.left +2;
    d:=2;
    i:=i+1;
    if i=13 then i:=1; // dasselbe mit rechts.
  end;
if GetAsyncKeystate(VK_up) < 0 then
  begin link.top := link.top -2; // die y-Achse in Delphi geht von oben nach unten, ich bin einfach unten nach oben gewöhnt.
                                  // darum ist oben y-2 und unten y+2 ;)
    d:=3;
    i:=i+1;
    if i=17 then i:=1; // 17, weil ich halt 8 Bildchen hab und bei 9 wechseln muss. 17/2=8,5, gerundet 9
  end;
if GetAsyncKeystate(VK_down) < 0 then
  begin link.top := link.top +2;
    d:=4;
    i:=i+1;
    if i=15 then i:=1;
  end;

// hier wird jede Richtung direkt abgelesen und i wird durch 2 geteilt und gerundet und direkt in den Bildnamen eingefügt.
// das heißt aber auch, man muss schaun, dass man die Bilder, die man aufruft auch im Angegebenen Ordner hat!
if d=1 then link.Picture.loadfromfile('sprites\l'+inttostr(round(i/2+0.4))+'.bmp');
if d=2 then link.Picture.loadfromfile('sprites\r'+inttostr(round(i/2+0.4))+'.bmp');
if d=3 then link.Picture.loadfromfile('sprites\u'+inttostr(round(i/2+0.4))+'.bmp');
if d=4 then link.Picture.loadfromfile('sprites\d'+inttostr(round(i/2+0.4))+'.bmp');

// kleine Spielerei von mir, damit Link nicht aus dem Fenster ins Nichts laufen kann.
if link.Top>425 then link.Top:=-24;
if link.Left>425 then link.Left:=-24;
if link.Top<-24 then link.Top:=425;
if link.Left<-24 then link.Left:=425;

// im Anhang wird hier noch x und y angegeben. wie gesagt verwende ich sie hier nicht ^^

end;
jetzt pls nicht treten, ich bin noch keine Woche in dem Forum, dachte einfach, dass auch Noob-Tutorials gefragt sien könnten ^^
Angehängte Dateien
Dateityp: rar con-test_5_743.rar (205,8 KB, 97x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: kleine sprite engine

  Alt 3. Mai 2008, 21:04
Hallo

Das Sprite-Bildchen bewegt sich schon mal schön flüssig.

Nach einigem hin und her bewegen gibt's jedoch Fehlermeldungen.
Anscheinend werden gewisse Dateien nicht gefunden.


Einige Fehlermeldungen von fehlenden Dateien.

Zitat:
---------------------------
Project1
---------------------------
Datei C:\xyz\sprites\u9.bmp kann nicht geöffnet werden. Das System kann die angegebene Datei nicht finden.
---------------------------
OK
---------------------------
Zitat:
---------------------------
Project1
---------------------------
Datei C:\xyz\sprites\r10.bmp kann nicht geöffnet werden. Das System kann die angegebene Datei nicht finden.
---------------------------
OK
---------------------------
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von NikoMitDaMacht
NikoMitDaMacht

Registriert seit: 27. Apr 2004
Ort: Freiburg
298 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: kleine sprite engine

  Alt 3. Mai 2008, 21:17
Hi,
leider geht manchmal bei der berechnung der Laufbildchen etwas schief und i wird ins unendiliche gezählt wenn man die Tasten gedrückt halt nachdem der Fehler aufgetreten ist.

Ich würde dafür ein Array anlegen in dem die Dateinamen gespeichert sind. In dem Fall des Fehlers sieht du dann auch besser woher er kommt.
Niko
Alles was ein Ende hat, hat auch ein Anfang
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz