Cursorsnapping auf einer isometrischen Tilemap
Übersicht

![]() |
Horst der BiberBetreff: Cursorsnapping auf einer isometrischen Tilemap |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin
Wollt mal fragen, ob jemand weiss, wie man den Cursor auf einem 32x32er Isoraster snappen lassen kann. Meine Methode is etwas ungenau, weil sie auf einem 32x16 Blockraster basiert. Das Tile Code: [AUSKLAPPEN] Const TILEX=32
Const TILEY=32 Const MAPX=20 Const MAPY=20 SetGraphicsDriver GLMax2DDriver() Graphics 800,600,0,60 SetClsColor 230,230,230 SetMaskColor 100,200,0 AutoImageFlags MASKEDIMAGE Global tile=LoadAnimImage("tile 1zu1.png",TILEX,TILEY,0,2) Global sel=LoadAnimImage("tile 1zu1.png",TILEX,TILEY,0,2) Global sx,sy Global map:Byte[MAPX,MAPY] For local ix=0 To MAPX-1 For local iy=0 To MAPY-1 map(ix,iy)=1 Next Next Repeat sx=(MouseX()-(MouseX() Mod 16))/16 sy=(MouseY()-(MouseY() Mod 32))/32 Cls SetColor 255,255,255 ix=0 iy=0 For ix=0 To MAPX-1 For iy=0 To MAPY-1 Step 2 Local zickzack:Byte=ix Mod 2 DrawImage tile,ix*16,iy*16+zickzack*16,map(ix,iy+zickzack) Next Next SetColor 255,80,0 DrawImage sel,sx*16,sy*32 +(sx Mod 2)*16,1 Flip Until KeyHit(KEY_ESCAPE) Or AppTerminate() End |
||
- Zuletzt bearbeitet von Horst der Biber am Di, Sep 19, 2006 18:00, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
einfach int(koordinate/32) * 32 | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Horst der Biber |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funzt da nicht, weil das ne Isotilemap ist.. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nun, du müsstest dann natürlich die Position ebenfalls in deine Iso Perspektive projizieren, wie du es mit den anderen Koordinaten (zeichnen etc) auch machst. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Horst der Biber |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm.. kannst des ma coden wie du meinst?
weil so ich wie ich des jetzt versteh würden dann immer lücken zwischen den tiles bleiben.. Code: [AUSKLAPPEN] Const TILEX=32
Const TILEY=32 Const MAPX=20 Const MAPY=20 SetGraphicsDriver GLMax2DDriver() Graphics 800,600,0,60 SetClsColor 230,230,230 SetMaskColor 100,200,0 AutoImageFlags MASKEDIMAGE Global tile=LoadAnimImage("tile.png",TILEX,TILEY,0,2) Global sel=LoadanimImage("tile.png",TILEX,TILEY,0,2) Global sx,sy Global map:Byte[MAPX,MAPY] Global ix,iy For ix=0 To MAPX-1 For iy=0 To MAPY-1 map(ix,iy)=1 Next Next Repeat sx=Int(MouseX()/32)*32 sy=Int(MouseY()/32)*32 Cls SetColor 255,255,255 For ix=0 To MAPX-1 For iy=0 To MAPY-1 DrawImage tile,ix*32,iy*32,map(ix,iy) Next Next SetColor 255,80,0 DrawImage sel,sx,sy,1 Flip Until KeyHit(KEY_ESCAPE) Or AppTerminate() End |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nun, ich sehe da keine Iso Koordinatenberechnung
Du hast scheinbar die Grafiken in "IsoPerspektive". In diesem Falle solltest du dich vielleicht mit der Koordinatenprojektion von 2D nach Iso beschäftigen (wird auch benötigt, damit du so etwas wie eine "Höhe,Tiefe,Breite" hast. Denn eine der 3 Dimensionen existiert einfach mit Tiles alleine nicht) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Horst der Biber |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Nun, ich sehe da keine Iso Koordinatenberechnung
das liegt daran, dass ich das in dem Beispiel so getan hab, wie du es vorher beschrieben hattest. (int(koordinate/32) * 32) das mit der isodarstellung lief schon (code is in meinem ersten beitrag) nur ohne gridsnapping... -_- |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und wo soll es da genau eine Iso Koordinatenberechnung haben?
Das ist eine Zeichnungsroutine für Tiles, soweit ich das sehe (ausser ich hätte etwas übersehen) ob die Tiles nun quadratisch, rechteckig oder Hex sind ändert nichts. Nur deswegen ist es noch lange nicht Iso. Wie gesagt, Iso ist eine Projektion von 3D nach 2D, womit sie obwohl es nur 2D Dimensionen hat dennoch Tiefe, Breite und Höhe existieren und auch in die Berechnungen einfliessen. Und für das Maussnapping musst du die Mauskoordinaten in "Isokoordinaten" umrechnen, sprich sie zurückprojizierten von 2D nach 3D (wie du es in 3D mit CameraPick machen würdest) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Di, Sep 19, 2006 22:14, insgesamt einmal bearbeitet
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Wenn Du mal etwas geschickt nach Iso (womöglich Code oder Tutorials) googelst, wirst Du einige sehr gute Beispiele finden, die Dir auch die Umberechnung der Koordinaten erklären bzw. direkt Formeln dafür anbieten.
![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn Du die Koordinaten des Tiles ermitteln willst auf welches die Mau zeigt würde ich Dir raten beim Zeichnen der Tiles zu prüfen ob das gezeichnete Tile sich mit dem Mousezeiger (bzw. dessen Hotspot) schneidet. Wenn ja hast Du dein Tile. Vorteil: Es funktioniert auch wenn das gezeichnete Objekt die Tilegrenzen überschreitet.
Nachteil: eine etwas höhere Berechnungszeit da immer alle Tiles geprüft werden die auch gezeichnet haben. Dem kannst Du allerdings entgehen indem Du eine grobe Koordinatenprüfung vornimmst - Du kannst alle Tiles ignorieren deren Koordinaten über dem Mouseuzeiger + der Tiletiefe liegen. Seitlich gibt es ebenfalls die Möglichkeit einer Grobeingrenzung, da Du ja anhand der Tilebreite und der Tilenummer weisst wo es liegt. Hier würde ich auch etwaqs Sicherheitsabstand lassen, da ein Objekt das Tile ja seitlich überragen kann. Wieviel Du an Abstand kalkulierst musst Du anhand Deiner Tiles flexibel entscheiden. |
||
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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hier kriegt man raus, wenn man hier in der Sidebar nach "iso" sucht. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group