[SOLVED]Picking colours and see what current colour you have

General discussion about LÖVE, Lua, game development, puns, and unicorns.
User avatar
nice
Party member
Posts: 191
Joined: Sun Sep 15, 2013 12:17 am
Location: Sweden

Re: Help: Picking colours and see what current colour you ha

Post by nice »

artofwork wrote: love.graphics.setColor() doesn't return a value so your local variable Red would be nil.
huh, it made sense to me and I guess that it would still be nil if I exchanged red with the number 1?
Zilarrezko wrote:

Code: Select all

Screenshot = love.graphics.newScreenshot(true) --Takes a screen shot, and returns an image data. The parameter is a boolean "Copy Alpha"

local r, g, b, a = Screenshot:getPixel(mouseX - 1, mouseY - 1) --image data is 0 based, so we minus 1 as Lua and love2d is 1 based.

--Use r, g, b, a however you want. (Not sure what it will do if you don't copy the alpha though. I didn't test it.)

--After storing the variable or something... Delete the image object, or just make it local so it will delete itself after a function ends.
If you wanted to pick a color with your mouse.
I appreciate the thought but it's not what I'm currently looking for, I'm still into the idea of having the colours accessed by the numbers on the keyboard.
:awesome: Have a good day! :ultraglee:
User avatar
Zilarrezko
Party member
Posts: 345
Joined: Mon Dec 10, 2012 5:50 am
Location: Oregon

Re: Help: Picking colours and see what current colour you ha

Post by Zilarrezko »

Well I just spent 5 minutes putting this together. In case you didn't get your question answered.

Code: Select all

function love.load()
        daColors = {{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255}}
	currentColor = 1
end

function love.draw()
        for i = 1, #daColors do
		love.graphics.setColor(daColors[i])
		if i == currentColor then
			love.graphics.rectangle("fill", 10, 10 + i*50, 100, 50)
		else
			love.graphics.rectangle("line", 10, 10 + i*50, 100, 50)
		end
	end
end

function love.mousepressed(x, y, button)
       if button == "l" then
		local screenshot = love.graphics.newScreenshot()
		local r, g, b, a = screenshot:getPixel(x - 1, y - 1)
		daColors[currentColor] = {r, g, b, a}
	end
end

function love.keypressed(key) --You could do some string magic. But it's simpler to do this, although more tedious -_-
        if key == "kp1" then
		currentColor = 1
	elseif key == "kp2" then
		currentColor = 2
	elseif key == "kp3" then
		currentColor = 3
	elseif key == "kp4" then
		currentColor = 4
	elseif key == "kp5" then
		currentColor = 5
	elseif key == "kp6" then
		currentColor = 6
	elseif key == "kp7" then
		currentColor = 7
	elseif key == "kp8" then
		currentColor = 8
	elseif key == "kp9" then
		currentColor = 9
	end
end
Sorry if the code is a bit wonky. I just copy and pasted.
User avatar
nice
Party member
Posts: 191
Joined: Sun Sep 15, 2013 12:17 am
Location: Sweden

Re: Help: Picking colours and see what current colour you ha

Post by nice »

Zilarrezko wrote:Well I just spent 5 minutes putting this together. In case you didn't get your question answered.

Code: Select all

function love.load()
        daColors = {{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255}}
	currentColor = 1
end

function love.draw()
        for i = 1, #daColors do
		love.graphics.setColor(daColors[i])
		if i == currentColor then
			love.graphics.rectangle("fill", 10, 10 + i*50, 100, 50)
		else
			love.graphics.rectangle("line", 10, 10 + i*50, 100, 50)
		end
	end
end

function love.mousepressed(x, y, button)
       if button == "l" then
		local screenshot = love.graphics.newScreenshot()
		local r, g, b, a = screenshot:getPixel(x - 1, y - 1)
		daColors[currentColor] = {r, g, b, a}
	end
end

function love.keypressed(key) --You could do some string magic. But it's simpler to do this, although more tedious -_-
        if key == "kp1" then
		currentColor = 1
	elseif key == "kp2" then
		currentColor = 2
	elseif key == "kp3" then
		currentColor = 3
	elseif key == "kp4" then
		currentColor = 4
	elseif key == "kp5" then
		currentColor = 5
	elseif key == "kp6" then
		currentColor = 6
	elseif key == "kp7" then
		currentColor = 7
	elseif key == "kp8" then
		currentColor = 8
	elseif key == "kp9" then
		currentColor = 9
	end
end
Sorry if the code is a bit wonky. I just copy and pasted.
Wow! I didn't really expect this, I will check this code out (not right now as it's late where I am) and see if it works.

Code: Select all

function love.load()
        daColors = {{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255},{255, 255, 255, 255}}
	currentColor = 1
end
Could you elaborate why this part of the code looks like it does? does it have a purpose or is it just an example?

