Iso Mausberechnung für die Tiles?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

blackmaster

Betreff: Iso Mausberechnung für die Tiles?

BeitragMo, Apr 28, 2008 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich versuche gerade die Mausberechnung hinzubekommen für die Tiles, ich habe das mal so versucht:

Code: [AUSKLAPPEN]
For y=0 To 39
  For x=0 To 39
    DrawImage tile,(x-y)*32-scroll_x,(x+y)*16-scroll_y,Spielfeld(x,y)

    If MouseX() > (x-y)*32-scroll_x And MouseX() < (x-y)*32-scroll_x+32 Then
      If MouseY() > (x+y)*16-scroll_y And MouseY() < (x+y)*16-scroll_y+16 Then
        feld_x = x : feld_y = y
      EndIf
    EndIf
  Next
Next

If MouseHit(1) And MouseDown(1) Then
  DrawImage tile,feld_x*32,feld_y*32,frames
EndIf


wenn ich mit der Maus auf irgendeine position klicke, dann wird dieser Tile ganz wo anders gezeichnet.

Die Tiles sind 64*80 gross.

Wie kann ich eine genaue berechnung durchführen?

Danke schonmal.

MfG

Puccini

BeitragMo, Apr 28, 2008 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
was sol ldieses x-y und x+y immer??

das kannst du doch weglassen??
Very Happy das erledigst du doch quasi durch mousey-abfrage danach?

also so:

mousex()>x*32 and mousex()<(x+1)*32 and mousey()>y*32 and mousey()<(y+1)*32

oder so in der art...
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

Firstdeathmaker

BeitragDi, Apr 29, 2008 0:21
Antworten mit Zitat
Benutzer-Profile anzeigen
So:



Code: [AUSKLAPPEN]
Const GFX_X% = 800
Const GFX_Y% = 600

Const TILEWIDTH# = 32
Const TILEHEIGHT# = 16


Graphics GFX_X,GFX_Y,32,2
SetBuffer BackBuffer()

Local MAP_OFFSET[1];Zum scrollen z.B.
MAP_OFFSET[0] = GFX_X/2
MAP_OFFSET[1] = GFX_Y/2

Repeat

   Cls
   Color 255,255,255
   For i0 = 0 To 10
   For i1 = 0 To 10
      Rect XReal(i0,i1)+MAP_OFFSET[0],YReal(i0,i1)+MAP_OFFSET[1],10,10
   Next
   Next
   Local mx% = MouseX() - MAP_OFFSET[0]
   Local my% = MouseY() - MAP_OFFSET[1]
   Local miso_x% = XIso(mx,my)
   Local miso_y% = YIso(mx,my)
   
   Color 255,0,0
   Rect XReal(miso_x,miso_y)+MAP_OFFSET[0],YReal(miso_x,miso_y)+MAP_OFFSET[1],10,10
   Text 10,10, XIso(mx,my)+" "+YIso(mx,my)
Flip
Until KeyHit(1)
End


Function XReal(xiso,yiso)
   Return (xiso-yiso) * TILEWIDTH / 2.0
End Function

Function YReal(xiso,yiso)
   Return (xiso+yiso) * TILEHEIGHT / 2.0
End Function

Function XIso(xreal,yreal)
   Return (xreal/TILEWIDTH) + (yreal/TILEHEIGHT)
End Function

Function YIso(xreal,yreal)
   Return (yreal/TILEHEIGHT) - (xreal/TILEWIDTH)
End Function
Zitat:
xreal = (xiso-yiso) * tilewidth/2.0
yreal = (xiso+yiso) * tileheight/2.0

Daraus folgt:

(2 * xreal) / tilewidth = xiso - yiso
(2 * yreal) / tileheight = xiso + yiso

woraus folgt:

xiso = (xreal/tilewidth) + (yreal/tileheight)
yiso = (yreal/tileheight) - (xreal/tilewidth)
 

blackmaster

BeitragDi, Apr 29, 2008 2:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@Firstdeathmaker danke dir, aber ich habe es anders gelöst, stimmt zwar nicht 100%, aber man kann es lassen.

@Puccini das x-y und x+y ist wichtig, da ich meine Map in Isometrie darstellen möchte, hier ein beispiel:
http://www.tonypa.pri.ee/tbw/tut18.html

Jetzt noch eine Frage und zwar, wie kann ich meine Spielfigur in der Isometrische Map bewegen lassen?

Wenn die Spielfigur nach unten bewegt werden soll, dann muss der wert von SpielerX verringert und SpielerY erhöt werden, wenn ich das so mache:
Code: [AUSKLAPPEN]
SpielerX = SpielerX - 1
SpielerY = SpielerY + 1


das wird so nicht gehen, da die Spielfigur start nach unten bewegt werden muss und leicht nach links.

Wie kann ich das am einfachsten lösen?

[EDIT] Habe das jetzt so gemacht:
Code: [AUSKLAPPEN]
SpielerX = SpielerX - 2
SpielerY = SpielerY + 1


funktioniert sehr gut und danke für die antworten.

MfG

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group