It looks like you're new here. If you want to get involved, click one of these buttons!
function getCorner(shape, startAngle, xOffset, yOffset, radius) -- simple check to simplify the logic of rect. if(radius == 0 ) then return end -- can be further optimised ! local xRadius = radius local yRadius = radius local sides = radius local arcAngle = 0.25 -- always 90 degrees for the rounded rect. -- increase or decrease this as per accuracy required. This works fine for me atleast local angleStep = arcAngle / sides local xx = math.cos(startAngle*2*math.pi) * xRadius + xOffset local yy = math.sin(startAngle*2*math.pi) * yRadius + yOffset for i = 1,sides do local angle = startAngle + i * angleStep shape:lineTo((math.cos(angle*2*math.pi) * xRadius) + xOffset, (math.sin(angle*2*math.pi) * yRadius) + yOffset) end end -- lots of variables here are left as exercise for coder. local backgroundColor = 0xff00ff local borderColor = 0x00ff00 -- change these as per your liking -- they all can be different local borderTopLeftRadius = 20 local borderTopRightRadius = 30 local borderBottomLeftRadius = 40 local borderBottomRightRadius = 0 -- width of rectangle local width = 300 -- height of rectangle local height = 200 -- The actual shape is here local shape = Shape.new() shape:setFillStyle(Shape.SOLID, backgroundColor) shape:setLineStyle(borderWidth, borderColor) shape:beginPath() shape:moveTo(0, 0) -- top left shape:moveTo(borderTopLeftRadius, 0) shape:lineTo(width - borderTopRightRadius, 0) -- top right corner getCorner(shape, 0.75, width - borderTopRightRadius, borderTopRightRadius , borderTopRightRadius) -- line from top right corner to bottom. shape:lineTo(width, height - borderTopRightRadius - borderBottomRightRadius) -- bottom right corner getCorner(shape, 0, width - borderBottomRightRadius, height - borderBottomRightRadius, borderBottomRightRadius) -- line to bottom left corner shape:lineTo(0 + borderBottomLeftRadius, height) -- bottom left corner getCorner(shape, 0.25, borderBottomLeftRadius, height - borderBottomLeftRadius, borderBottomLeftRadius) -- line to top left corner shape:lineTo(0, borderTopLeftRadius) -- top left corner getCorner(shape, 0.5, borderTopLeftRadius, borderTopLeftRadius, borderTopLeftRadius) shape:endPath() -- add the shape to stage or parent sprite and rotate / animate / position like any other shape. stage:addChild(shape) |
Likes: ar2rsawseen
Comments
https://github.com/ar2rsawseen/GiderosCodingEasy/blob/master/GiderosCodingEasy.lua
line 983
Likes: uncleking
@ar2rsawseen Would it be possible to integrate these as part of actual API ?