// forked from ton's マトリックスの世界へようこそ //なんとなくマトリックスっぽいなにか package { import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFormat; [SWF(backgroundColor=0x000000, frameRate=24)] public class MatrixCascade extends Sprite { private const W:int = 465; private const PW:int = W / 5; private const H:int = 465; private const PH:int = H / 8; private var video:Video = new Video(PW, PH); private var bmd:BitmapData = new BitmapData(PW, PH, false); private var lastFrame:Array = new Array(PW); private var charList:Array = [ " "," ", "ノ","ノ","ノ", "ニ","レ","ト","ソ","ン","リ", "ミ","ウ","シ","ツ","キ","モ", "ネ","オ","ヌ","タ","チ","テ"]; private var numChars:int = charList.length; private var tf:TextField = new TextField(); private var tt:TextFormat = new TextFormat("Hiragino Kaku Gothic Pro W3, Shin Go, Heisei Kaku Gothic W5, Courier New, sans-serif", 8, 0xffffff); public function MatrixCascade():void { tf.width = tf.height = W; addChild(tf); for (var i:int = 0; i < lastFrame.length; i++){ lastFrame[i] = new Array(PH); } video.attachCamera(Camera.getCamera()); //addChild(video); addEventListener(Event.ENTER_FRAME, onEnterFrameHandler); } private function onEnterFrameHandler(e:Event):void { bmd.draw(video); var str:String = ""; var h:int = bmd.height; var w:int = bmd.width; for (var i:int = 0; i < h; i++) { for (var j:int = 0; j < w; j++) { // var pixel:String = charList[int((bmd.getPixel(j, i) / 0xffffff) * numChars)]; // if (pixel == lastFrame[i][j]) { // str += pixel; // } else { // str += pixel; // } // lastFrame[i][j] = pixel; str += charList[int((bmd.getPixel(j, i) / 0xffffff) * numChars)]; } str += "\n"; } tf.text = str; tf.setTextFormat(tt); } } } カタカナcam