使用的官方类是:drawNode
函数是:drawNode:drawPolygon()
C++函数的参数说明:
//画多边形,verts为点集,count为点数,fillColor为填充颜色,borderWidth为边缘线宽,borderColor为边缘线颜色
void drawPolygon(Vec2 *verts, int count, const Color4F &fillColor, float borderWidth, const Color4F &borderColor);
lua用table作为点集
代码如下:
drawNodeRoundRect(drawNode, rect, borderWidth, radius, color, fillColor)
-- segments表示圆角的精细度,值越大越精细
local segments = 100
--local segments = 4
local origin = cc.p(rect.x, rect.y)
local destination = cc.p(rect.x + rect.width, rect.y - rect.height)
local points = { }
-- 算出1/4圆
local coef = math.pi / 2 / segments
local vertices = { }
for i = 0, segments do
local rads =(segments - i) * coef
local x = radius * math.sin(rads)
local y = radius * math.cos(rads)
table.insert(vertices, cc.p(x, y))
end
local tagCenter = cc.p(0, 0)
local minX = math.min(origin.x, destination.x)
local maxX = math.max(origin.x, destination.x)
local minY = math.min(origin.y, destination.y)
local maxY = math.max(origin.y, destination.y)
local dwPolygonPtMax =(segments + 1) * 4
local pPolygonPtArr = { }
-- 左上角
tagCenter.x = minX + radius;
tagCenter.y = maxY - radius;
for i = 0, segments do
local x = tagCenter.x - vertices[i + 1].x
local y = tagCenter.y + vertices[i + 1].y
table.insert(pPolygonPtArr, cc.p(x, y))
end
-- 右上角
tagCenter.x = maxX - radius;
tagCenter.y = maxY - radius;
for i = 0, segments do
local x = tagCenter.x + vertices[#vertices - i].x
local y = tagCenter.y + vertices[#vertices - i].y
table.insert(pPolygonPtArr, cc.p(x, y))
end
-- 右下角
tagCenter.x = maxX - radius;
tagCenter.y = minY + radius;
for i = 0, segments do
local x = tagCenter.x + vertices[i + 1].x
local y = tagCenter.y - vertices[i + 1].y
table.insert(pPolygonPtArr, cc.p(x, y))
end
-- 左下角
tagCenter.x = minX + radius;
tagCenter.y = minY + radius;
for i = 0, segments do
local x = tagCenter.x - vertices[#vertices - i].x
local y = tagCenter.y - vertices[#vertices - i].y
table.insert(pPolygonPtArr, cc.p(x, y))
end
if fillColor == nil then
fillColor = cc.c4f(1, 1, 1, 1)
end
drawNode:drawPolygon(pPolygonPtArr, #pPolygonPtArr, fillColor, borderWidth, color)
end
--创建DrawNode
local imagePath = "res/test.png"
head = cc.DrawNode:createWithFilename(imagePath)
head:setAnchorPoint(cc.p(0.5, 0.5))
head:setPosition(cc.p(156+700-190, 134+170+120))
scene:addChild(head,9999)
--配置参数
local TestRect = {}
TestRect.x = 0
TestRect.width = 535
TestRect.y=0
TestRect.height = 235
local TestBorderWidth = 0
local TestColor = cc.c4f(1,1,1,1)
local Testradius = 20
head:clear()
drawNodeRoundRect(head,TestRect,TestBorderWidth,Testradius,TestColor,TestColor)