Actionscript 3, flash: стирать область динамически? - PullRequest
0 голосов
/ 27 марта 2012

Короче говоря, я сделал образ для него.Я новичок в сценарии действий, обнаружил, что недостаточно только анимации.

Что я пытаюсь сделать: enter image description here

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Вы можете использовать простую маску для достижения этой цели.Вот рабочий пример (используя ЛЕВУЮ кнопку мыши, хотя. Я не думаю, что ПРАВА подойдет для этого):

SWF result

package examples
{
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;

    public class MaskTest extends Example
    {
        private var _toBeErased:Sprite;
        private var _discoverable:Sprite;
        private var _holesContainer:Sprite;

        private var _mouseIsPressed:Boolean = false;

        public function MaskTest()
        {

        }

        // Call this method once this Class instance has been added to stage
        public function init():void
        {
            // Create sprites           
            _toBeErased = new Sprite();     
            addChild( _toBeErased );

            _discoverable = new Sprite();   
            addChild( _discoverable );

            _holesContainer = new Sprite(); 
            addChild( _holesContainer );

            // Draw sprites         
            _toBeErased.graphics.beginFill( 0xFFFF00 );
            _toBeErased.graphics.drawRect( 0, 0, 900, 600 );
            _toBeErased.graphics.endFill();

            _discoverable.graphics.beginFill( 0xFFAAAA );
            _discoverable.graphics.drawRect( 0, 0, 900, 600 );
            _discoverable.graphics.endFill();

            // Set mask
            _discoverable.mask = _holesContainer;

            // Add mouse listeners
            stage.addEventListener( MouseEvent.MOUSE_MOVE, onMouseMove );
            stage.addEventListener( MouseEvent.MOUSE_DOWN, onMouseDown );
            stage.addEventListener( MouseEvent.MOUSE_UP, onMouseUp );
        }

        // Mouse listeners callbacks...
        private function onMouseDown( e:MouseEvent ):void{
            _mouseIsPressed = true;
        }

        private function onMouseUp( e:MouseEvent ):void{
            _mouseIsPressed = false;
        }

        private function onMouseMove( e:MouseEvent ):void
        {
            if( !_mouseIsPressed )
                return;

            // Get a random size for circle
            var radius:Number = 5 + (Math.random()*10-5);

            // Create new circle and paint it
            var circle:Sprite = new Sprite();
            circle.graphics.beginFill( 0x000000 );
            circle.graphics.drawCircle( 0, 0, radius );
            circle.graphics.endFill();

            // Move it randomly, just a bit
            circle.x = _holesContainer.mouseX + (Math.random()*20-10);
            circle.y = _holesContainer.mouseY + (Math.random()*20-10);
            _holesContainer.addChild( circle );
        }
    }
}
1 голос
/ 27 марта 2012

Выезд http://f6design.com/journal/2009/05/24/erase-an-image-using-your-mouse-in-as3/

По сути, вы должны использовать режим стирания смешивания: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BlendMode.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...