我有一个应用程序,其部分是着色页面,如绘图应用程序。你可以用手指画画。我想添加的是“填充填充”选项 - 用所选颜色填充形状的选项。
我想知道如何做到这一点,因为我无法访问CoronaSDK中的单个像素属性,所以我不能做最直接的方法(迭代触摸点周围的像素并改变它们的颜色,并重复,直到我找到不同的颜色像素)。
我该怎么办?每种颜色都以黑白图像开始,但这些图像不同,可能会有很多,所以我宁愿不亲手挑选形状或做类似的事情:)
答案 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
希望这有帮助。