Quick Grid Related Problem
BlitzMax Forums/BlitzMax Beginners Area/Quick Grid Related Problem
| ||
Hi all, Just a quicky here, that I hope someone can advise me on. I have a grid that is 100x64 of 48x48 tiles. I just need to be able to set a variable to show me which X 'tile' I'm in, and which Y 'tile' I'm in. So it's the CaveX and CaveY variables, at the bottom of my code snippet. This works fine when I don't scroll the screen, but goes skewhiff when I scroll around my map. Here's the simple grid / movement routine. For x=0 To CaveWidth 'Draw a basic grid as a guide For y=0 To CaveHeight DrawRect (x*TileWidth)-OffsetX,(y*TileHeight)-OffsetY,TileWidth,TileHeight Next Next SetColor 0,0,0 For x=0 To CaveWidth For y=0 To CaveHeight DrawRect ((x*TileWidth)+1)-OffsetX,((y*TileHeight)+1)-OffsetY,TileWidth-1,TileHeight-1 Next Next If KeyDown(Key_Right) Then 'Move right across the map OffsetX:+4 End If If KeyDown(Key_Left) Then 'Move left across the map OffsetX:-4 End If If KeyDown(Key_Up) Then 'Move up the map OffsetY:-4 End If If KeyDown(Key_Down) Then 'Move down the map OffsetY:+4 End If SetColor 255,255,255 CaveX=Floor(MouseX())/48 CaveY=Floor((MouseY()+40)/40)-1 Cheers! M |
| ||
I don't know what you are doing, but I think it should be like this:CaveX=Floor((MouseX()+offsetx)/48) CaveY=Floor((MouseY()+offsety)/48) |
| ||
Hi, Cheers for that, I gave it a try, but it does'nt work correctly, as it shifts the 'current' square over to the right when I scroll. Thanks though! M. |
| ||
I tryed it like this and it works: maybe if you show more code, I can figure out what you are doing wrong. |
| ||
Not a problem, your help is appreciated! :)'Cave Editor v0.1 '(C) Matt Vinyl 'Version Date: 01/06/2008 '--------General Declarations Graphics 1024,768 'Screen width and height in pixels SetBlend Alphablend Const TileWidth=48 'Width of tile in pixels Const TileHeight=48 'Height of tile in pixels Const CaveWidth=100 'Width of cave in tiles Const CaveHeight=64 'Height of cave in tiles Type Tile 'Set up the tile type Field X 'X position of the tile Field Y 'Y position of the tile Field Tile 'The tile number Field State 'Tile state, has tile been parsed End Type Global Cave[CaveWidth,CaveHeight] 'Dimension the cave Global OffsetX=0 'Movement offset flag (width) Global OffsetY=0 'Movement offset flag (height) Global CaveX=0 'X of currently selected grid tile Global CaveY=0 'Y of currently selected grid tile Global CurrentTile=1 'The currently selected tile to place in the map Global TileCount=102 Global State=0 'A flag that denotes the current state of the programme '0=Startup '99=User as quit HideMouse 'Hide the default mouse cursor '--------Media Declarations Global Tiles=LoadAnimImage ("gfx\tiles.png",48,48,0,TileCount) 'Load in the tile graphics '--------Core Loop Repeat Cls Fnc_Grid Fnc_Quit() Fnc_Debug() Flip Until State=99 'Carry out loop until user quits '--------Functions Function Fnc_Quit() 'Quit the programme If KeyHit(Key_Escape) Then State=99 End Function Function Fnc_Debug() 'Debug routines, to be removed before final version DrawText "MouseX:",0,0 DrawText MouseX(),104,0 DrawText "MouseY:",0,12 DrawText MouseY(),104,12 DrawText "CaveX:",0,24 DrawText CaveX,104,24 DrawText "CaveY:",0,36 DrawText CaveY,104,36 DrawText "Current Tile:",0,48 DrawText CurrentTile,104,48 End Function Function Fnc_Grid() 'Control moving around the grid SetColor 100,100,100 For x=0 To CaveWidth 'Draw a basic grid as a guide For y=0 To CaveHeight DrawRect (x*TileWidth)-OffsetX,(y*TileHeight)-OffsetY,TileWidth,TileHeight Next Next SetColor 0,0,0 For x=0 To CaveWidth For y=0 To CaveHeight DrawRect ((x*TileWidth)+1)-OffsetX,((y*TileHeight)+1)-OffsetY,TileWidth-1,TileHeight-1 Next Next If KeyDown(Key_Right) Then 'Move right across the map OffsetX:+4 End If If KeyDown(Key_Left) Then 'Move left across the map OffsetX:-4 End If If KeyDown(Key_Up) Then 'Move up the map OffsetY:-4 End If If KeyDown(Key_Down) Then 'Move down the map OffsetY:+4 End If SetColor 255,255,255 'CaveX=Floor((MouseX()+OffsetX)/48) 'CaveY=Floor((MouseY()+OffsetY)/48) 'CaveX=Floor(MouseX())/48 'Work out current grid square X 'CaveY=Floor((MouseY()+40)/40)-1 'Work out current grid square Y DrawImage Tiles,CaveX*48,CaveY*48,CurrentTile 'Show current tile in position X Y If KeyHit(Key_Equals) Then 'Cycle through available tiles If CurrentTile<TileCount-1 Then CurrentTile:+1 Else CurrentTile=0 End If End If If KeyHit(Key_Minus) Then If CurrentTile>0 Then CurrentTile:-1 Else CurrentTile=TileCount-1 End If End If End Function Here's what I have so far. Note that I have commented out the two attempts I've tried so far. |
| ||
do you want it to snap to grid? do you want it to maintain aproximate screen position? do you want it to move with the grid and disregard current mouse position? |
| ||
is this what you want? [edit] my mistake. minor adjustment on tipo. that is why I always use superstrict |
| ||
Ah, thankyou, that is spot on! It's those Mod / Floor / Math functions that always throw me! Superstrict: Yes, I really should get into the habit of using that. ;) Cheers! M |