Hi all,
I am a noob at this. I have done some programming in Basic, SIOC and other languages so I have a rough idea of what I'm doing, but new to lua and LOVE.
I have a file with two lines in it - eg:
Hello
----------world!
(where "world!" has 10 spaces in front of it, not dashes, but when I previewed the post it deleted the spaces in my example))
I want to see
Hello world!
I have tried reading the lines one at a time and drawing them in the same place
local file = assert(io.open("path",helloWorld.txt"))
for x=1,2 ,1
do
local line = file:read()
function love.draw()
love.graphics.setNewFont(36)
love.graphics.print (line, 50, 50)
end
end
but the second print overwrites the first.
I have played with the alpha channel of the text and the background but i still just get
----------world!
(again, the dashes in the line abover are not in the actual file - they are spaces in the file, but the system here deleted the spaces from my example)
Any suggestions? I guess I'm doing something wrong or trying to do something not possible but hey that's the fun of learning!
Thanks in advance :-)
Roger.
Complete Noob - Drawing text in layers
- Bunnybacon
- Prole
- Posts: 20
- Joined: Fri Mar 25, 2016 8:42 am
Re: Complete Noob - Drawing text in layers
love clears the main canvas on every draw call. I don't know how to disable this, but you can circumvent it by making a new canvas, like this:
Code: Select all
local file = assert(io.open("text.txt"))
local canvas = love.graphics.newCanvas(300,300)
for x=1,2 ,1 do
local line = file:read()
canvas:renderTo(function()
love.graphics.setNewFont(36)
love.graphics.print(line, 50, 50)
end)
function love.draw()
love.graphics.draw(canvas,0,0)
end
end
Re: Complete Noob - Drawing text in layers
Hi,
Thanks so much for the help!
It made a difference in that the two lines now both show, but they are superimposed.
The second line has spaces at the beginning, which should mean (if they were printed) that it would show 'Hello world!'
But what I'm getting is 'Hello' and 'world!' printed on top of each other.
progress, though, and I'm grateful for the help.
I'm guessing they are on totally separate canvasses which are then superimposed on each other?
Thanks,
Roger.
Thanks so much for the help!
It made a difference in that the two lines now both show, but they are superimposed.
The second line has spaces at the beginning, which should mean (if they were printed) that it would show 'Hello world!'
But what I'm getting is 'Hello' and 'world!' printed on top of each other.
progress, though, and I'm grateful for the help.
I'm guessing they are on totally separate canvasses which are then superimposed on each other?
Thanks,
Roger.
Re: Complete Noob - Drawing text in layers
So I changed it to:
local canvas = love.graphics.newCanvas()
local line = file:read()
canvas:renderTo(function()
love.graphics.setNewFont(36)
love.graphics.print(line, 50, 50)
end)
local line = file:read()
canvas:renderTo(function()
love.graphics.setNewFont(36)
love.graphics.print(line, 150, 50)
end)
function love.draw()
love.graphics.draw(canvas,0,0)
end
And with a bit of tinkering I can get it to work (I only have about 12 lines to deal with)
As an aside, I'm getting a square character at the end of each line - any idea why?
many thanks,
Roger.
local canvas = love.graphics.newCanvas()
local line = file:read()
canvas:renderTo(function()
love.graphics.setNewFont(36)
love.graphics.print(line, 50, 50)
end)
local line = file:read()
canvas:renderTo(function()
love.graphics.setNewFont(36)
love.graphics.print(line, 150, 50)
end)
function love.draw()
love.graphics.draw(canvas,0,0)
end
And with a bit of tinkering I can get it to work (I only have about 12 lines to deal with)
As an aside, I'm getting a square character at the end of each line - any idea why?
many thanks,
Roger.
Re: Complete Noob - Drawing text in layers
Please use code tags.
You're getting square characters at the end of each line because your file has Windows style line endings (<CR><LF>); file:read() looks for Unix style line endings (<LF>) and ignores <CR>.
This results in lines that end in <CR>. The active font displays that (unprintable) character as a box.
You can either change the line endings in a text editor, or remove the <CR> character from the strings:
You're getting square characters at the end of each line because your file has Windows style line endings (<CR><LF>); file:read() looks for Unix style line endings (<LF>) and ignores <CR>.
This results in lines that end in <CR>. The active font displays that (unprintable) character as a box.
You can either change the line endings in a text editor, or remove the <CR> character from the strings:
Code: Select all
local line = file:read():gsub("\r", "")
- zorg
- Party member
- Posts: 3468
- Joined: Thu Dec 13, 2012 2:55 pm
- Location: Absurdistan, Hungary
- Contact:
Re: Complete Noob - Drawing text in layers
If i recall correctly, Löve removes those extra spaces from the beginning of lines to be printed, maybe that's why; you need to offset it yourself.RogerH wrote: ↑Sun Sep 03, 2017 6:03 pm
The second line has spaces at the beginning, which should mean (if they were printed) that it would show 'Hello world!'
But what I'm getting is 'Hello' and 'world!' printed on top of each other.
I'm guessing they are on totally separate canvasses which are then superimposed on each other?
Me and my stuff True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.
Re: Complete Noob - Drawing text in layers
Thanks so much for the help both of you - off to bed now as I have an early start but will get back to you with results tomorrow. Cgheers,
Roger.
Roger.
Re: Complete Noob - Drawing text in layers
All three of you, sorry!
Re: Complete Noob - Drawing text in layers
Hi Guys,
Getting some success now. The code to get rid of the squares worked, and the code to draw separate canvasses worked too!
I figured a workaround for the superimposed graphics by using 'printf':
I was then able to justify left and right and get "Hello--------------world!" (again, dashes represent spaces in the example)
What I'm finding in this is that spaces are an issue - they seem to get stripped from the file as it's printed - at least, more than one space is - if there's a space between two words like " Hello lovely--------world!" then that space gets printed. But at the moment it sems multiple spaces get stripped. This is a bit of an problem as they are part of the formatting of the final presentation.
Is there a way of reading the lines of the file by character, rather than lines?
Would this be a way of reading the file character by character?
If the "file:read" comes to a space, how would I force it to print a space to the final screen?
many thanks again,
Roger.
Getting some success now. The code to get rid of the squares worked, and the code to draw separate canvasses worked too!
I figured a workaround for the superimposed graphics by using 'printf':
Code: Select all
--Read first 12 chars
local line = file:read(12):gsub("\r", "")
canvas:renderTo(function()
love.graphics.setNewFont(32)
love.graphics.printf(line, 40, 38, 800,"left")
end)
--Read second 12 chars (plus line feeds = 14)
local line = file:read(14):gsub("\r", "")
canvas:renderTo(function()
love.graphics.setNewFont(32)
love.graphics.printf(line, 20, 38, 780,"right")
end)
What I'm finding in this is that spaces are an issue - they seem to get stripped from the file as it's printed - at least, more than one space is - if there's a space between two words like " Hello lovely--------world!" then that space gets printed. But at the moment it sems multiple spaces get stripped. This is a bit of an problem as they are part of the formatting of the final presentation.
Is there a way of reading the lines of the file by character, rather than lines?
Would this be a way of reading the file character by character?
Code: Select all
local line = file:read(1):gsub("\r", "")
many thanks again,
Roger.
- zorg
- Party member
- Posts: 3468
- Joined: Thu Dec 13, 2012 2:55 pm
- Location: Absurdistan, Hungary
- Contact:
Re: Complete Noob - Drawing text in layers
As i said before, reading it all it one go is not the issue; your issue is that yes, love.graphics.print and printf does strip extra spaces.
Can't do anything about that, but you can use the font functions to get the width of the previous n characters, and calculate the offsets that way... although i'm sure there's an easier way to what you want to accomplish... probably.
Can't do anything about that, but you can use the font functions to get the width of the previous n characters, and calculate the offsets that way... although i'm sure there's an easier way to what you want to accomplish... probably.
Me and my stuff True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.
Who is online
Users browsing this forum: Ahrefs [Bot] and 2 guests