|
|
|||||
Регистрация: Jun 2008
Сообщений: 204
|
Как сделать такой эффект?
Как сделать эффект радиального маскирования как на скрине (фейсбучная игра Criminal Case)?
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jun 2008
Сообщений: 204
|
Нет именно прямоугольный, окружности я и сам нарисую ) а вот прямоугольник с округлыми углами и с вырезом нет.
|
|
|||||
[+4 24.04.13]
[+4 20.04.13] Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
|
оО дык наложи маску на окружность с
|
|
|||||
Скомбинируйте. Создайте окружность и прямоугольник. Примените для окружности в качестве маски - прямоугольник. Заверните эти два объекта в один и применяйте уже его в качестве маски для ваших потребностей.
|
|
|||||
Регистрация: Jun 2008
Сообщений: 204
|
о! спасибо!
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
зачем комбинировать то? "Круглую" маску применить к целевому прямоугольнику. Ну сделать ее большого размера, чтобы весь покрывала. Маску зачем маскировать? О__о Её ж не будет видно все-равно))
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jan 2011
Сообщений: 200
|
public class Throbber extends Sprite { private static const RAD180:Number = -Math.PI; private static const RAD:Number = 180 / RAD180; private var _g:Graphics; private var _outerRadius:Number; private var _innerRadius:Number; private var _color:uint; private var _center:Number; private var _controlOutRadius:Number; private var _controlInnRadius:Number; private var square:Sprite = new Sprite(); public function Throbber(outerRadius:Number, innerRadius:Number, color:uint) { _color = color; _innerRadius = innerRadius; _outerRadius = outerRadius; _g = this.graphics; _center = _outerRadius / 2; square.graphics.beginFill(0, 0); square.graphics.drawRoundRect(-10, -10, 53, 53, 10); addChild(square); } public function update(rotation:Number, arc:Number) : void { _g.clear(); if (arc == 0) { return; } rotation /= RAD; arc /= RAD; // alias arc to 360 gradians arc = arc % (RAD180 * 2); // calculate fragments (18 gradians max at one step for cute round curve) var frags:Number = Math.abs( Math.ceil(arc * 10 / RAD180) ); if (arc < 0) frags += 1; var fragAngle:Number = arc / frags; // control points radius _controlOutRadius = _outerRadius / Math.cos( -fragAngle / 2); _controlInnRadius = _innerRadius / Math.cos( -fragAngle / 2); // start drawings var startX:Number = _center + _outerRadius * Math.cos(rotation); var startY:Number = _center + _outerRadius * Math.sin(rotation); _g.beginFill(_color, 0.6); _g.moveTo(startX, startY); // outer outline for (var i:uint = 1; i < frags + 1; i++) { var aA:Number = rotation + fragAngle * i; var aX:Number = _center + _outerRadius * Math.cos(aA); var aY:Number = _center + _outerRadius * Math.sin(aA); var cA:Number = aA - fragAngle / 2; var cX:Number = _center + _controlOutRadius * Math.cos(cA); var cY:Number = _center + _controlOutRadius * Math.sin(cA); _g.curveTo(cX, cY, aX, aY); } var endX:Number = _center + _innerRadius * Math.cos(rotation + arc); var endY:Number = _center + _innerRadius * Math.sin(rotation + arc); _g.lineTo(endX, endY); // inner outline for (var j:uint = 1; j < frags + 1; j++) { var jA:Number = aA - fragAngle * j; var jX:Number = _center + _innerRadius * Math.cos(jA); var jY:Number = _center + _innerRadius * Math.sin(jA); var cjA:Number = jA + fragAngle / 2; var cjX:Number = _center + _controlInnRadius * Math.cos(cjA); var cjY:Number = _center + _controlInnRadius * Math.sin(cjA); _g.curveTo(cjX, cjY, jX, jY); } _g.lineTo(startX, startY); _g.endFill(); this.mask = square; } } |
Часовой пояс GMT +4, время: 09:34. |
|
« Предыдущая тема | Следующая тема » |
|
|