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



我有一个应用程序,它的一部分是像绘图应用程序一样的着色页面。你可以用手指在里面画画。我想添加的是"整体填充"选项——用选定的颜色填充形状。

我想知道如何做到这一点,因为我无法访问CoronaSDK中的单个像素属性,所以我无法使用最直接的方法(迭代触摸点周围的像素并更改其颜色,然后重复此操作,直到找到不同颜色的像素)。

我该怎么做?每种颜色都从一张黑白图像开始,但这些图像是不同的,可能有很多,所以我不想手工挑选形状或做这样的事情:)

这将非常复杂,因为您必须处理各种向量。我为我的绘图游戏所做的是使用线附加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

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新