Graphics 如何用另一种颜色填充同一颜色区域?

Graphics 如何用另一种颜色填充同一颜色区域?,graphics,drawing,coronasdk,Graphics,Drawing,Coronasdk,我有一个应用程序,它的一部分是像绘图应用程序一样的着色页面。你可以用手指画画。我想添加的是“整体填充”选项-用选定颜色填充形状的选项 我想知道如何做到这一点,因为我在CoronasSDK中没有访问单个像素属性的权限,所以我无法使用最直接的方法(遍历触摸点周围的像素并更改其颜色,然后重复,直到找到不同颜色的像素) 我该怎么做?每种颜色都以黑白图像开始,但这些图像是不同的,可能有很多,所以我不想手工挑选形状或做类似的事情:)这将非常复杂,因为你必须处理各种各样的向量。我为我的绘图游戏所做的是使用li

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

我想知道如何做到这一点,因为我在CoronasSDK中没有访问单个像素属性的权限,所以我无法使用最直接的方法(遍历触摸点周围的像素并更改其颜色,然后重复,直到找到不同颜色的像素)


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

这将非常复杂,因为你必须处理各种各样的向量。我为我的绘图游戏所做的是使用line append 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)
本地端点,起始点
局部行,行,lx,ly,sx,sy={}
局部点={}
r、 g,b=255,0,0
线宽=10
本地邮包
局部奇数=真
本地函数绘制(事件)
如果event.phase==“开始”,则
startPoint=display.newCircle(0,0,线宽/2)
startPoint.x,startPoint.y=event.x,event.y
起始点:setFillColor(r、g、b)
如果startPoint.x700,则
导演:changeScene(“失败”)
结束
端点=显示.newCircle(-100,0,线宽/2)
端点:setFillColor(r、g、b)
线组:插入(起始点)
线组:插入(端点)
elseif event.phase==“移动”然后
如果不是线的话
打印“我正在画线”
line=display.newLine(startPoint.x,startPoint.y,event.x,event.y)
线条[#线条+1]=线条
线宽=线宽
行:设置颜色(r、g、b)
lx,ly=startPoint.x,startPoint.y
sx,sy=event.x,event.y
线组:插入(线)
其他的
如果math.sqrt((lx event.x)^2+(ly event.y)^2)>2,则
--打印“我现在添加行”
行:追加(event.x,event.y)
lx,ly=event.x,event.y
结束
endPoint.x=event.x
endPoint.y=event.y
如果奇怪的话
点数[#点数+1]=事件x
点数[#点数+1]=事件y
结束
奇数=不奇数
结束
elseif event.phase==“结束”然后
如果win==true,则
如果端点为.x700,则
导演:changeScene(“失败”)
其他的
导演:改变场景(“场景11”)
结束
其他的
导演:changeScene(“失败”)
结束
直线=零
endPoint.x,endPoint.y=event.x,event.y
打印“我已结束触摸,正在发送数据”
点={}
结束
结束
背景:addEventListener(“触摸”,绘制)
因此,上面是一个解决方案,说明如何让人们在图片的顶部绘制,但如果您希望他们单击“填充”,则必须创建自定义多边形,然后单击“填充颜色”:


希望这有帮助。

但是对于那些自定义多边形,没有办法自动创建它们吗?这都是体力劳动,对吗?;)纠正所有手工劳动,除非您使用类似“确保将此问题标记为已解决”和“向上投票plz”;D