forked from: はちゅね
元ネタ=> http://blog.livedoor.jp/k_yon/archives/51745838.html
複数画像の動的ロードって、うまいやり方ないもんですかねー?
サムネイルがエラー表示になってる・・ これってタイミング狙ってキャプチャできないかなぁ?
はちゅねは幾つかのパーツに分かれており、パーツ.rotate(回転量)として、
間接を中心に,指定した部分(と連なる部分)を動かすことができます。
身体全体 => body
頭 => head0とhead1 注.同時に操作してください!!
右手 => arm_r
ネギ => negi
右ツインテ => hair_r
左ツインテ => hair_l
ネギ振りしました。
// forked from yoneken's はちゅね
// 元ネタ=> 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);
miku.x = 60;
miku.y = 80;
neckr = 0.0;
addEventListener(Event.ENTER_FRAME, loop);
}
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);
miku.negi.rotate(Math.sin(neckr)/2);
miku.arm_r.rotate(Math.sin(neckr)/2);
miku.head0.rotate(Math.sin(neckr)/15);
miku.head1.rotate(Math.sin(neckr)/15);
miku.body.rotate(Math.cos(neckr)/20);
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);
}
}