Forked from: h6k's forked from: AtoZ Typing diff:298 forked from: forked from: AtoZ Typing 結果をツイートできる様にしました。 matacat forked:1favorite:1lines:234license : MIT License modified : 2010-04-30 06:34:39 Embed Tweet // forked from h6k's forked from: AtoZ Typing // forked from h6k's AtoZ Typing // 結果をツイートできる様にしました。 package { import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.net.navigateToURL; import flash.utils.getTimer; import com.bit101.components.PushButton; [SWF(frameRate = 60)] public class FlashTest extends Sprite { private var startTime:int; private var scoreTime:int; private var currentChar:int; private var az:Vector.<Letter>; private var frame:Frame; private var timeDisp:AutoTF; private var tweetBtn:PushButton; private var btnFrame:Frame; public function FlashTest() { var wz:int = stage.stageWidth; var hi:int = stage.stageHeight; Letter.setCenter(wz / 2, hi / 2); az = new Vector.<Letter>(26); for (var i:int = 0; i < 26; i++) { az[i] = addChild(new Letter(i)) as Letter; } frame = new Frame(stage, az[22]); var tf:AutoTF = new AutoTF(stage, "Push Space Key to Restart"); tf.y = hi / 2 - tf.height * 2; timeDisp = new AutoTF(stage, "0000.000 sec", true); timeDisp.y = tf.y + tf.height + 5; timeDisp.autoSize = "none"; tweetBtn = new PushButton(stage, 0, 0, "Click here to tweet your score!", tweet); tweetBtn.width += 50; tweetBtn.x = (wz - tweetBtn.width) / 2 ; tweetBtn.y = timeDisp.y + timeDisp.height + 15; btnFrame = new Frame(stage, tweetBtn); reset(); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); } private function reset():void { currentChar = 65; timeDisp.text = "0.000 sec"; for (var i:int = 0; i < 26; i++) { az[i].reset(); } frame.appear(); tweetBtn.visible = false; btnFrame.disappear(); } private function onKeyDown(e:KeyboardEvent):void { var kc:int = e.keyCode; if (kc > 90 || kc < 65 && kc != 32) return; if(kc == currentChar) { if (kc == 65) { startTime = getTimer(); stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); } else if (kc == 90) { stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame); onEnterFrame(null); frame.disappear(); tweetBtn.visible = true; btnFrame.appear(); } currentChar++; for (var i:int = 0; i < 26; i++) { az[i].goNext(); } } else if (kc == 32) { stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame); reset(); } } private function onEnterFrame(e:Event):void { scoreTime = getTimer() - startTime; timeDisp.text = (scoreTime / 1000).toFixed(3) + " sec"; } private function tweet(e:MouseEvent):void { var url:String = "http://twitter.com/home?status=" + encodeURIComponent( "AtoZ Typing の結果: " + (scoreTime / 1000).toFixed(3) + "sec. http://wonderfl.net/c/iZKm/ #wonderfl" ); navigateToURL(new URLRequest(url)); } } } import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.Shape; import flash.filters.GlowFilter; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFormat; import org.libspark.betweenas3.BetweenAS3; import org.libspark.betweenas3.easing.Quad; import org.libspark.betweenas3.easing.Sine; import org.libspark.betweenas3.tweens.ITween; class Letter extends Bitmap { ////////////////////// // static members // ////////////////////// private static const PI2:Number = Math.PI / 180; private static const R:Number = 220; private static var centerX:Number; private static var centerY:Number; public static function setCenter(cX:Number, cY:Number):void { centerX = cX; centerY = cY; } // 使い回し用 private static var tf:TextField = new TextField(); tf.defaultTextFormat = new TextFormat(null, 50); tf.autoSize = "left"; //////////////////////// // instance members // //////////////////////// private var life:int; private var maxL:int; private var resetMotion:ITween; public function Letter(index:int):void { tf.text = String.fromCharCode(index + 65); super(new BitmapData(tf.width, tf.height, true, 0)); bitmapData.draw(tf); smoothing = true; alpha = 0; degree = 0; life = index; maxL = index; resetMotion = BetweenAS3.delay( BetweenAS3.tween( this, { alpha: 1, degree: 360 * index / 26 }, { alpha: 0, degree: 0 }, 0.5, Quad.easeOut ), 1 - index / 26 ); } public function goNext():void { life--; if (life >= 0) { BetweenAS3.to(this, { degree: 360 * life / 26 }, 0.25, Quad.easeOut).play(); } else if (life == -1) { BetweenAS3.to(this, { alpha: 0, degree: -15 }, 1, Quad.easeOut).play(); } } public function reset():void { life = maxL; resetMotion.play(); } private var _deg:Number; public function get degree():Number { return _deg; } public function set degree(d:Number):void { _deg = d; var cos:Number = Math.cos(d * PI2); var scl:Number = (cos + 1) * 0.35 + 0.3; scaleX = scl; scaleY = scl; x = R * Math.sin(d * PI2) + centerX - width / 2; y = R * cos * 0.5 + centerY - height / 2; } } class AutoTF extends TextField { private static var form:TextFormat = new TextFormat(); form.align = "right"; public function AutoTF(dest:DisplayObjectContainer, text:String, bg:Boolean = false) { super(); dest.addChild(this); defaultTextFormat = form; autoSize = "right"; this.text = text; mouseEnabled = false; x = (stage.stageWidth - width) / 2; if (bg) { border = true; background = true; backgroundColor = 0; textColor = 0xFFFFFF; } } } class Frame extends Shape { private var blink:ITween; private var fadeIn:ITween; public function Frame(dest:DisplayObjectContainer, target:DisplayObject) { super(); var wz:Number = target.width; var hi:Number = target.height; graphics.beginFill(0); graphics.drawRect(wz / -2, hi / -2, wz, hi); x = target.x + wz / 2; y = target.y + hi / 2; alpha = 0; filters = [new GlowFilter(0x8080FF, 1, 16, 16, 1, 1, false, true)]; var b:ITween = BetweenAS3.tween(this, { alpha: 0.5 }, { alpha: 1 }, 0.5, Sine.easeInOut); blink = BetweenAS3.serial(b, BetweenAS3.reverse(b)); blink.stopOnComplete = false; fadeIn = BetweenAS3.tween( this, { scaleX: 1, scaleY: 1, alpha: 1 }, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, 1, Quad.easeOut ); fadeIn.onComplete = blink.play; dest.addChild(this); } public function appear():void { blink.gotoAndStop(0); fadeIn.play(); } public function disappear():void { blink.stop(); BetweenAS3.to(this, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, 0.5, Quad.easeIn).play(); } } Code Fullscreen Preview Fullscreen takaki8 : twitterゲームタイピングゲーム。結果をツイート twitter ゲーム alpha stage Sine.easeOut scaleY scaleX visible removeEventListener gotoAndStop BetweenAS3.tween url addEventListener MouseEvent.ENTER_FRAME Sine.easeIn Sine.easeInOut height stop BetweenAS3.reverse filters stopOnComplete toFixed sort new page view favorite forked pv174 forked from: forked from: fork.. tepe forked:0 favorite:0lines:234 (diff:1)