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