Create better-looking tile based games with AS3 Color Matrix Filter
Some years ago I showed you how to use the AS3 Color Matrix Filter in the post Understanding AS3 ColorMatrixFilter class, and since then a lot of sites around the web are showing how to manipulate image colors with this technique.
Today I am giving you a tip about the use of ColorMatrixFilter class in tile based games. Imagine a tile based game with a lot of tiles of the same kind, like A Blocky Christmas.
Placing tens of tiles with the same image or color will make your level look flat, that’s why most developers use to draw more textures for the same tile and place them randomly on the stage to give the level a better look.
That’s the same thing you can do with ColorMatrixFilter class, look at this script:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.filters.ColorMatrixFilter; public class Main extends Sprite { var randomness:Number=1; var randomRange:Number=0.2; var tileCanvas:Sprite=new Sprite(); public function Main() { addChild(tileCanvas); for (var i:Number=0; i<20; i++) { for (var j:Number=0; j<15; j++) { var tile:Tile=new Tile(); addChild(tile); tile.x=32*i; tile.y=32*j; } } stage.addEventListener(MouseEvent.CLICK,generateTiles); } private function generateTiles(e:MouseEvent):void { removeChild(tileCanvas); tileCanvas=new Sprite(); addChild(tileCanvas); for (var i:Number=0; i<20; i++) { for (var j:Number=0; j<15; j++) { var tile:Tile=new Tile(); addChild(tile); tile.x=32*i; tile.y=32*j; if (randomness>Math.random()) { var colorMatrix:Array = new Array(); var colorOffset:Number=Math.random()*randomRange; colorMatrix=colorMatrix.concat([1-randomRange/2+colorOffset,0,0,0,0]); colorMatrix=colorMatrix.concat([0,1-randomRange/2+colorOffset,0,0,0]); colorMatrix=colorMatrix.concat([0,0,1-randomRange/2+colorOffset,0,0]); colorMatrix=colorMatrix.concat([0,0,0,1,0]); var finalFilter:ColorMatrixFilter=new ColorMatrixFilter(colorMatrix); tile.filters=[finalFilter]; } } } } } } |
The first highlighted code just places some Tile sprites on the screen, while the second places them and applies small random changes to the colors.
Look at the result:
At the first run, you’ll see a flat, plain bunch of tiles. Click on the movie with the mouse to randomly generate a new level using Color Matrix Filter on Tile sprite.
They can be easily customized to meet the unique requirements of your project.






(12 votes, average: 3.75 out of 5)







This post has 5 comments
daylyn
a nice job!!!! thks!
Maras
Very nice! (As always)
Thanks for sharing, and thanks @AdobeFlashPro for tweeting it :-)
Bence Dobos
Played with it a bit here: http://wonderfl.net/c/w93c
Bence Dobos
Here is the exact same thing but with ColorTransform: http://wonderfl.net/c/b8Ak
bleedinghorse
a very interesting piece of code !
thanks indeed