Log In  

Hello,

Is there a way to rotate text, or write text at an angle?

Thanks !

P#36931 2017-01-30 17:57 ( Edited 2017-02-22 12:25)

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. :)

P#36946 2017-01-30 22:01 ( Edited 2017-01-31 03:05)

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
P#37097 2017-02-02 23:03 ( Edited 2017-02-03 04:04)

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 !!

P#37694 2017-02-22 07:25 ( Edited 2017-02-22 12:25)

[Please log in to post a comment]

Follow Lexaloffle:        
Generated 2020-09-18 07:01 | 0.011s | 4194k | Q:18