Drawing tilemap with zoom

Advanced game related topics
wombats
Enthusiast
Enthusiast
Posts: 663
Joined: Thu Dec 29, 2011 5:03 pm

Drawing tilemap with zoom

Post by wombats »

Hi,

To draw a tilemap, I calculate which tiles to draw like this:

Code: Select all

x1 = scroll_pos\x / 32
y1 = scroll_pos\y / 32
x2 = ScreenHeight() / 32
y2 = ScreenWidth() / 32
If x1 > tiles_x
  x1 = tiles_x
EndIf
If y1 > tiles_y
  y1 = tiles_y
EndIf
For y = y1 To (y2 + y1)
  For x = x1 To (x2 + x1)
    ; draw...
  Next
Next
How can I incorporate zooming into this? I'm struggling to understand what I need to multiply by the zoom value.
User avatar
Demivec
Addict
Addict
Posts: 4086
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: Drawing tilemap with zoom

Post by Demivec »

wombats wrote:How can I incorporate zooming into this? I'm struggling to understand what I need to multiply by the zoom value.

Code: Select all

tile_size = 32

zoom_amount = 1 ;za = 1 for normal size, za > 1 to zoom in, 0 > za > 1 to zoom out
screen_tile_size = tile_size * zoom_amount ;zoomed tile size on screen

x1 = scroll_pos\x / screen_tile_size
y1 = scroll_pos\y / screen_tile_size 
x2 = ScreenHeight() / screen_tile_size 
y2 = ScreenWidth() / screen_tile_size 
If x1 > tiles_x
  x1 = tiles_x
EndIf
If y1 > tiles_y
  y1 = tiles_y
EndIf
For y = y1 To (y2 + y1)
  For x = x1 To (x2 + x1)
    ; draw...
  Next
Next
This should adjust for the tile size and can be considered 'simple zooming'. When zooming in things will 'grow' towards the bottom-right of the screen.

'Complex zooming' would require a bit more effort to calculate the position of the visible tiles and would allow zooming in/out of a particular point on the screen such as the center of the screen or the position of the mouse pointer and would cause things to 'grow' outward from or inward to the point of zoom.
wombats
Enthusiast
Enthusiast
Posts: 663
Joined: Thu Dec 29, 2011 5:03 pm

Re: Drawing tilemap with zoom

Post by wombats »

Thanks for the reply.

I think I need more 'complex' zooming. I already calculate the tiles that should display based on the scroll position, so it works at zoom level 1, but not at 0.5, 2.0, etc. Wherever I put the zoom value, it just causes problems like tiles being cut off.
User avatar
Demivec
Addict
Addict
Posts: 4086
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: Drawing tilemap with zoom

Post by Demivec »

Are you using sprites to display your tiles or drawing images?
wombats
Enthusiast
Enthusiast
Posts: 663
Joined: Thu Dec 29, 2011 5:03 pm

Re: Drawing tilemap with zoom

Post by wombats »

I am drawing images. I subtract the current scroll position from their grid position.
#NULL
Addict
Addict
Posts: 1440
Joined: Thu Aug 30, 2007 11:54 pm
Location: right here

Re: Drawing tilemap with zoom

Post by #NULL »

You need to scale the position as well as the size of tiles, i guess that's what you are already doing. If you have gaps, it might be because you are using integer division when applying the scaling. Make sure you have some floating point variables in your division or in the relevant context like variables that are being assigned to.
Post Reply