2011-02-16 145 views
1

如何繪製一個形狀,即只在其底部舍入爲,而不使用庫?繪製底部圓角

enter image description here

var _myShape:Shape = new Shape(); 
     _myShape.graphics.lineStyle(4,0x000000,1,true,....); 
     _myShape.graphics.drawRoundRect(0,0,50,50,10); 

回答

1

如果你不想使用Flex庫(如你已經評論過Glenn的答案),如果你只關心將會填充,你可以在你的精靈上使用一個遮罩技術。

var sprite:Sprite = new Sprite(); 
sprite.graphics.beginFill(0xFF0000, 1.0); 
sprite.graphics.drawRoundRect(0, 0, 300, 200, 100, 100); 
sprite.graphics.endFill(); 

var spriteMask:Shape = new Shape(); 
spriteMask.graphics.beginFill(0); 
spriteMask.graphics.drawRect(0, sprite.height/2, sprite.width, sprite.height/2); 
spriteMask.graphics.endFill(); 

sprite.mask = spriteMask; 
sprite.addChild(spriteMask); 

addChild(sprite); 

包括筆畫在內有點棘手,但仍有可能。

1

看到這個頁面:Why is drawRoundRectComplex() not documented in ActionScript?

你需要 「drawRoundRectComplex」

編輯:如果不能的Flex SDK,你唯一的其他 「真實」 繪圖選項是使用lineTocurveTo的組合。最簡單的方法是在Flex SDK中複製GraphicsUtil類中的代碼。我不清楚它是否被認爲是開源的,所以我不會在這裏發佈它。

+0

是否有另一種方式,而不使用柔性庫? – mate64 2011-02-17 07:01:39

0

您可以使用GlowFilter來模擬中風,但它會比真正的中風貴。

你也不需要面具 - 只需畫兩個盒子。

var s:Sprite = new Sprite; 
addChild(s); 

s.graphics.beginFill(0xff0000); 
s.graphics.drawRoundRect(0,0,50,50,10); 
s.graphics.endFill(); 

s.graphics.beginFill(0xff0000); 
s.graphics.drawRect(0,0,50,20); 
s.graphics.endFill(); 

s.filters = [new GlowFilter(0x0, 4, 8,8, 40)]; 
+0

GlowFilter可以滿足細筆畫的需要,但它不適合粗筆畫,因爲它變得明顯模糊或筆畫必須清晰銳利。我希望Graphics類有一個適當的筆畫方法 - lineStyle()只是簡單的可笑。此外,還可以選擇創建2個形狀以實現更多控制,但將BlendMode.ERASE的blendMode設置爲內側形狀。 – TheDarkIn1978 2011-02-17 18:26:57