Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Water distortion filter, implemented with Starling's "DisplacementMapFilter".
private function addDistortionTo(target:DisplayObject):void
var offset:Number = 0;
var scale:Number = Starling.contentScaleFactor;
var width:int = target.width;
var height:int = target.height;
var perlinData:BitmapData = new BitmapData(width * scale, height * scale, false);
perlinData.perlinNoise(200*scale, 20*scale, 2, 5, true, true, 0, true);
var dispMap:BitmapData = new BitmapData(perlinData.width, perlinData.height * 2, false);
dispMap.copyPixels(perlinData,perlinData.rect, new Point(0,0));
dispMap.copyPixels(perlinData,perlinData.rect, new Point(0,perlinData.height));
var texture:Texture = Texture.fromBitmapData(dispMap, false, false, scale);
var filter:DisplacementMapFilter = new DisplacementMapFilter(texture, null,
BitmapDataChannel.RED, BitmapDataChannel.RED, 40, 5);
target.filter = filter;
target.addEventListener("enterFrame", function(event:EnterFrameEvent):void
if (offset > height) offset -= height;
else offset += event.passedTime * 20;
filter.mapPoint.y = offset - height;
Copy link

JokerHuang commented Sep 25, 2013


Copy link

nicotroia commented Sep 25, 2013


Copy link

zhanghaocong commented Sep 28, 2013


Copy link

Stortof commented Sep 28, 2018

Hi Daniel,
Thanks for the example.
I have a little issue with the rendering : each time offset > height, I have a little freeze on the animation... and I can't manage to run it smoothly...
Any idea?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment