2016-04-06 12 views
1

DrawNodeオブジェクトを使用して角を丸くしたRectを描くことは可能ですか? ベジェ曲線を使って何かが可能だと思うが、私はいくつかの試みをしたが、私はそれを扱うことができないと思う。私はこれらの2つの機能見つけたAPIを見てみるとベゼルを使用したココス2d-xの角丸矩形

(const Vec2 &origin, const Vec2 &control, const Vec2 &destination, unsigned int segments, const Color4F &color)

drawCubicBezier (const Vec2 &origin, const Vec2 &control1, const Vec2 &control2, const Vec2 &destination, unsigned int segments, const Color4F &color)


drawQuadBezierを[解答後に変更]

私は多分誰かがこれは便利、Cocos2dxに答えを適用しています(ちょうどあなたが高精度を必要としない場合はintにいくつかの鋳造を行って)

auto MagicConst = 0.552; 
auto position = 150; 
auto R = 50; 

Vec2 TopLeft = Vec2(position, position + R * 2); 
Vec2 TopRight = Vec2(position + R * 2, position + R * 2); 
Vec2 BottomRight = Vec2(position + R * 2, position); 
Vec2 BottomLeft = Vec2(position, position); 

Vec2 originTL = Vec2(TopLeft.x, TopLeft.y - R); 
Vec2 originTR = Vec2(TopRight.x - R, TopRight.y); 
Vec2 originBR = Vec2(BottomRight.x - R, BottomRight.y); 
Vec2 originBL = Vec2(BottomLeft.x, BottomLeft.y + R); 

Vec2 control1TL = Vec2(TopLeft.x, (int) (TopLeft.y - R * (1 - MagicConst))); 
Vec2 control1TR = Vec2((int) (TopRight.x - R * (1 - MagicConst)), TopRight.y); 
Vec2 control1BR = Vec2((int) (BottomRight.x - R * (1 - MagicConst)), BottomRight.y); 
Vec2 control1BL = Vec2(BottomLeft.x, (int) (BottomLeft.y + R * (1 - MagicConst))); 

Vec2 control2TL = Vec2((int) (TopLeft.x + R * (1 - MagicConst)), TopLeft.y); 
Vec2 control2TR = Vec2(TopRight.x, (int) (TopRight.y - R * (1 - MagicConst))); 
Vec2 control2BR = Vec2(BottomRight.x, (int) (BottomRight.y + R * (1 - MagicConst))); 
Vec2 control2BL = Vec2((int) (BottomLeft.x + R * (1 - MagicConst)), BottomLeft.y); 

Vec2 destinationTL = Vec2(TopLeft.x + R, TopLeft.y); 
Vec2 destinationTR = Vec2(TopRight.x, TopRight.y - R); 
Vec2 destinationBR = Vec2(BottomRight.x, BottomRight.y + R); 
Vec2 destinationBL = Vec2(BottomLeft.x + R, BottomLeft.y); 

auto roundCorner = DrawNode::create(); 
roundCorner->drawCubicBezier(originTL, control1TL, control2TL, destinationTL, 10, Color4F::RED); 
roundCorner->drawCubicBezier(originTR, control1TR, control2TR, destinationTR, 10, Color4F::GREEN); 
roundCorner->drawCubicBezier(originBR, control1BR, control2BR, destinationBR, 10, Color4F::YELLOW); 
roundCorner->drawCubicBezier(originBL, control1BL, control2BL, destinationBL, 10, Color4F::WHITE); 
addChild(roundCorner); 

これが生成されます

http://i.stack.imgur.com/mdEOM.png

ここで、MagicConstを変更して、必要に応じてコーナーを丸めることができます。

MagicConst = 0.9と例えば

:私は望んでいた結果であるhttp://i.stack.imgur.com/9V5cr.png

! ;)((私はまだ埋め込まれた画像を投稿することはできません))あなた

を@Mboに感謝:P

答えて

関連する問題