Hello,
Is there a way to rotate text, or write text at an angle?
Thanks !
Rotating the pixels of the letters would have a poor result at this resolution. You could print the letters one at a time along a line with something like this:
function print_angle(s, x, y, c, a) for i=1,#s do print(sub(s,i,i), x, y, c) x += cos(a) * 4 y += sin(a) * 6 end end function _init() angle = 0 end function _update() angle += 0.01 if (angle > 1) angle = 0 end function _draw() cls() print_angle('rotate', 62, 61, 7, angle) end |
Here's a forum discussion on sprite rotation that illustrates the limitations of rotating a small image. https://www.lexaloffle.com/bbs/?tid=2189 I tried printing a string to the screen then using memcpy to transfer it to the spritesheet for use with these rotation routines, but I couldn't get it working before I lost interest. I don't see why it wouldn't work in theory, other than being illegible. :)
I wrote the following functions for a game I'm making. It allows you to copy any portion of the screen and flip it horizontally or vertically, but not rotate. It works on anything on the screen, including text.
Example:
cpy = copy_screen(x+3,y+3,3,25) paste_screen(cpy, x+18,y+4, false, true) --or paste_screen(copy_screen(x+3,y+3,3,25), x+18,y+4, false, true) |
function paste_screen(screen,x,y,flip_x,flip_y) if flip_x then ax = #screen else ax = 1 end for sx = 1, #screen do if flip_y then ay = #screen[1] else ay = 1 end for sy = 1, #screen[sx] do rect(x+sx-1,y+sy-1,x+sx-1,y+sy-1,screen[ax][ay]) if flip_y then ay -= 1 else ay += 1 end end if flip_x then ax -= 1 else ax += 1 end end end function copy_screen(x,y,width,height) local screen = {} for sx = x,x+width-1 do screen[sx-x+1] = {} for sy = y,y+height-1 do screen[sx-x+1][sy-y+1] = pget(sx,sy) end end return screen end |
Thanks a lot !
Indeed the rotating of text would destroy the text, but rotating zoomed text might be OK.
Anyways, it is very interesting code to get me started.
thanks !!
[Please log in to post a comment]