Kategorien: 3spin

Nachdem wir vor einiger Zeit im Rahmen mit Fur Renderings experimentiert haben (siehe Haare und Flash), stellen wir heute die dazugehörige Klasse zur Verfügung.

Wir freuen uns auf weiteren Austausch mit der Community und werden in Zukunft weitere Experimente hier veröffentlichen.

/***************************************************************
 *
 * Project: FUR
 *
 * @version $Id$
 *
 *
 * 3spin GbR
 * Kasinostr. 60
 * 64293 Darmstadt
 *
 * www.3spin.de
 * kontakt@3spin.de
 *
 * @coypright (c)2008 3spin GbR. All rights reserved.
 *
 * @author Garrit Schaap 
 *
 **************************************************************/
 
package de.threespin.effects
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class FurBall extends Sprite
    {
        private var _bd:BitmapData;
        private var _bitmap:Bitmap;
        private var _container:Sprite = new Sprite();
        private var _currentLine:int = 0;
        private var _renderings:int = 0;
        private var _renderingAmount:int = 6;
        private var _hairLength:int = 20;
 
        public function FurBall(original:Bitmap, hairLength:int = 20, renderAmount:int = 6)
        {
            _hairLength = hairLength;
            _renderingAmount = renderAmount;
 
            _bd = original.bitmapData;
 
            _bitmap = new Bitmap(new BitmapData(original.width, original.height, true, 0x00000000), "auto", false);
            this.addChild(_bitmap);
 
            this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
 
        private function enterFrameHandler(event:Event):void
        {
            if (_renderings < _renderingAmount)
            {
                _bitmap.bitmapData.lock();
 
                _container.graphics.clear();
 
                var xx:int;
                var yy:int;
                var ax:int;
                var ay:int;
                var cx:int;
                var cy:int;
                for (var i:int = 0; i < _bd.width; i++)
                {
                    xx = (Math.random() - 0.5) * _hairLength;
                    yy = (Math.random() - 0.5) * _hairLength;
                    ax = i + xx;
                    ay = _currentLine + yy;
                    cx = i + xx * Math.random();
                    cy = _currentLine + yy * Math.random();
 
                    _container.graphics.lineStyle(1, _bd.getPixel32(i, _currentLine), 0.05);
                    _container.graphics.moveTo(i, _currentLine);
                    _container.graphics.curveTo(cx, cy, ax, ay);
                    _container.graphics.endFill();
                }
 
                _bitmap.bitmapData.draw(_container);
 
                _currentLine++;
 
                if (_currentLine >= _bitmap.height)
                {
                    _currentLine = 0;
                    _renderings++;
                }
 
                _bitmap.bitmapData.unlock();
            }
        }
 
        public function kill():void
        {
            this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
            _bd.dispose();
            _bitmap.bitmapData.dispose();
            _container = null;
        }
 
        public function set hairLength(value:int):void
        {
            _hairLength = value;
        }
 
        public function get hairLength():int
        {
            return _hairLength;
        }
 
        public function set renderingAmount(value:int):void
        {
            _renderingAmount = value;
        }
 
        public function get renderingAmount():int
        {
            return _renderingAmount;
        }
    }
}

Kommentar schreiben