Currently Selected Tile (Types)
Blitz3D Forums/Blitz3D Beginners Area/Currently Selected Tile (Types)
| ||
| Hi all, I've a 5x5 'grid' of tiles, each of which is a type element (Fields: X, Y, Letter). Each tile is a randomly selected letter of the alphabet. When the player moves the cursor over a tile, how can I 'read' what the tile they are over is? I hope this makes sense, but if any further info. would be useful, please let me know. Any help is much appreciated! ;) Kindest regards, M |
| ||
| Well you have Dim grid.tile(5,5) I hope. Then you convert the mouse position to a tile index. Local mousetile.tile mousetile=grid(mousex()/tilewidth,mousey()/tileheight) Now mousetile points to the tile the mouse is over. Print mousetile\letter |
| ||
| Hi, Hmm, I didn't have the array set up, so I'll introduce that and see if I can get it to work. In the mean time, here's my code (relevant parts)
; Variable & Type Dimensions-----------------------------------------------------------------------------------------------------
Global state=0 ; Game state variable.
Global mx,my ; Mouse X and Y co-ordinates.
Type tile
Field x,y,l
End Type
; Media--------------------------------------------------------------------------------------------------------------------------
Global gfxpoint=LoadImage("gfx\hand.png") : MaskImage gfxpoint,255,0,255
Global gfxboard=LoadImage("gfx\board.png")
Global gfxletters=LoadAnimImage("gfx\letters.png",129,128,0,78) : MaskImage gfxletters,255,0,255
; Main Game Loop-----------------------------------------------------------------------------------------------------------------
Repeat
Cls
If state=0 Then
Generate()
End If
Display()
Flip
Until KeyHit(1)
; Functions----------------------------------------------------------------------------------------------------------------------
Function Display()
DrawImage gfxboard,0,0
mx=MouseX()
my=MouseY()
mxa=Floor((mx-53)/129)
mya=Floor((my-62)/128)
For letter.tile=Each tile
DrawImage gfxletters,letter\x,letter\y,letter\l
If mx>=53 And mx<698 And my>=62 And my<702
DrawImage gfxletters,(mxa*129)+53,(mya*128)+62,letter\l+26
End If
Next
DrawImage gfxpoint,mx,my
End Function
Thanks! |
| ||
| The best way to do it is, when you create the tiles you do something like: letter.tile=new tile grid(x,y)=letter letter\x=x letter\y=y Then to tell which tile the mouse is over you use grid(mxa,mya) |
| ||
Or just change the If statement you have to:If mx>=letter\x And mx<letter\x+129 And my>=letter\y And my<letter\y+128 DrawImage gfxletters,(mxa*129)+53,(mya*128)+62,letter\l+26 End If |