Mousemapping auf Isomap

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Tornado11

Betreff: Mousemapping auf Isomap

BeitragSo, Jul 29, 2007 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe schon einiges gefunden über das Mousemapping z.B Prüfen ob der Mauszeiger mit einem Tile kollidiert usw. Doch wie siehts mit einer mathematischen Lösung aus? Meine Recherchen haben leider keine nützliche informationen gegeben.
Ich bin dankbar über jeden Ansatz.

Mfg Tornado11

BladeRunner

Moderator

BeitragSo, Jul 29, 2007 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt sicher mathematische Ansätze dazu, aber das Prüfen auf Kollision mit dem Mauszeiger ist der schmerzfreiste Weg.
Wenn Du es rein mathematisch angehen willst wäre vorher zu wissen wie deine Map aufgebaut ist, sprich wie sich Tileposition zu Kartenposition ergibt, denn da gibt es mehrere Möglichkeiten und jede hat ihren eigenen Weg.
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

Tornado11

BeitragSo, Jul 29, 2007 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es bei dem Prüfen auf Kollision mit dem Mauszeiger keine hohen Geschwindikeits einbussen?

BladeRunner

Moderator

BeitragSo, Jul 29, 2007 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Kommt drauf an wieviele Tiles du überprüfst.
Natürlich kann man vorher anhand der Tilegrößen und der Position des Mousezeigers viele Abfragen schon vorher unterbinden - ein simpler Pythagoras kann da schon Wunder bewirken.
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 29, 2007 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
In den meisten Fällen würde ich auf BladeRunner's Lösung setzen. Falls deine Isotiles wie Salmis (oder wie die Dinger heissen) aussehen, so kannst du dir folgendes mal anschauen:

Code: [AUSKLAPPEN]
Graphics 400,200,0,2
SetBuffer FrontBuffer()

While Not KeyHit(1)
 mx=MouseX()
 my=MouseY()

 If ((mx+100)/2+my+150)>300 Then
  If ((mx+200)/2+my+150)<550 Then
   If ((mx+100)/2-my+150)>100 Then
    If ((mx+200)/2-my+150)<350 Then
     Plot mx,my
    End If
   End If
  End If
 End If

Wend
End

Das Beispiel zeigt nur eine Samliabfrage, kann aber genausogut auf eine Tilemap gesetzt werden. Allerdings wird man sich viel zu oft die Zähne dabei ausbeissen, wenn man mal was ändern will.^^
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Schnuff

BeitragSo, Jul 29, 2007 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, ich hab mich auch grad damit befasst, aber ich kann den code irgentwie nicht auf eine x-belibige tilegröße umstellen...
Code: [AUSKLAPPEN]
      If ((mx+TTile_Height/2)/2+my+150)>300 Then
        If ((mx+TTile_Width/2)/2+my+150)<550 Then
         If ((mx+TTile_Height/2)/2-my+150)>100 Then
          If ((mx+TTile_Width/2)/2-my+150)<350 Then
           Return 1
          End If
         End If
        End If
       End If

soweit habe ich es schon "begriffen" aber die +150 und dann die zahl hinter'<' oder '>' weiß ich nichts mit an-zu-fangen...
was haben diese zahlen zu bedeuten?
Programmers dont die. They gosub without return...
 

Beatenvoy

BeitragSo, Jul 29, 2007 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte löschen, hab mich verlesen

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 29, 2007 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ich meinte ja nicht umsonst ''Allerdings wird man sich viel zu oft die Zähne dabei ausbeissen''. Entweder man versteht es, oder nicht. Ich selber finde diese Variante sehr unübersichtlich, da es für mich immer irgendwie schwer vom Begriff ist, obwohl ich diesen Code geschrieben habe. Die Variante hat allerdings den Vorteil, dass man auch direkt ein Tile ansprechnen kann, ohne alle auf dem Bildschirm nach ala IF A>B And A+100<B Then zu suchen. Dafür müsste man allerdings den Code noch ein bischen umschreiben.

edit1 Der Code geht von der Annahme aus, das eine Tilemap ja nichts anderes ist als eine Zweidimensionale Map, die aber in erster Linie um 45° gedreht ist. Das heisst auch, dass sich die MausX -Koordinaten auf die Y -Achse auswirken und umgekehrt!!! Das abflachen der Tilemaps - also halbe Höhe - muß dabei auch mit berücksichtigt werden. Wenn du an dieser Annahme weiter arbeitest, so kannst du mit einer Umstellung auch ein Tile direkt aus deinem Array auslesen, wo du nur die Bildschirmkoordinaten der Maus als Quelle hast.

edit2 Das X und Y -Offset und eventuelle Skallierung machen allerdings dann immer einem zu schaffen, wenn man mal was umändert in der Darstellung der Tilemap. Obwohl, wenn man es gleich ganz ''vernünftig'' macht, sollte auch das kein Problem sein.^^
  • Zuletzt bearbeitet von hectic am So, Jul 29, 2007 17:57, insgesamt 2-mal bearbeitet
 

Schnuff

BeitragSo, Jul 29, 2007 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ah, jetzt hab ich verstanden (ein wenig zumindest) danke dafür Very Happy
Programmers dont die. They gosub without return...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 29, 2007 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Runter gezogenes edit3 So, will ja nicht so sein. Hier mal ein Ansatz ohne Tilesabflachung und Offsetausgleich

Code: [AUSKLAPPEN]
Graphics 512,512,0,2
SetBuffer BackBuffer()



While Not KeyHit(1)

 For q=-512 To 1024 Step 64
  Line q,0,q-512,512
  Line 0,q-512,512,q
 Next

 mx=MouseX()
 my=MouseY()

 Color 0,0,0:Rect 0,16,200,22,1:Color 255,255,255
 Text 20,20,"Feld: X="+Floor((mx-my)/64)+" Y="+Floor((mx+my)/64)

 Flip
 Cls
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Tornado11

BeitragMo, Jul 30, 2007 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Also danke für diese Änsatze!

Nun ich experimentiere schon einige Zeit mit diesen Möglichkeiten,
doch beim 3:2 Format (60*40) gibt einige Probleme.
Weiss da jemand noch was ?

Mfg Tornado11

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jul 30, 2007 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du's denn verstanden, was da passiert?

Hier, das sollte funktionieren.

Code: [AUSKLAPPEN]
Graphics 512,512,0,2
SetBuffer FrontBuffer()

breite#=80
hoehe#=40

verhaeltnis#=breite/hoehe


For my=0 To 512 Step 2
 For mx=0 To 512 Step 2
  xpos=Floor((mx-my*verhaeltnis)/breite)
  ypos=Floor((mx+my*verhaeltnis)/breite)
  Color (xpos*64) Mod 256,(128+ypos*64) Mod 256,0
  Rect mx,my,2,2,1
 Next
Next




While Not KeyHit(1)

 mx=MouseX()
 my=MouseY()

 xpos=Floor((mx-my*verhaeltnis)/breite)
 ypos=Floor((mx+my*verhaeltnis)/breite)

 Color 0,0,0:Rect 0,0,200,22,1:Color 255,255,255
 Text 20,4,"Feld: X="+xpos+" Y="+ypos

Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Tornado11

BeitragMo, Jul 30, 2007 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ja , jetzt habe ich es (wahrscheinlich Very Happy ) richtig verstanden...
hatte da nen kleinen Denkfehler,
also Danke Razz

Mfg Tornado11

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group