Einzelnen Beitrag anzeigen

fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#1

Problem mit Sprites ... (DelphiX)

  Alt 5. Feb 2006, 14:40
Hallo,

Ich bin gerade dabei ien 2D-RPG zu "machen".
Zur zeit kämpfe ich mit der Level-Erstellung, sprich mit der Platzierung der Sprites auf der Map.
Ich mache dies mithilfe einer Textdatei, in der ich die Struktur des Level vorher festlege.
Mein Problem besteht jetzt darin, dass ich auf der Karte Steine platzieren möchte, was kein Problem ist.
Das Problem liegt bei dem Untergrund der Stein, sprich worauf sie stehen, auf Gras oder auf schlichter Erde.

Ich möchte das, wenn ein Stein in einer "grasigen" Umgebung steht, auch sein Untergrund Gras ist, und wenn um ihn herum erde ist, dann soll er eben auch auf Erde stehen.

Ich habe dazu schon eine function geschrieben, mit welcher ich den Untergrund der Nachbarfelder (x-1 -> x+1, y-1 -> y+1) prüfe. Ist der Grasanteil größer als der Erdeanteil, so bekommt der Stein einen Gras-Untergrund, ansonsten eine erdigen. Doch irgendwie funktioniert sie nicht für alle Steine, und eben daraus werd ich nicht schlau.

Hat jemand vielleicht ne Idee, wie man das anders lösen könnte ? Ich poste ma ein bisschen Code, damit man sich was unter meinem gelabber vorstellen kann

Die Level-TXT Datei...
Code:
21111111111111111111111111111113
1 H    O•    """""""""""""""""1
1       SSSS      S~~~S"S"""""1
1•             """" """"""S"S""1
1             """" ""•"""""S"""1
1     •           S"SSS"+""S"""1
1  S         """"S"""L"""SS"""1
1  SS        ""S"S""""""""""""1
1•  S~~~~SSS ""S""""O"SS""""""1
1          •  ""S""""""SS""""""1
1   •  SS    """"""SSSSS""""""1
1SSS  S S SS""""S"""""""""""1
1"+""""S""S""SS""""""""""""""""1
1"S""L"""""""SSSS"S"SSSSS"""SS"1
1"SSS"""SSS""""L""""S"""""S""""1
1"""S~~~SSSS""""""SS""SSS""S"""1
1""SS""""SSSSSSS""S"""""S""S"""1
1""SS"""""""""""""1""""""""11""1
1""""""""""""S""""""""S""""""""1
41111111111111111111111111111115

' ' = Boden
 " = Gras
 S = Stein
 1  = vertikale- bzw. horizontale Mauer
 2  = linke obere Mauer
 3  = rechte obere Mauer
 4  = linke untere Mauer
 5  = rechte untere Mauer
 ~  = Strom
 +  = Schwert
 L = Lederrüstung
 O = Schild
 •  = Gold
 H = Haus
Ich lese diese TXT in eine Stringlist ein, und kopiere deren Inhalt dann in ein Array of String.
Dann wird mit einer Schleife Zeile für Zeile, jedes Zeichen ausgelesen, und je nach seinem Inhalt ein Sprite created... hier mal ein Beispiel, falls das Zeichen ein S, also ein Stein, ist:

Delphi-Quellcode:
  for j := 0 to 19 do begin // j = Zeile
    for i := 1 to length(TXTArray[j]) do // i = Zeichen
    begin
      c := copy(TXTArray[j], i, 1); // Char wird kopiert

////////////////////////// falls Char = Stein ... ////////////////////////


      if c = 'Sthen
      begin
        with TStein.Create(DXSpriteEngine1.Engine) do // Wand bei X,Y platzieren
          begin
            x := i * 32 - 32;
            y := j * 32;
          end;

        if Stein_Umgebung(i,j) = 1 then // falls mehr Gras als Erde...
        with TGras.Create(DXSpriteEngine1.Engine) do
          begin
            x := i * 32 - 32;
            y := j * 32;
          end;

        if Stein_Umgebung(i,j) = 2 then // falls mehr Erde als Gras...
        with TBoden.Create(DXSpriteEngine1.Engine) do
          begin
            x := i * 32 - 32;
            y := j * 32;
          end;
      end
Hier die Funktion, um die Untergründe der Nachbarn zu bestimmen:

Delphi-Quellcode:
function Stein_Umgebung(SteinX, SteinY : Integer) : Integer;
var erde, gras, a, b : Integer;
begin
  erde := 0;
  gras := 0;
  for a := SteinX-1 to SteinX+1 do
    for b := SteinY-1 to SteinY+1 do
    begin
    if (a <> SteinX) and (b <> SteinY) then
    begin
    if (copy(TXTArray[a], b, 1)) = '"then
      inc(gras);
    if (copy(TXTArray[a], b, 1)) = ' then
      inc(erde);
    end;
    end;
  if gras > erde then Stein_Umgebung := 1;
  if erde > gras then Stein_Umgebung := 2;
end;
Und hier sieht man, was ich meine, es klappt nicht bei allen Steinen...

http://web29.go-space.net/fabio/dp3.jpg

Also ich hoffe ich konnte zeigen was ich will, wenn nicht sagt bescheid, dann versuch ich dass Gewirr zu entwirren

Gruß fabiO
  Mit Zitat antworten Zitat