package { import com.nitoyon.potras.*; import flash.display.*; import flash.text.TextField; import flash.events.*; import flash.utils.*; import caurina.transitions.Tweener; [SWF(width="640", height="480", backgroundColor="#ffffff")] public class KanaKeyboard extends Sprite { private static var TABLE:Object = {"3" : "あ", "e" : "い", "4" : "う", "5" : "え", "6" : "お", "t" : "か", "g" : "き", "h" : "く", ":" : "け", "b" : "こ", "x" : "さ", "d" : "し", "r" : "す", "p" : "せ", "c" : "そ", "q" : "た", "a" : "ち", "z" : "つ", "w" : "て", "s" : "と", "u" : "な", "i" : "に", "1" : "ぬ", "," : "ね", "k" : "の", "f" : "は", "v" : "ひ", "2" : "ふ", "^" : "へ", "-" : "ほ", "j" : "ま", "n" : "み", "]" : "む", "/" : "め", "m" : "も", "7" : "や", "8" : "ゆ", "9" : "よ", "o" : "ら", "l" : "り", "." : "る", ";" : "れ", "\\" : "ろ", "0" : "わ", "!" : "を", "y" : "ん", "@" : "@"}; private var lists:Object = {}; public function KanaKeyboard() { var t:TextField = new TextField(); addChild(t); var sprites:Object = {}; var keys:Array = []; for(var key:String in TABLE) { keys.push(key); } var traceCallback:Function = function():void { t.text = "Loading... " + keys.length.toString(); key = keys.shift(); var list:ClosedPathList = PotrAs.traceLetter(TABLE[key], 200); lists[key] = list; if(keys.length == 0) { removeChild(t); stage.addEventListener("keyDown", keyDownHandler); } else { setTimeout(traceCallback, 10); } } traceCallback(); } private function keyDownHandler(event:*):void { var c:String = String.fromCharCode(event.charCode).toLowerCase(); var list:ClosedPathList = lists[c]; if(list) { var sprite:Sprite = new Sprite(); sprite.graphics.beginFill(0x999999); sprite.graphics.lineStyle(1, 0x000000); list.draw(sprite.graphics); sprite.graphics.endFill(); var s:Sprite = new Sprite(); s.addChild(sprite); sprite.x = -sprite.width / 2; sprite.y = -sprite.height / 2; s.x = loaderInfo.width / 2; s.y = loaderInfo.height / 2; s.alpha = 0.2; s.scaleX = s.scaleY = 0.01; s.rotation = 360 * Math.random() - 180; var r:Number = 400 * Math.random(); var theta:Number = Math.PI * 2 * Math.random(); Tweener.addTween(s, { time : 1.5, alpha : 1, transition : "easeInCubic" }); Tweener.addTween(s, { time : 0.7, delay : 1.8, alpha : 0 }); Tweener.addTween(s, { time : 2.5, rotation : 360 * Math.random() - 180, transition : "easeOutCubic" }); Tweener.addTween(s, { time : 2.5, x : s.x + r * Math.sin(theta), y : s.y + r * Math.cos(theta), transition : "easeInCubic", _scale: 12.0, onComplete : function():void{ removeChild(s); } }); addChild(s); } } } }