![]() |
Brauche ein "Map-System" oder sowas für ein spiel.
hi leutz!
ich suche für mein spiel (es ist ein rpg im browserganme-style) eine art von "Map-Sytem", also etwas, mit dem ich karten im spiel realisieren kann, sprich: man kann per button/tastendruck die position auf der karte ändern. tja, jetzt müssen aber auf der karte auch noch besonderees sein, wie teleporter, türen, oder ähnliches, doch... wie realisiere ich das? ich hab mir gedacht, dass ich eine karte in eine ini-datei packe, ein bild zur map hinzufüge und das dann eben im spiel importeire, doch: wie schaffe ich es, alle möglichen "besonderheiten" aus der ini auszulesen und in die karte hineinzufügen? hab mir die ini mal so vorgestellt:
Code:
tja... ich möchte (wenn es geht) auch irgendwie eine "tile"-karte einbauen, also für jedes feld ein tile, das man bestimmt.
[Map]
pic=mapbild.bmp name=Ne map halt [Tiles] x1=.... x2=.... nur wie mache ich das eben mit dem auslesen/hinzufügen von besonderheiten? *hach* bin schon seit zwei wochen dran zu verzweifeln, ihr müsst mri einfach helfen :cry: |
Re: Brauche ein "Map-System" oder sowas für ein sp
na kommt schon leude, iss wirklich wichtig :cry:
PS: iss fürn freeware-projekt, ihr würdet meinetwegen auch nen fetten credit bekommen oder meinetwegen werbung oder oder oder... |
Re: Brauche ein "Map-System" oder sowas für ein sp
Das Problem kenn ich und da hatte ich auch aufgehört mit der Idee so ein Spiel zu programmieren :)
Benutzt du solche 32x32 Maps oder richtig vorgezeichnete... Ich wollte das irgendwie dynamisch einfügen, aber da hat mir der Nutzen gefehlt :) ![]() |
Re: Brauche ein "Map-System" oder sowas für ein sp
also wenn ich dich richtig verstehe möchtest du eine Karte von sagen wir mal 100x100 Feldern erstellen bei der jedes Feld Eigenschaften besitzen kann. Dazu überlegen wir uns folgendes:
Ein Feld hat verschiedene Eigenschaften, also:
Delphi-Quellcode:
als nächstes brauchen wir dann die Karte:
TFeld = record
x: Integer; //X-Koordinate y: Integer; //Y-Koordinate Textur : String; //Texturpfad für das Feld Begehbar : boolean; //Kann man auf dem Feld laufen oder nicht Teleport : TPos; //Datentyp der die X,Y Koordinate enthält auf welches //Feld teleportiert wird (0/0) für kein Teleportfeld //... kannst zum Beispiel noch Waffen auf dem Feld liegen haben oder Ressourcen. end;
Delphi-Quellcode:
Nun kannst du einfach eine doppelte for Schleife durchlaufen und die Karte nach den Texturen füllen. Das abspeichern in eine Datei sollte nun keine allzu große Herausforderung darstellen.
map : array[0..100,0..100] of TFeld; //Kannst das natürlich auch dynamisch machen
Ich hoffe das ich das Problem richtig verstanden habe... |
Re: Brauche ein "Map-System" oder sowas für ein sp
kewl, ich werds gleich mal zu hause ausprobieren :)
kann mir jemand noch mal genau erklären, wie records aufgenbaut sind? THX! im Voraus! |
Re: Brauche ein "Map-System" oder sowas für ein sp
Records sind so aufgebaut wie ichs geschrieben hab :wink:
von dem Record TFeld brauchst du einen Datentyp (in dem Fall map) nun kannst du für jeden Index des Datentyp map die Daten aus dem Record ansprechen. also: map[0,0].x := 0; map[0,0].y := 0; map[0,0].Textur := 'wasser.bmp'; map[0,0].begehbar := false; map[0,0].Telport := [0,0]; das ganze initialisierts du dann in einer doppelten for Schleife und änderst dann gezielt ein paar Werte ab Gruß Martin |
Re: Brauche ein "Map-System" oder sowas für ein sp
kewl, THX! :thumb:
nur... wie zeige ich die karte dann an? also... durch images? nee.... und dann hät ich noch was: man könnte ja dem Record noch die eigenschaft "gesichtet" oder so machen, dass wenn man sie schon gesehen hat, dass sie dann angezeigt wird, also... wenn ein charakter meinetwegen immer 2 felder von sich weg sieht, dass er eben dann seinen gegangenen weg auch sieht und... wie mache ich das dann noch, dass sich die karte beim bewegen mitbewegt, also... die karte "rutscht" eben immer ein feld weiter... naja, langsam gefällt mir die sache immer mehr :mrgreen: |
Re: Brauche ein "Map-System" oder sowas für ein sp
Am Montag, falls ich es nicht vergesse, kann ich mal mein kleines Rundenbasiertes Spiel hochladen. Ist leider nur der Editor mehr oder weniger fertig geworden. Zum lernen reichts aber allemal (Einheit Feld um Feld bewegen, Scrollen, Ausrüstung für jede Einheit...)
|
Re: Brauche ein "Map-System" oder sowas für ein sp
kewl, da wart ich drauf ;)
kannst dus mir evtl. früher schicken, da ich unter der woche shclecht ins netz kann... mail: knuddelkater89@freenet.de |
Re: Brauche ein "Map-System" oder sowas für ein sp
sry, noch was:
wie lese ich dann z.B. ein tile aus einer datei aus, die meinetwegen 20 von diesen tiles beinhaltet, sprich, eine bmp-datei, die 20 bilder je 32x32px hat? |
Re: Brauche ein "Map-System" oder sowas für ein sp
Dazu bräuchte der Record noch ein weiteres Feld:
Delphi-Quellcode:
Jetzt lädst du die Textur-Datei in ein zusätzliches Bitmap und fügst dann den entsprechenden Bereich ein. Mal ein Beispiel mit BitBlt (ohne Scrollen):
TFeld = record
x: Integer; //X-Koordinate y: Integer; //Y-Koordinate Textur : String; //Texturpfad für das Feld TexturPos: TPoint; //Position der Textur in der Textur-Datei
Delphi-Quellcode:
Links oben in der Datei ist 0,0
begin
for i:=0 to 99 do for ii:=0 to 99 do BitBlt(MainBit.Canvas.Handle, Feld[i,ii].x*32, Feld[i,ii].y*32, 32, 32, TexturBit.Canvas.Handle, Feld[i,ii].TexturPos.x*32, Feld[i,ii].TexturPos.y*32, SRCCOPY); end; [EDIT] Das Texturpfadfeld im Record kannst du ja dann weglassen, da du wohl nur eine Texturdatei hast. |
Re: Brauche ein "Map-System" oder sowas für ein sp
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
es hört sich so an, als ob doe Karte statisch ist. D.h. sie ändert sich nicht in der Größe. Und es handelt sich um eine Bitmap. Dann habe ich evt etwas für Dich. Vor langer Zeit habe ich mir mal eine maussensitive Komponente auf Basis von TImage gebastelt. Man braucht dafür eine Bitmap und das Programm clickimg (ist im Anhang). In dieses Programm lädt man die Bitmap. Dann kann man in der linken Bitmap mit der Maus rechteckige Bereiche festlegen. Jeder Bereich bekommt eine ID. Darüber kann man den Bereich im Spiel erkennen. Wenn Du auf Aktualisierung klickst kannst Du in der rechten Hälft die Sache schon mal testen. Nach dem Du alles mit Pfadangaben entpackt hast starte mal clickimg.exe (steckt in ..\bin) und öffne mal die Bitmap aus dem Verzeichnis ..\Beispiel und anschließend über "Öffne Buttondatei" im Menu die Datei tastatur.btd. Dann klicke mal auf Aktualisieren. Nun klicke mal auf der rechten Bitmap rum. Das Beispiel im Verzeichnis ..\Beispiel zeigt die Verwendung der Komponente. |
Re: Brauche ein "Map-System" oder sowas für ein sp
wenn das jetzt nen bitmap ist...
wie lege ich dann fest, ob ich das nächste tile (beim weitergehen) jetzt z.b. betreten kann oder nicht? |
Re: Brauche ein "Map-System" oder sowas für ein sp
Was hat das mit dem Bitmap zu tun? Für die Bewegungen usw. greifst du auf deine TFeld-Variable zu:
Delphi-Quellcode:
[EDIT]
if Key=VK_Left then
if (Spieler.x>0) and Feld[Spieler.x-1,Spieler.y].Begehbar then begin Spieler.x:=Spieler.x-1; //usw. end else //Bewegung nicht möglich end; Jetzt versteh ich es, du hast dich die Bitmap-Datei von Jens Schumann bezogen :oops: . In der Bitmap hast du jedes Texturviereck einmal vorhanden, die Positionen der Texturen stehen aber in der TFeld-Variable. Tipp: Du kannst den Record ganz einfach mit
Delphi-Quellcode:
speichern und laden (auch mehrere in derselben Datei).
var FeldFile: File of TFeld
|
Re: Brauche ein "Map-System" oder sowas für ein sp
ach gotteles....
ich werd immer mehr verwirrter :| ich mein halt, wie ich das jetzt mache, dass die ganze karte um 1 tile nach links oder so weiterrutscht... kann mir da jemand evtl. mal ein beispiel machen? wäre sehr nett! |
Re: Brauche ein "Map-System" oder sowas für ein sp
nochmal hi leutz!
kann hier denn keiner helfen... außerdem möchte ich noch Maa83 dran erinnern ;) naja... kann denn keiner wenigstens nur ein klitzekleines beispiel uploaden... büdde... :) |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Sonstige Fragen zu Delphi" nach "Multimedia" verschoben.
|
Re: Brauche ein "Map-System" oder sowas für ein sp
Zitat:
wenn du array[0..100,0..100] machst, hast du als erstes feld ja [0,0] Aber wenn du bei Teleport 0/0 für "kein Feld" (=nicht telportierbar) nimmst, kannst du nicht auf das 1. feld teleportieren.. also entweder array[1..101,1..101] oder für nicht teleport (-1/-1) air |
Re: Brauche ein "Map-System" oder sowas für ein sp
danke! :)
aber weiß ich immernoch nicht, wie ich die karte anzeigen soll, bzw. wie ich dann meinen charakter bewegen kann und zar so, dass er eben das "begehbar", bzw. "teleport" beachtet.... ttrotzdm danke! |
Re: Brauche ein "Map-System" oder sowas für ein sp
jud, ich hab jetzt einfach 25 images reingehaun und die eben dann immer ausgelesen und bild gealden, etc. würde jetzt auch klappen ;)
nur wenn jemand etwas besseres hat, wäre es ja doch nett, es mir biezutragen :) |
Re: Brauche ein "Map-System" oder sowas für ein sp
Hallo
Zitat:
Ich glaube, wenn du noch nicht weißt, wie du dir Grafik überhaupt umsetzt, dann kann dir auch keiner sagen, wie du deine Karte zeichnen sollst. Vermutlich wird es nur so laufen: Du brauchst dann noch Variablen ScrollX und ScrollY oder wie du sie nennen willst (Integer oder Float je nachdem wie du willst). Diese Variablen sollen angeben, welcher Ausschnitt der Karte gerade gezeigt werden soll. Beispiel ScrollX=3, ScrollY=10 heißt: Ganz oben links ist das Feld mit den Koordinaten (3,10). Zur Umsetzung muss du dann überlegen, wie viele einzelne Felde horizontal und vertikal in ein Feld passen und dann kannst du genau diese Felder zeichnen lassen. Am besten probierst du es einfach aus. Grüße Seniman |
Re: Brauche ein "Map-System" oder sowas für ein sp
h3h3, dann hab ich mal ne frage:
kann ich auf ner paintbox per canvas (oder sonstiges) ein solches kartensystem zeichnen, indem ich einfach immer jedes bild ausles und dieses dann immer 32 pixel weiter verrutscht "hinmale"? wenn ja, wäre das problem gelöst :D (geht auch was anderes als ne pbox?) |
Re: Brauche ein "Map-System" oder sowas für ein sp
|
Re: Brauche ein "Map-System" oder sowas für ein sp
So mal was ganz einfaches :-D
Delphi-Quellcode:
Var
Felder : Array[1..100,1..100] of TFeld; x,y : Integer; Begin xstart:=1; //StartWert wenn nach Rechts dann +1 xende:=xstart+10; //10=Breite Bild/TileBreite; ystart:=1; //StartWert wenn nach Unten dann +1 yende:=ystart+10; //10=Hoch Bild/TileHöhe For x:=xstart to xende do Begin For y:=ystart to yende do Begin ImageList1.Draw(Canvas,x,y,Felder[x,y].ImgIndex); End; End; End; |
Re: Brauche ein "Map-System" oder sowas für ein sp
hi leutz!
nene, wie ich jetzt die tiles einzeln reinstel hab ich ja schon ;) (ich überprüf sogar, ob die "existieren" [hoho!]) :) nur jetzt noch mehr eine frage: kann ich, wenn ich per canvas nen bild draufhau, bei diesem die transparenz brücksichtigen? also ich hab eben bei allen meinen bildern die trransparente farbe "pink" genommen, nur wenn ich jetzt z.b. nen menschn hinhau per canvas.draw, dann hat der ne "pinke aura" sozusagen ;) ich zeichne auf ne paintbox :) |
Re: Brauche ein "Map-System" oder sowas für ein sp
weiß denn keiner, wie ich beim zeichenen die transparenz berücksichtige? :(
|
Re: Brauche ein "Map-System" oder sowas für ein sp
gut, habs jetzt selbst herausgefunden zwecks der transparenz:
paintbox1.canvas.brush.sytle := bsclear; yo... jetzt mach ich da also nen map mit ner paintbox, abba folgendes: die karte wird supa angezeigt, nur wenn ich den charakter bewege, dann bewegt sich nur der charakter weg, die karte bleibt statisch - eigentlich sollte ja der charakter immer im "mittelpunkt" der karte sein und diese "weiterscrollen"... hab jetzt (ungefähr) folgenden code:
Delphi-Quellcode:
tja...
for i := -2 to 2 do begin
for ii := -2 to 2 do begin paintbox1.canvas.draw(........); end; end; wie schon gesagt... axo: die varible "i" und "ii" haben folgenden nutzen: da es ja ne doppelte schleife ist, wird so "gedrawt": paintbox1.canvas.draw( i * 32, ii * 32); (jedes tile ist also 32x32 ;) ) naja... komm einfach nüsch wieter, büdde helft mir! |
Re: Brauche ein "Map-System" oder sowas für ein sp
Delphi-Quellcode:
So sollte es stimmen.
Paintbox1.Canvas.Draw(i*32+Paintbox1.Width div 2-Player.x*32-16,ii*32+Paintbox1.Height div 2-Player.Y*32-16,...);
EDIT: Warum
Delphi-Quellcode:
?
for i := -2 to 2 do begin
for ii := -2 to 2 do begin Sollte es nicht eher z.B.
Delphi-Quellcode:
sein?
for i:=0 to High(Feld) do
for ii:=0 to High(Feld[i]) |
Re: Brauche ein "Map-System" oder sowas für ein sp
erstmal THX! :top: werds bald mal ausprobieren :)
und: nein, meine Map-Variable ist so aufgebaut: Record....... x,y: integer; ........ die i und ii-variable ist dafür da, die x und y-werte "neben" dem helden anzuzeigen, also: map[charx+i,chary+ii]; (cahrx,chary sind die x-y-werte des charakters) trotzdem werd ichs mal versuchen! |
Re: Brauche ein "Map-System" oder sowas für ein sp
Okay, jetzt verstehe ich noch weniger :mrgreen: .
Du rufst es also etwa so auf:
Delphi-Quellcode:
Dann wird doch alles in die linke obere Ecke gezeichnet, die Hälfte außerhalb der Paintbox?
for i := -2 to 2 do begin
for ii := -2 to 2 do begin paintbox1.canvas.draw(i*32,ii*32,{Bitmap von Map[i+charx,ii+chary]}); end; end; Ich denke, ohne mehr Quellcode kann ich dir nicht helfen. |
Re: Brauche ein "Map-System" oder sowas für ein sp
gut...
dann mach ich mal:
Delphi-Quellcode:
das record der variable "map" hat unter anderem folgende wichtige werte:
function MapRenew:boolean;
var i,ii: integer; MyRect,MyRect2: TRect; bitmap: TBitmap; ctype: string; begin ctype := ini.ReadString('Char','type',''); MyRect2 := Rect(0,0,32,32); if charx < 1 then charx := 1; if chary < 1 then chary := 1; ini.WriteInteger('Char','mapx',charx); ini.WriteInteger('Char','mapy',chary); ini.UpdateFile; form5.paintbox1.canvas.brush.style := bsclear; for i := -2 to 2 do begin for ii := -2 to 2 do begin if unit5.charx+i > 0 then begin if unit5.chary+ii > 0 then begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('IMG/Map/'+map[charx+i,chary+ii].Textur); MyRect := Rect((charx*32)+(i*32),(chary*32)+(ii*32),(charx*32)+(i*32)+32,(chary*32)+(ii*32)+32); form5.PaintBox1.Canvas.BrushCopy(MyRect,Bitmap,MyRect2,clfuchsia); bitmap.Free; end else begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('IMG/Map/none.bmp'); MyRect := Rect((charx*32)+(i*32),(chary*32)+(ii*32),(charx*32)+(i*32)+32,(chary*32)+(ii*32)+32); form5.PaintBox1.Canvas.BrushCopy(MyRect,Bitmap,MyRect2,clfuchsia); bitmap.Free; end; end else begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('IMG/Map/none.bmp'); MyRect := Rect((charx*32)+(i*32),(chary*32)+(ii*32),(charx*32)+(i*32)+32,(chary*32)+(ii*32)+32); form5.PaintBox1.Canvas.BrushCopy(MyRect,Bitmap,MyRect2,clFuchsia); bitmap.Free; end; end; Bitmap := TBitmap.Create; MyRect := Rect((charx*32),(chary*32),(charx*32)+32,(chary*32)+32); if fileexists('DATA/TEMPLATES/'+ctype+'/char.bmp') then begin Bitmap.LoadFromFile('DATA/TEMPLATES/'+ctype+'/char.bmp'); end else begin Bitmap.LoadFromFile('IMG/Map/nochar.bmp'); end; form5.PaintBox1.Canvas.BrushCopy(MyRect,Bitmap,MyRect2,clfuchsia); bitmap.Free; end; result := true; if map[charx,chary].Teleportx <> 0 then begin if map[charx,chary].Teleporty <> 0 then begin form5.timer4.enabled := true; end; end; end; x,y: integer; textur: string; die vairablen "charx" und "chary" bestimmen den x-y-wert des charakters |
Re: Brauche ein "Map-System" oder sowas für ein sp
Okay, also doch etwas anders wie du es oben beschrieben hast.
Delphi-Quellcode:
Ich habe den Quelltext auch noch etwas verkürzt.
var center: TPoint;
[...] center:=Point(form5.Paintbox1.Width div 2-16,form5.Paintbox1.Height div 2-16); for i := -2 to 2 do for ii := -2 to 2 do try Bitmap:=TBitmap.Create; MyRect := Rect(i*32+center.x,ii*32+center.y,i*32+center.x+32,ii*32+center.y+32); if (charx+i > 0) and (chary+ii > 0) then Bitmap.LoadFromFile('IMG/Map/'+map[charx+i,chary+ii].Textur) else Bitmap.LoadFromFile('IMG/Map/none.bmp'); form5.PaintBox1.Canvas.BrushCopy(MyRect,Bitmap,MyRect2,clfuchsia); finally bitmap.Free end; |
Re: Brauche ein "Map-System" oder sowas für ein sp
gut, das werd ich gleich mal überprüfen ;)
und gekürzt? find ich gut ^^ nochmals THX! THX! ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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