Mousemapping auf Isomap
Übersicht

![]() |
Tornado11Betreff: Mousemapping auf Isomap |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt es bei dem Prüfen auf Kollision mit dem Mauszeiger keine hohen Geschwindikeits einbussen? | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bitte löschen, hab mich verlesen | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah, jetzt hab ich verstanden (ein wenig zumindest) danke dafür ![]() |
||
Programmers dont die. They gosub without return... |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun ja , jetzt habe ich es (wahrscheinlich ![]() hatte da nen kleinen Denkfehler, also Danke ![]() Mfg Tornado11 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group