如何在CoronaSDK中用另一种颜色填充同色区域?

时间:2013-12-05 12:06:48

标签: graphics drawing corona

我有一个应用程序,其部分是着色页面,如绘图应用程序。你可以用手指画画。我想添加的是“填充填充”选项 - 用所选颜色填充形状的选项。

我想知道如何做到这一点,因为我无法访问CoronaSDK中的单个像素属性,所以我不能做最直接的方法(迭代触摸点周围的像素并改变它们的颜色,并重复,直到我找到不同的颜色像素)。

我该怎么办?每种颜色都以黑白图像开始,但这些图像不同,可能会有很多,所以我宁愿不亲手挑选形状或做类似的事情:)

1 个答案:

答案 0 :(得分:1)

这将是非常复杂的,因为你必须处理各种向量。我为绘图游戏所做的是使用行追加API来绘制。这是我用于绘图的代码:

local endPoint, startPoint
local lines, line, lx, ly, sx, sy = {}
local points = {}
r,g,b = 255,0,0
lineWidth = 10
local drawPacket

local odd = true

local function draw(event)
    if event.phase == "began" then
        startPoint = display.newCircle(0,0,lineWidth/2)
        startPoint.x, startPoint.y = event.x, event.y
        startPoint:setFillColor(r,g,b) 

        if startPoint.x <350 or startPoint.x > 700 then
            director:changeScene("fail")
        end

        endPoint = display.newCircle(-100,0,lineWidth/2) 
        endPoint:setFillColor(r,g,b)

        lineGroup:insert(startPoint)
        lineGroup:insert(endPoint)
    elseif event.phase == "moved" then
        if not line then
            print "I am now drawing the line"

            line = display.newLine(startPoint.x, startPoint.y, event.x, event.y)
            lines[ #lines + 1 ] = line
            line.width = lineWidth
            line:setColor(r,g,b)

            lx,ly = startPoint.x , startPoint.y
            sx,sy = event.x, event.y

            lineGroup:insert(line)
        else
            if math.sqrt((lx-event.x)^2+(ly-event.y)^2) > 2 then
                --print "I am now appending the line"
                line:append( event.x, event.y)
                lx, ly = event.x, event.y

            end
            endPoint.x = event.x
            endPoint.y = event.y
            if odd then

                points[#points+1] = event.x
                points[#points+1] = event.y

            end
            odd = not odd
        end
    elseif event.phase == "ended" then
        if win == true then
            if endPoint.x <350 or endPoint.x > 700 then
                director:changeScene("fail")
            else
                director:changeScene("scene11")
            end
        else
            director:changeScene("fail")
        end


        line = nil
        endPoint.x, endPoint.y = event.x, event.y
        print "I have ended my touch, sending data"
        points = {}
    end
end


background:addEventListener("touch", draw)

所以上面的解决方案是如何让人们在图片的顶部绘制,但如果你想要一次点击填充,你将需要创建自定义多边形,然后点击它使用FillColor:

http://docs.coronalabs.com/api/library/display/newPolygon.html

希望这有帮助。