Tutorial zu Iso-tilesets gesucht
Übersicht

![]() |
GinaBetreff: Tutorial zu Iso-tilesets gesucht |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ihr lieben...
ich bin auf der Suche nach einem kleinen Tutorial, wie man solche iso-tilesets in Blitzbasic verwendet. Ich habe zwar schon einige Tutorials gefunden, wie man welche erstellt, aber ich wollte mich erstmal ein klein wenig mit dem Umgang beschäftigen. Ein wenig experimentieren halt.... Wäre supi, wenn ihr mir bei der Suche behilflich sein könntet... ![]() Vielen lieben Dank, Gina. |
||
www.jk-spiele.de |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Graphics 320,240,16,2 tile=LoadImage ("tile.png") MaskImage tile,255,0,255 SetBuffer BackBuffer() While Not KeyHit(1) Cls For x=0 To 50 For y=0 To 50 DrawImage tile,(x-y)*14,(x+y)*7 Next Next Flip Wend Eigentlich ist das nicht sehr viel schwerer als ne normale Tile-Map. |
||
- Zuletzt bearbeitet von getlose am Do, Sep 16, 2004 14:51, insgesamt einmal bearbeitet
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank. Das zeichnen ist mir jetzt klar.
Inzwischen habe ich auch endlich dieses Iso-Map-Tut wieder gefunden. Da suche ich seit zwei Tagen und kaum stelle ich die Frage im Forum, finde ich es wieder... *grml* Aber macht nix. Ich habe gleich eine ergänzende Frage. Das Mausmapping: Die beiden verschiedenen Methoden, die er dort erklärt und verwendet stimmen bei mir beide nicht so recht. Die Felder werden teilweise übersprungen... Es ist dieses Beispiel. Was stimmt da nicht? Danke, Gina. |
||
www.jk-spiele.de |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mir den Code nicht so ganz genau durch geguckt.
Willst du nur die Map per Maus editieren ? Code: [AUSKLAPPEN] If MouseDown(1) Then For x=0 To 50 For y=0 To 50 If ImageRectOverlap (tile,(x-y)*14,(x+y)*7,map(x,y),mx,my,1,1) Then map(x,y)=new_tile ; hier einfach die map ändern EndIf Next Next EndIf |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, dann formuliere ich meine Frage mal anders... ![]() Zum umrechnen der Maus-Koordinate in die Map-Koordinate, verwendet ihr da alle diese Formel? iX = ((MouseX())+(MouseY())*2)/TILEWIDTH-1 iY = ((MouseY())-(MouseX())/2)/(TILEWIDTH/2) Weil die ist etwas ungenau und die andere von Alim aus dem Tut ist noch ungenauer. Da sind manche tiles gar nicht auswählbar. Oder hat jemand eine andere Formel parat? Vielen Dank, Gina. |
||
www.jk-spiele.de |
![]() |
Mangudai |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo gina
ob die formel genau ist kommt auf das tile an das du verwendest. ![]() das tile hier sollte genau passen wenn du 64 * 36 als maße angibst. jetzt werden bestimmt wieder ein paar leute mekern und sagen das ist keine echte isometrie aber ich finde grad kein tile mit den richtigen maßen 64*32. aber wennst eins brauchst meld dich dann mach ich gschwind eins. |
||
lg Mangudai |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso, dann ist das die Formel für ein 4:3 Iso-Tileset?
Das wäre auch ok, dann probiere ich es mal damit... Vielen Dank... |
||
www.jk-spiele.de |
![]() |
Mangudai |
![]() Antworten mit Zitat ![]() |
---|---|---|
aso nein blödsinn hast recht die formel dürft nur bei 1:2 verhältnis passen
zeig mal welche tiles du bis jetzt probiert hast das sollte jetzt das richtige format sein: ![]() |
||
lg Mangudai |
Roseman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gina hat Folgendes geschrieben: Zum umrechnen der Maus-Koordinate in die Map-Koordinate, verwendet ihr da alle diese Formel? iX = ((MouseX())+(MouseY())*2)/TILEWIDTH-1 iY = ((MouseY())-(MouseX())/2)/(TILEWIDTH/2) Weil die ist etwas ungenau und die andere von Alim aus dem Tut ist noch ungenauer. Da sind manche tiles gar nicht auswählbar. Alims Tut hat Folgendes geschrieben: Das ist ja kinderleicht, aber wie steht es bei der Isometrie? Mit einer Umkehrung des Tile-Plotters geht es höchstwahrscheinlich nicht, aber die meisten Leute verwenden irgendwelche komischen Formeln die sie durch ausprobieren herausgefunden haben wie folgende : iX = ((MouseX())+(MouseY())*2)/TILEWIDTH-1 iY = ((MouseY())-(MouseX())/2)/(TILEWIDTH/2) Diese Formel habe ich bei Jemanden gesehen und irgendwie funktioniert sie auch, aber nur bei Tiles die 96*72 Pixel groß sind und das ist nicht meine Wirkungsabsicht euch hier etwas beizubringen was ihr nur bei solchen Tiles verwenden könnt. Ich musste eine weile grübeln, weil diese Methode auch für meine 64x32 Pixel großen Tiles funktioniert hat, aber dann ist mir aufgefallen, dass sie ziemlich ungenau ist Ich denke Alim wollte diese Formel als "schlechtes Beispiel" anbringen, da sie nur (oder fast nur) mit Tiles die 96*72 Pixel groß sind richtig funktioniert. Hast du denn ebenso große Tiles verwendet? Vielleicht liegts ja nur daran. Mfg Roseman |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte jetzt mehrere probiert. 32x16 und 32x24 und deins.
Wenn ich in der rechten Hälfte bin, wechselt er schon zu den Mapkoordinaten des nächsten tiles. Das meine ich mit ungenau. Und das ist bei allen so, die ich bisher probiert habe. Also ab da, wo die "Startposition" des nächsten tiles ist, die ja unsichtbar/pink ist... Gina. EDIT: 96x72 wäre ja 4:3, und warum er das als schlechtes Beispiel gezeigt hat, merkt man ja... ![]() Lad dir mal die zip oden runter und probier das mal aus, dann weißt du was ich meine... |
||
www.jk-spiele.de |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-_-
hab dein prob noch immer nicht ganz kappiert. was genau hast du vor ? das tut was du da hast würde ich sowieso ganz schnell wieder vergessen. ![]() |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde mir keine Stress mit der Mathematik machen,
sondern in einem weiteren Layer bunte Tyles unterlegen. Und dann die Farbe prüfen. ![]() |
||
solitaire |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Mathematik ist aber wesentlich schneller als ein komplettes Layer drunterzupacken - welches ja ganz gezeichnet werden muss (und noch besser: Du brauchst ja immer noch Mathe um von der Farbe auf die Position zu schliessen- du verschiebst das Problem also nur). | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt... ![]() Was haltet ihr davon? Code: [AUSKLAPPEN] Graphics 640,480,16,2
tile=LoadImage ("tile1.png") Maus = LoadImage("Maus1.bmp") MaskImage Maus,255,0,255 BTile = 32 HTile = 16 Varbool = 1 halb = 0 dim layer(31,15) For y = 0 to 15 For x = 0 To 31 Read Layer(x,y) Next Next SetBuffer BackBuffer() While Not KeyHit(1) Cls For x = 0 to 15 For y = 0 to 31 VarBool = 1-VarBool ;Die Variable 'VarBool' muss nach jedem PosX = X * BTile + VarBool * BTile /2 ;Durchlauf vom Zeichnen der X-Achse PosY = Y * HTile / 2 ;zwischen 0 und 1 wechseln drawimage tile, posx, posy next next mx = mousex() my = MouseY() ;Mauskoordinaten umrechnen in Map-Koordinaten MapX = mx / BTile MapY = my / (HTile / 2) ; nur halbe Höhe, da zweite Reihe schon y=2 hat ;Altes Maus-Mapping iX = (mx+my*2)/BTile-1 iY = (my-mx/2)/BTile/2 ;Mauskoordinate umrechnen auf Feld im Layer jx = mx mod BTile jy = my Mod HTile ;Korrektur-Posten aus Layer entnehmen Select Layer(jx,jy) Case 0 halb=0 : kx=0 : ky=0 ; Im Feld obere Hälfte Case 1 halb=BTile/2 : kx=-1 : ky=-1 ; außerhalb west Case 2 halb=BTile/2 : kx=-1 : ky=0 ; außerhalb süd Case 3 halb=BTile/2 : kx=0 : ky=-1 ; außerhalb nord Case 4 halb=BTile/2 : kx=0 : ky=0 ; außerhalb ost Case 5 halb=0 : kx=0 : ky=-1 ; Im Feld untere Hälfte End Select ;Map-Koordinaten korrigieren MapX = MapX + kx MapY = MapY + ky ;Ausgabe der Ergebnisse Text 0,360, "Mauskoordinaten: "+ mx +" "+ my Text 0,390, "Altes Maus-Mapping: "+ ix +" " + iy Text 0,420, "Mein Maus-Mapping: "+ MapX +" "+ MapY DrawImage Maus,MapX*BTile+halb,MapY*HTile/2 Flip Wend .layer1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3 Data 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3 Data 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3 Data 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3 Data 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3 Data 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 Data 2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4 Data 2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4 Data 2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4 Data 2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4 Data 2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4 Data 2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 Hab mein "Layer" mal als Data eingebracht, damit ihr das besser sehen und ausprobieren könnt. Hier noch die Grafiken dazu (tile und maus je 32x16): ![]() ![]() Für größere tiles müßte man das "Layer" natürlich anpassen... Gina. |
||
www.jk-spiele.de |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
@bladerunner
dafür ist diese Lösung universell einsetzbar, funktioniert sowohl mit verschiedenen Winkeln, als auch z.B. mit Hexagons. Und in abgewandelter Form kann man es auch zur Positionserkennung in 2D Rennspielen und ähnlichem einsetzen. Und die Mathematik beschränkt sich hier auf die Grundrechenarten, während du sonst an sin und cos ranmüsstest. Aber machbar wird es schon sein. Gina freut sich sicher auf deine Lösung. |
||
solitaire |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Soli,
im Prinzip hab ich das mit den Farben ja gemacht. Ich spare mir nur das ReadPixelFast... Und ich habe eine "Farbe" mehr. Und universell ist es auch, man braucht nur einen passenden Layer, wie bei dir ja auch... ![]() Stimmt meine Berechnung so? Gina. |
||
www.jk-spiele.de |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Und die Mathematik beschränkt sich hier
auf die Grundrechenarten, während du sonst an sin und cos ranmüsstest. Das ist (zumindest bei der Begrenzung auf "Diamant"-Form) nicht nötig, ich gebe dir aber recht dass die Farbenlösung Universeller im Sinne auf das Erkennen eines Übergangs ist. Die Verknüpfung mit der Tilekkordinate vereinfacht sich aber nicht wesentlich... Hier ein Auszug aus einem Tileeditor den ich mal geschraubt habe: Code: [AUSKLAPPEN] Function Get_Map_Koord(x#,y#)
BestX=0: bestY=0 For Ycount= 0 To BildmaxY For xcount= 0 To bildmaxX If (tilekoord(xcount,ycount,0)-small_tile_offset_x) < x Then If (tilekoord(xcount,ycount,1)-small_tile_offset_y) < y Then bestx=xcount besty=ycount End If End If Next Next deltaX= (x-(tilekoord(bestx,besty,0)-small_tile_offset_x)) deltaY= (y-(tilekoord(bestx,besty,1)-small_tile_offset_y)) If deltaX < kleintilegrenzen (deltay,0) Then If deltay < (.5*smallytile) Then If (besty And 1) Then ychange=-1 xchange=-1 Else ychange=-1 End If Else If (besty And 1) Then ychange =1 xchange=-1 Else ychange=1 End If End If End If If deltaX > kleintilegrenzen (deltay,1) Then If deltay < (.5*smallytile) Then If (besty And 1) Then ychange=-1 Else ychange=-1 xchange=+1 End If Else If (besty And 1) Then ychange =1 Else ychange=1 xchange=1 End If End If End If bestx= bestX+xchange besty=besty+ychange End Function es ist etwas länger her und Kommentieren war nicht so meine Stärke, aber der Code ist universell auf alle Tilegrößen (wenn Diamant) anwendbar. Man übergibt ihr x und y der maus und erhält mit bestx und besty die Koordinaten des Tiles welches gewählt ist zurück (diese Variablen sind Global) tilekoord(xcount,ycount,richtung) ist ein Hilfsarray welches Die Startkoordinaten sämtlicher Tiles auf dem Bildschirm enthält. (Also tilekoord(12,10,0)= xkoordinate des Tiles (12,10), tilekoord (12,10,1) analog für y small_tile_offset_x und _y sind die Versatzzahlen beim Scrolling und werden in einer gesonderten Function Scroll() ermittelt. Code: [AUSKLAPPEN] Global bestX,bestY,bildmaxX=((GraphicsWidth()/smallxtile)+1.5),bildmaxY=((GraphicsHeight()/(.5*smallytile))+3)
Dim tilekoord(bildmaxX,bildmaxY,1) For Y#=0 To bildmaxY For x#=0 To bildmaxX If (y And 1) Then tilekoord(x,y,0)=(x-1.75)*smallxtile tilekoord(x,y,1)=(y-2)*(smallytile/2) End If If (y And 1) = 0 Then tilekoord(x,y,0)=((x-1.75)*smallxtile)+(.5*smallxtile) tilekoord(x,y,1)=(y-2)*(smallytile/2) End If Next Next waren die Codezeilen die Zum Initialisieren des Hilfsarrays verwendet wurden (hier stehen smallxtile und smallytile für die Größe der Tiles. War wie gesagt für freien Einsatz vorgesehen). Da ich mich damit seit Monaten nicht mehr beschäftigt habe fehlt mir der genauere Überblick. Funktioniert hat die Routine jedoch einwandfrei. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Entschuldige Gina,
ich hatte noch gar keine Zeit das näher anzusehen. Ich wollte nur bladerunner antworten, es wäre eben schön gewesen wenn er ein paar passende Formeln zur Berechnung aller Arten von Rauten und Paralellogrammen gepostet hätte. Nur machs anders ohne Lösungsansatz war ein bisschen dünn. <edit> @bladerunnter du hast jetzt gepostet während ich am am schreiben war, also dieses Posting gehört eigentlich vor deines. ![]() muss weg, schau später die Codes an. |
||
solitaire |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@soli: np. ich mags auch nicht irgendwas reinzuposten ohne selbst was anbieten zu können. Muss aber ehrlich gesagt gestehen dass ich nicht mehr ganz so sicher bin wie ich das jetzt genau gelöst hatte - und mir fehlkt es auch an Motivation, dass Ganze zu ergründen.
@gina: daher mein Angebot: Gib mir deine mailadresse und ich schicke dir den Editor den ich geschrieben habe in einer funktionierenden Version zu ( die darin enthaltenen Tiles sind von Mangudai, da müsstest du Rücksprache halten ob du die ggf. weiterverwenden darfst.), das wären dann also die Tiles, der Editor als .exe und als .bb und die .ini-files für den Editor. Hat noch nette Features wie ne minimap und eine Autovervollständigen für die Karte (also Rändertiles automatisch plazieren), der Code ist aber eher wüst (war aus meinen BB-Anfangstagen) und nahezu unkommentiert. Wenn er dir hilft sollst du ihn haben. EDIT: ich muss feststellen dass dein Lösungsansatz mit wesentlich weniger Aufwand das selbe Ergebnis wie meiner liefert.... Bleib besser bei deinem Code ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Huhu BladeRunner,
vielen lieben Dank, hab mir auch ganz viel Mühe gegeben... ![]() ![]() Die Idee mit den Farben hatte mir ganz gut gefallen, nur dass ich das nicht als Bild einzeichnen wollte (muss zugeben, das mit dem ReadPixelFast ist mir noch nicht so ganz geheuer...) Dein Editor würde mich trotzdem sehr interessieren. Da kann ich bestimmt noch was lernen... ![]() Ich habe das ja jetzt nur für eine Staggered Map geschrieben, aber ich denke das kann man ganz gut auf die anderen übertragen. Jetzt muss ich nur noch die Sache mit der Worldmap und der Umrechnung auf die sichtbare Map hinbekommen und natürlich das Map-Scrolling... Dann habe ich schon meine kleine "Engine" @ Soli Nur keine Hektik... ![]() Bis denne, Gina. |
||
www.jk-spiele.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group