// 元ネタ=> http://blog.livedoor.jp/k_yon/archives/51745838.html // 複数画像の動的ロードって、うまいやり方ないもんですかねー? // // サムネイルがエラー表示になってる・・ これってタイミング狙ってキャプチャできないかなぁ? // // はちゅねは幾つかのパーツに分かれており、パーツ.rotate(回転量)として、 // 間接を中心に,指定した部分(と連なる部分)を動かすことができます。 // // 身体全体 => body // 頭 => head0とhead1 注.同時に操作してください!! // 右手 => arm_r // ネギ => negi // 右ツインテ => hair_r // 左ツインテ => hair_l package { [SWF(width="350", height="300", backgroundColor="#ffffff", frameRate="30")] import flash.display.Sprite; import flash.events.Event; public class HatyuneStage extends Sprite { public var miku:Hatyune; private static const NECK:Number = 0.094; private var neckr:Number; public function HatyuneStage() { miku = new Hatyune(); addChild(miku); neckr = 0.0; addEventListener(Event.ENTER_FRAME, loop); Wonderfl.capture_delay( 60 ); } private function loop(e:Event):void{ // この部分に、はちゅねのポーズを記述しましょう // 例. 右手を動かす // miku.arm_r.rotate(0.5); miku.hair_l.rotate(Math.sin(neckr)/5); miku.hair_r.rotate(-Math.sin(neckr)/5); if(neckr < Math.PI) neckr += NECK; else neckr = -Math.PI; // ここまで } } } // ------はちゅねを動かすだけなら、こっから下は読まなくてOK!------- import flash.display.Loader; import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.net.URLRequest; class Hatyune extends Sprite { public var arm_r:Parts; public var head0:Parts; public var head1:Parts; public var body:Parts; public var hair_l:Parts; public var hair_r:Parts; public var negi:Parts; private var lcount:int; private var lbody:Loader; private var lhair_l:Loader; private var lhair_r:Loader; private var lhand_r:Loader; private var lface:Loader; private var lnegi:Loader; public function Hatyune() { lcount=0; lbody= new Loader(); lbody.contentLoaderInfo.addEventListener("complete", loadImg); lbody.load(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/6/5/659cbeb2.png")); lhair_l = new Loader(); lhair_l.contentLoaderInfo.addEventListener("complete", loadImg); lhair_l.load(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/1/4/14e2dce1.png")); lhair_r = new Loader(); lhair_r.contentLoaderInfo.addEventListener("complete", loadImg); lhair_r.load(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/0/9/09def37a.png")); lhand_r = new Loader(); lhand_r.contentLoaderInfo.addEventListener("complete", loadImg); lhand_r.load(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/b/c/bc0ba0f1.png")); lface = new Loader(); lface.contentLoaderInfo.addEventListener("complete", loadImg); lface.load(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/c/c/cc3baf4f.png")); lnegi = new Loader(); lnegi.contentLoaderInfo.addEventListener("complete", loadImg); lnegi.load(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/4/c/4cd1ba9c.png")); body = new Parts(0,0,200,140); head0 = new Parts(106,0,212,112); hair_r = new Parts(0,6,77,13); arm_r = new Parts(0,91,197,119); negi = new Parts(0,0,118,15); head1 = new Parts(106,0,212,112); hair_l = new Parts(132,6,141,16); } private function loadImg(e:flash.events.Event):void{ if(++lcount==6){ lbody.width=116;lbody.height=172;lbody.x=150;lbody.y=93; lhair_l.width=82;lhair_l.height=257; lhair_r.width=85;lhair_r.height=247; lhand_r.width=96;lhand_r.height=43;lhand_r.x=113;lhand_r.y=5; lface.width=114;lface.height=111;lface.x=47;lface.y=0; lnegi.width=124;lnegi.height=44; hair_r.addChild(lhair_r); head0.addChild(hair_r); body.addChild(head0); negi.addChild(lnegi); arm_r.addChild(negi); arm_r.addChild(lhand_r); body.addChild(arm_r); body.addChild(lbody); head1.addChild(lface); hair_l.addChild(lhair_l); head1.addChild(hair_l); body.addChild(head1); addChild(body); } } } // -------------------------------------------- class Parts extends Sprite { public var originX:Number; public var originY:Number; public var baseX:Number; public var baseY:Number; private var GShape:flash.display.Shape; public function Parts( bx:Number, by:Number, gx:Number, gy:Number ) { x = baseX = bx; y = baseY = by; originX = gx; originY = gy; } public function rotate( rad:Number ):void { var tmpX:Number = baseX - originX; var tmpY:Number = baseY - originY; x = tmpX * Math.cos(rad) - tmpY * Math.sin(rad) + originX; y = tmpY * Math.cos(rad) + tmpX * Math.sin(rad) + originY; rotation = rad / Math.PI * 180; } public function showRotatePoint():void { GShape = new flash.display.Shape(); GShape.graphics.beginFill(0xff0000); GShape.graphics.drawCircle(0,0,5); GShape.graphics.endFill(); GShape.x = originX; GShape.y = originY; addChild(GShape); } public function hideRotatePoint():void { removeChild(GShape); } } はちゅね