Hi list...
I thought I'd share code that generates a sprite displaying neverending cloud
movement with bitmap data, using perlin noise.
- Michael M.
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.GradientType;
import flash.display.BlendMode;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.events.Event;
import flash.geom.Matrix;
public class Sky extends Sprite {
private var s:Sprite;
private var b:Sprite;
private var perlinOffset:Array;
private var bd:BitmapData;
function Sky(w:uint, h:uint) {
b = new Sprite();
var m:Matrix = new Matrix();
m.createGradientBox(w,h,(90*(Math.PI/180)), 0, 0);
//0x81ACDC
b.graphics.beginGradientFill(GradientType.LINEAR,
[0x5791D0, 0xFF], [1,1], [0,255], m);
b.graphics.drawRect(0,0,w,h);
b.graphics.endFill();
addChild(b);
s = new Sprite();
s.alpha = .7;
s.blendMode = BlendMode.OVERLAY;
// Offset array for perlin function
perlinOffset = [new Point(45, 34)];
// Create the bitmapdata we are going to change with
the perinNoise function
bd = new BitmapData(w, h, true, 0x00);
var bmp:Bitmap = new Bitmap(bd);
s.addChild(bmp);
s.addEventListener(Event.ADDED_TO_STAGE, init);
addChild(s);
}
private function init(e:Event):void{
s.removeEventListener(Event.ADDED_TO_STAGE, init);
animateSky(true);
}
public function animateSky(activate:Boolean):void{
if(activate == true){
s.addEventListener(Event.ENTER_FRAME,
EnterFrame);
} else {
s.removeEventListener(Event.ENTER_FRAME,
EnterFrame);
}
}
private function EnterFrame(e:Event):void{
//change the values in the perlinOffset to animate
each perlin layer
perlinOffset[0].x += 3;
perlinOffset[0].y+=.3;
//apply perlin noise to our bitmapdata
s.removeChildAt(0);
//bd.perlinNoise(250,40,7,1,false,false,8,false,perlinOffset);
bd.perlinNoise(220,40,3,1,false,false,8,false,perlinOffset);
s.addChild(new Bitmap(bd));
}
}
}
___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders