Tutorial zu Iso-tilesets gesucht

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Gina

Betreff: Tutorial zu Iso-tilesets gesucht

BeitragDo, Sep 16, 2004 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Wink

Vielen lieben Dank, Gina.
www.jk-spiele.de
 

getlose

BeitragDo, Sep 16, 2004 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 16, 2004 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 16, 2004 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 16, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann formuliere ich meine Frage mal anders... Wink

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

BeitragDo, Sep 16, 2004 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo gina
ob die formel genau ist kommt auf das tile an das du verwendest.

user posted image

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

BeitragDo, Sep 16, 2004 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 16, 2004 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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:

user posted image
lg Mangudai
 

Roseman

BeitragDo, Sep 16, 2004 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 16, 2004 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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...Wink Das dumme ist nur, dass sein Beispiel, was ja besser sein soll, noch viel schlechter ist, weil dann nämlich manche tiles nicht anwählbar sind...

Lad dir mal die zip oden runter und probier das mal aus, dann weißt du was ich meine...
www.jk-spiele.de
 

getlose

BeitragFr, Sep 17, 2004 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
-_-

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. Wink

soli

BeitragFr, Sep 17, 2004 5:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde mir keine Stress mit der Mathematik machen,
sondern in einem weiteren Layer bunte Tyles unterlegen.
Und dann die Farbe prüfen.
user posted image
solitaire

BladeRunner

Moderator

BeitragFr, Sep 17, 2004 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Sep 17, 2004 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt... Wink

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):

user posted image user posted image

Für größere tiles müßte man das "Layer" natürlich anpassen...

Gina.
www.jk-spiele.de

soli

BeitragFr, Sep 17, 2004 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragFr, Sep 17, 2004 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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...Wink

Stimmt meine Berechnung so?

Gina.
www.jk-spiele.de

BladeRunner

Moderator

BeitragFr, Sep 17, 2004 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Sep 17, 2004 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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.
Wink
muss weg, schau später die Codes an.
solitaire

BladeRunner

Moderator

BeitragFr, Sep 17, 2004 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Wink (Respekt, schön schlanker 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

BeitragFr, Sep 17, 2004 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu BladeRunner,

vielen lieben Dank, hab mir auch ganz viel Mühe gegeben...Wink Habe 3 karierte Blätter vollgekritzelt, weil ich das gerne in eine Formel packen wollte, aber dazu ist meine Schulzeit wohl doch schon zu lange her...Smile

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...Wink Mein EMIL: jeanne [at] jk-spiele.de

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...Wink Der Code läuft ja nicht weg. Ich hoffe, er stimmt wirklich an allen Ecken...

Bis denne, Gina.
www.jk-spiele.de

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group