Also thank you for the help, it's appreciated! :awesome:
:awesome: Have a good day! :ultraglee:
User avatar
Zilarrezko
Party member
Posts: 345
Joined: Mon Dec 10, 2012 5:50 am
Location: Oregon

Re: Help: Picking colours and see what current colour you ha

Post by Zilarrezko »

Yeah, "daColors" is the table that holds the colors. I made them all 255,255,255,255 (white). Because it was simple haha. Current color is the color that is currently selected, so that way when you click on a pixel to pick a color from the screen, it will copy that pixel's color onto the currently selected index in the daColors table.

And it's in the love.load function because I only want it to initialize it once.

Unless you are asking why I have tables inside tables. And that's just to make things easier so I can draw everything in an easy for loop, and access/change those colors easier.
User avatar
artofwork
Citizen
Posts: 91
Joined: Mon Sep 15, 2014 1:17 am
Location: East Coast USA

Re: Help: Picking colours and see what current colour you ha

Post by artofwork »

Its a table of colors @Nice

@Zilarrezko your a great coder but what you wrote is overkill :p
User avatar
Zilarrezko
Party member
Posts: 345
Joined: Mon Dec 10, 2012 5:50 am
Location: Oregon

Re: Help: Picking colours and see what current colour you ha

Post by Zilarrezko »

artofwork wrote: @Zilarrezko your a great coder but what you wrote is overkill :p
:awesome:
User avatar
nice
Party member
Posts: 191
Joined: Sun Sep 15, 2013 12:17 am
Location: Sweden

Re: Help: Picking colours and see what current colour you ha

Post by nice »

Zilarrezko wrote:Yeah, "daColors" is the table that holds the colors. I made them all 255,255,255,255 (white). Because it was simple haha. Current color is the color that is currently selected, so that way when you click on a pixel to pick a color from the screen, it will copy that pixel's color onto the currently selected index in the daColors table.

And it's in the love.load function because I only want it to initialize it once.

Unless you are asking why I have tables inside tables. And that's just to make things easier so I can draw everything in an easy for loop, and access/change those colors easier.
Ah okay, I just wanted to make it clear for myself :)
:awesome: Have a good day! :ultraglee:
User avatar
DaedalusYoung
Party member
Posts: 413
Joined: Sun Jul 14, 2013 8:04 pm

Re: Help: Picking colours and see what current colour you ha

Post by DaedalusYoung »

artofwork wrote:
nice wrote:
I started thinking wouldn't it be easier if I gave my colours a local statement instead for example:

Code: Select all

 local Red = love.graphics.setColor(235, 0, 0) 
I don't really know how the other part of the code would look like but my theory would be that I would write the code needed and give it my local statement.
Is this more complicated or am I going the wrong way?
love.graphics.setColor() doesn't return a value so your local variable Red would be nil.
You could of course do something like:

Code: Select all

local Red = { 235, 0, 0 }
But it's easier to use an indexed table rather than individual colours.
User avatar
nice
Party member
Posts: 191
Joined: Sun Sep 15, 2013 12:17 am
Location: Sweden

Re: Help: Picking colours and see what current colour you ha

Post by nice »

DaedalusYoung wrote:
artofwork wrote:
nice wrote:
I started thinking wouldn't it be easier if I gave my colours a local statement instead for example:

Code: Select all

 local Red = love.graphics.setColor(235, 0, 0) 
I don't really know how the other part of the code would look like but my theory would be that I would write the code needed and give it my local statement.
Is this more complicated or am I going the wrong way?
love.graphics.setColor() doesn't return a value so your local variable Red would be nil.
You could of course do something like:

Code: Select all

local Red = { 235, 0, 0 }
But it's easier to use an indexed table rather than individual colours.
Why is it easier? I might sound, I don't know, repetitive? I'm asking because I want to know and learn.
:awesome: Have a good day! :ultraglee:
User avatar
DaedalusYoung
Party member
Posts: 413
Joined: Sun Jul 14, 2013 8:04 pm

Re: Help: Picking colours and see what current colour you ha

Post by DaedalusYoung »

Because you need to have a variable to remember the currently selected colour. In Zilarrezko's code, you can see this, it is called currentColor. If you use numbers here, you can directly use that number to set the selected colour in love.draw.

If you use unique names for each colour, you can't do this, you'd have to make some strange and long if-block, like this:

Code: Select all

if currentColor == 1 then
    love.graphics.setColor(Red)
elseif currentColor == 2 then
    love.graphics.setColor(Orange)
elseif currentColor == 3 then
    love.graphics.setColor(Yellow)
    -- and so on
end
You can see how that is ugly and bulky. In addition, if you ever decide you want to change the colours; shuffle them up, or make a whole new palette, then you're either stuck with these old names, or you have to go through your entire program and change the variable names everywhere.
Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests