Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как сделать такой эффект? (http://www.flasher.ru/forum/showthread.php?t=203025)

shaman4d 26.08.2013 22:08

Как сделать такой эффект?
 
Как сделать эффект радиального маскирования как на скрине (фейсбучная игра Criminal Case)?
http://savepic.su/3108331.jpg

Wolsh 26.08.2013 22:24

Такой? http://flasher.ru/forum/showpost.php...21&postcount=8

shaman4d 26.08.2013 22:39

Нет именно прямоугольный, окружности я и сам нарисую ) а вот прямоугольник с округлыми углами и с вырезом нет.

chamele0n 26.08.2013 23:18

оО дык наложи маску на окружность с
Цитата:

Сообщение от shaman4d (Сообщение 1144836)
прямоугольник с округлыми углами и с вырезом


samana 26.08.2013 23:21

Скомбинируйте. Создайте окружность и прямоугольник. Примените для окружности в качестве маски - прямоугольник. Заверните эти два объекта в один и применяйте уже его в качестве маски для ваших потребностей.

shaman4d 26.08.2013 23:25

о! спасибо!

Wolsh 26.08.2013 23:52

Вложений: 1
зачем комбинировать то? "Круглую" маску применить к целевому прямоугольнику. Ну сделать ее большого размера, чтобы весь покрывала. Маску зачем маскировать? О__о Её ж не будет видно все-равно))

Вложение 29943

bifidokk 27.08.2013 09:11

Код AS3:

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;
                }
        }


samana 27.08.2013 21:33

Цитата:

Сообщение от Wolsh (Сообщение 1144851)
Маску зачем маскировать? О__о Её ж не будет видно все-равно))

А, ну да, запутался я, вы правы)


Часовой пояс GMT +4, время: 17:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.