topical media & game development
#graphic-flex-image-effects-04-Flex-PerlinNoiseTest.ax
#graphic-flex-image-effects-04-Flex-PerlinNoiseTest.ax
[swf]
[flash]
flex
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
[SWF(width=500, height=500, backgroundColor=0x000000)]
Tests the different settings available in BitmapData's perlinNoise() method.
public class @ax-graphic-flex-image-effects-04-Flex-PerlinNoiseTest extends Sprite {
// these constants correspond to the parameters available in perlinNoise();
// configure them as you see fit to test the different settings
private static const BASE_X:Number = 200;
private static const BASE_Y:Number = 200;
private static const NUM_OCTAVES:Number = 2;
private static const RANDOM_SEED:Number = Number(new Date());
private static const STITCH:Boolean = false;
private static const FRACTAL:Boolean = true;
private static const CHANNELS:uint = BitmapDataChannel.RED;
private static const GRAYSCALE:Boolean = false;
private static const OFFSET_X_RATE:Number = 2;
private static const OFFSET_Y_RATE:Number = 5;
private var _bitmapData:BitmapData;
private var _offsets:Array;
Constructor. Creates the bitmap data and properties needed to animate the Perlin noise and sets
up an ENTER_FRAME listener to animate the noise.
public function @ax-graphic-flex-image-effects-04-Flex-PerlinNoiseTest() {
_bitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
// octave offset positions, with length based on the number of octaves
_offsets = [];
for (var i:uint = 0; i < NUM_OCTAVES; i++) {
_offsets.push(new Point());
}
makePerlinNoise();
addChild(new Bitmap(_bitmapData));
addEventListener(Event.ENTER_FRAME, onSpriteEnterFrame);
}
Reapplies the Perlin noise to the bitmap data.
private function makePerlinNoise():void {
_bitmapData.perlinNoise(
BASE_X,
BASE_Y,
NUM_OCTAVES,
RANDOM_SEED,
STITCH,
FRACTAL,
CHANNELS,
GRAYSCALE,
_offsets
);
}
Handler for each new frame in the movie. This repositions the offsets and reapplies the noise.
parameter: event Event dispatched by this sprite.
private function onSpriteEnterFrame(event:Event):void {
var point:Point;
var direction:int;
for (var i:uint = 0; i < NUM_OCTAVES; i++) {
point = _offsets[i] as Point;
// even loop iterations will move in a negative direction, odd loops will be positive
direction = (i%2==0) ? -1 : 1;
// higher octaves will move more quickly than lower octaves
point.x += OFFSET_X_RATE/(NUM_OCTAVES-i)*direction;
point.y += OFFSET_Y_RATE/(NUM_OCTAVES-i)*direction;
}
makePerlinNoise();
}
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.