Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Andorra]2D-Karte wie bei Diablo2 (https://www.delphipraxis.net/105851-%5Bandorra%5D2d-karte-wie-bei-diablo2.html)

freak4fun 31. Dez 2007 18:55


[Andorra]2D-Karte wie bei Diablo2
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute,
ich hantiere seit einiger Zeit mit Andorra herum. Nun hab ich auch passende Grafiken und eine Spielidee. :mrgreen:

Ich habe eine Karte erstellt, verschiedene Grafiken geladen (Spielfigut, Wege, Bäume) und nun folgende Probleme.

1. Sichtbarkeit:
Wie man auf dem angehhängten Screenshot sieht, wird die Spielfigur von der Landschaft überdeckt, was natürlich nicht sein darf. Ich habe versucht das über den (Tiefen-)Index zu regeln, allerding passt diese Lösung nicht für gleichrangige Objekte, also zum Beispiel Baum und Figur. Und immer prüfen ob alle Objekte wie zum vorherigen passen halte ich für unperforment. Wie kann man also prüfen welche Objekte sichtbar sind und ggf. andere überdecken. Besonders schwierig halte ich das für Häuser. :wall:

2. Kollisionsabfrage
Beim Fluss oder so gehts ja noch, aber wie frage ich Kollisionen beim Baum ab, da ist ja praktisch nur der Fuß. Bin für jede Hilfe dankbar. :|

MfG
f4f

3_of_8 31. Dez 2007 19:01

Re: [Andorra]2D-Karte wie bei Diablo2
 
Ich schlage vor, gleichwertige Objekte von oben nach unten zu sortieren. Dann wird die Figur verdeckt, wenn sie hinter dem Baum steht, aber nicht, wenn sie davor steht.

igel457 31. Dez 2007 19:06

Re: [Andorra]2D-Karte wie bei Diablo2
 
Um die Objekte in der richtigen Reihenfolge anzuzeigen schreibe einfach so etwas wie z.B.:
Delphi-Quellcode:
procedure TMySprite.DoMove(timegap:double);
begin
  Z := round(X);
end;
Den Hintergrund musst du entsprechend weit hinter verlagern. So ähnlich mache ich das auch in der "WormHunter" Demo.

Codewalker 31. Dez 2007 21:01

Re: [Andorra]2D-Karte wie bei Diablo2
 
Was die Kollisionen mit dem Baum angeht, würde ich den Baum komplett ignorieren, aber einen "Dummy-Sprite" anlegen, wo die Wurzel sein soll. Mit dem kannst du ja dann die Kollisionen auswerten.
Und bei den Häusern wirst du z.B. bei einem Dachvorsprung nicht drum herumkommen, das Objekt in mehrere Sprite zu zerlegen, die teilweise über bzw. unter der Figur liegen (je nach Bedarf).

igel457 1. Jan 2008 10:59

Re: [Andorra]2D-Karte wie bei Diablo2
 
Du könntest für jedes Objekt eine "Kollisionsmap" bestehend aus Rechtecken speichern und in der DoCollision Routine eine Kollision mit diesen prüfen.

3_of_8 1. Jan 2008 12:25

Re: [Andorra]2D-Karte wie bei Diablo2
 
Alternativ könnte man auch - um die Geschwindigkeit zu erhöhen - eine Kollisions-Map mit Bitvektoren realisieren, also ein zweidimensionales array aus Bitvektoren, die man zum Feststellen einer Kollision nur mit der Kollisionsmap der Spielfigur and-en muss. Der Speicherverbrauch dürfte nicht allzu groß sein.

igel457 1. Jan 2008 12:59

Re: [Andorra]2D-Karte wie bei Diablo2
 
Das ist natürlich auch eine Möglichkeit und lässt sich direkt durch überschreiben von "TImageSprite.CreateMask" erreichen:
Delphi-Quellcode:
procedure TMyImageSprite.CreateMask;
var
  bmp:TBitmap;
begin
  if (FPixelCheck) then
  begin
    if FShape <> nil then FreeAndNil(FShape);
    FShape := TAdBimapShape.Create(round(width),round(height);

    bmp := TBitmap.Create;
    try  
      bmp.LoadFromFile('myspriteshape.bmp');

      TAdBitmapShape(FShape).Mask.AssignBitmap(bmp);

    finally
      bmp.Free;
    end;
  end;
end;
PixelCheck muss jedoch auf "true" gesetzt werden.

freak4fun 1. Jan 2008 14:53

Re: [Andorra]2D-Karte wie bei Diablo2
 
Danke! Werd ich mir dann mal alles in Ruhe anschauen. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz