Forked from: nitoyon's ニコニコテレビちゃんを動かしてみた diff:128 doraを動かしてみた forked from: ニコニコテレビちゃんを動かしてみた ニコニコテレビちゃんを動かしてみた chabudai forked:0favorite:0lines:129license : All rights reserved modified : 2008-12-21 17:24:19 Embed Tweet // forked from nitoyon's ニコニコテレビちゃんを動かしてみた // forked from uniq's ニコニコテレビちゃんを描いてみた // ニコニコテレビちゃんを動かしてみた package{ import flash.display.Sprite; import flash.utils.*; [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")] public class DrawNicotvchan1 extends Sprite { public function DrawNicotvchan1() { y = 100; var bodies:Array = []; for(var i:int = 0; i < 10; i++){ var body:Dora = new Dora(i); body.scaleX = body.scaleY = Math.pow(0.8, i - 1); //body.y = -i * Math.pow(0.9, i - 1) * 10; addChildAt(body, 0); bodies.push(body); } addEventListener("enterFrame", function(event:*):void{ for(i = 0; i < bodies.length; i++){ body = bodies[i]; body.alpha = 1 - (i / 10); body.x = (body.x * (i * 2 + 1) + stage.mouseX) / (i * 2 + 2); body.y = -5 + (body.y * (i * 2 + 1) + (stage.mouseY-100)) / (i * 2 + 2); } }); } } } import flash.display.Sprite; import flash.filters.GlowFilter; class Dora extends Sprite{ public function Dora(num:int) { var sp:Sprite = new Sprite(); sp.filters = [new GlowFilter(0xBB44BB,0.4,32,32)]; addChild(sp); var head:Sprite = new Sprite(); var w:Number = 94; var h:Number = 82; //頭を描く head.graphics.beginFill(0xCC0066); head.graphics.moveTo(-w/2, 0); head.graphics.curveTo(-w/2+2, -h/2+1, 0, -h/2); head.graphics.curveTo(w/2-2, -h/2+1, w/2, 0); head.graphics.curveTo(w/2-1, h/2-1, 0, h/2); head.graphics.curveTo(-w/2+1, h/2-1, -w/2, 0); head.graphics.endFill(); sp.addChild(head); //顔の輪郭を描く var face:Sprite = new Sprite(); face.y = 7; w = 86; h = 67; face.graphics.beginFill(0x000000); face.graphics.moveTo(-w/2, 0); face.graphics.curveTo(-w/2+2, -h/2+1, 0, -h/2); face.graphics.curveTo(w/2-2, -h/2+1, w/2, 0); face.graphics.curveTo(w/2-1, h/2-1, 0, h/2); face.graphics.curveTo( -w/2+1, h/2 - 1, -w / 2, 0); sp.addChild(face); //目を描く var lefteye:Sprite = new Sprite(); lefteye.x = -17.5; lefteye.y = -35; drawOval(lefteye, 17, 19); sp.addChild(lefteye); var eye1:Sprite = new Sprite(); eye1.graphics.beginFill(0x000000); eye1.graphics.drawEllipse(0, 0, 8, 2); eye1.x = -14; eye1.y = -27; sp.addChild(eye1); var righteye:Sprite = new Sprite(); righteye.x = 0.5; righteye.y = -35; drawOval(righteye, 17, 19); sp.addChild(righteye); var eye2:Sprite = new Sprite(); eye2.graphics.beginFill(0x000000); eye2.graphics.drawEllipse(0, 0, 8, 2); eye2.x = 6; eye2.y = -27; sp.addChild(eye2); //鼻を描く var nose:Sprite = new Sprite(); nose.x = -5.5; nose.y = -20; drawOval(nose, 11, 9); sp.addChild(nose); //鼻下を描く var noseline:Sprite = new Sprite(); noseline.graphics.lineStyle(1, 0xFFFFFF); noseline.graphics.moveTo( -0.5, -18); noseline.graphics.lineTo( -0.5, 24); sp.addChild(noseline); //口を描く var mouse:Sprite = new Sprite(); mouse.graphics.lineStyle(1, 0xFFFFFF); mouse.graphics.moveTo( -31, 6); mouse.graphics.curveTo( -24, 24, 0, 24); mouse.graphics.curveTo(24, 24, 31, 6); sp.addChild(mouse); //ヒゲを描く var higeR:Sprite = new Sprite(); higeR.graphics.lineStyle(1, 0xFFFFFF); higeR.graphics.moveTo( -16, -13); higeR.graphics.lineTo( -35, -16); higeR.graphics.moveTo( -17, -9); higeR.graphics.lineTo( -36, -9); higeR.graphics.moveTo( -16, -5); higeR.graphics.lineTo( -35, -2); sp.addChild(higeR); var higeL:Sprite = new Sprite(); higeL.graphics.lineStyle(1, 0xFFFFFF); higeL.graphics.moveTo( 16, -13); higeL.graphics.lineTo( 35, -16); higeL.graphics.moveTo( 17, -9); higeL.graphics.lineTo( 36, -9); higeL.graphics.moveTo( 16, -5); higeL.graphics.lineTo( 35, -2); sp.addChild(higeL); var count:int = num * 2; addEventListener("enterFrame", function(event:*):void{ higeR.rotation = 10 * Math.cos(count / 20 * Math.PI); higeL.rotation = -higeR.rotation; eye1.y = -26 + Math.cos(count / 30 * Math.PI) * 5; eye2.y = -26 - Math.cos(count / 30 * Math.PI) * 5; count = (count + 1) % 360; }); } private function drawOval(s:Sprite, w:Number, h:Number):void { s.graphics.beginFill(0xFFFFFF, 100); s.graphics.moveTo(0, h/2); s.graphics.curveTo(0.5, 0.5, w/2, 0); s.graphics.curveTo(w-0.5, 0.5, w, h/2); s.graphics.curveTo(w-0.5, h-0.5, w/2, h); s.graphics.curveTo(0.5, h-0.5, 0, h/2); s.graphics.endFill(); } } Code Fullscreen Preview Fullscreen addChild rotation addChildAt addEventListener filters alpha GlowFilter Math.cos Math.PI mouseY mouseX scaleY scaleX Math.pow push length Array int Number Sprite