Threadを学んだミクさんがアップを始めたようです。

by yoneken forked from はちゅね (diff: 229)
LoaderThreadのお勉強
素材として使ってください.
♥0 | Line 192 | Modified 2009-05-13 20:34:53 | MIT License
play

ActionScript3 source code

/**
 * Copyright yoneken ( http://wonderfl.net/user/yoneken )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/yCsD
 */

// LoaderThreadのお勉強
//
// 素材として使ってください.

package {
  [SWF(width="350", height="300", backgroundColor="#ffffff", frameRate="30")]
  import flash.display.Sprite;
  import flash.events.Event;

  public class Hatyune_Thread extends Sprite
  {
    public var miku:Hatyune;
    private var v:Number;
    private var neckr:Number;
    public function Hatyune_Thread()
    {
      miku = new Hatyune();
      miku.start();
      addChild(miku.body);
      neckr = 0.0;
      v = 0.06;
      addEventListener(Event.ENTER_FRAME, loop);
      
      Wonderfl.capture_delay( 10 );
    }
    private function loop(e:Event):void{
      // この部分に、はちゅねのポーズを記述しましょう
      // 例. 右手を動かす
      miku.arm_r.rotate(Math.sin(neckr)+0.5);
      miku.hair_l.rotate(Math.sin(neckr)/5);
      miku.hair_r.rotate(-Math.sin(neckr)/5);
      if(neckr < Math.PI){
        v += v;
        neckr = v;
      }else{
      	v -= 0.06;
      	neckr = v;
      }
      // ここまで
    }
  }
}	


// ------はちゅねを動かすだけなら、こっから下は読まなくてOK!-------


import flash.display.Loader;
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.errors.IOError;
import org.libspark.thread.Thread;
import org.libspark.thread.EnterFrameThreadExecutor;
import org.libspark.thread.utils.ParallelExecutor;
import org.libspark.thread.threads.display.LoaderThread;

class Hatyune extends Thread
{
  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 hair_r_lt:LoaderThread;
  private var negi_lt:LoaderThread;
  private var hand_r_lt:LoaderThread;
  private var body_lt:LoaderThread;
  private var face_lt:LoaderThread;
  private var hair_l_lt:LoaderThread;

  public function Hatyune()
  {
    if(!Thread.isReady)
      Thread.initialize(new EnterFrameThreadExecutor());

    super();

    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);
  }

  override protected function run():void
  {
    var ParaExe:ParallelExecutor = new ParallelExecutor();

    hair_l_lt = new LoaderThread(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/1/4/14e2dce1.png"));
    negi_lt = new LoaderThread(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/4/c/4cd1ba9c.png"));
    hand_r_lt = new LoaderThread(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/b/c/bc0ba0f1.png"));
    body_lt = new LoaderThread(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/6/5/659cbeb2.png"));
    face_lt = new LoaderThread(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/c/c/cc3baf4f.png"));
    hair_r_lt = new LoaderThread(new URLRequest("http://image.blog.livedoor.jp/k_yon/imgs/0/9/09def37a.png"));

    ParaExe.addThread(hair_r_lt);
    ParaExe.addThread(negi_lt);
    ParaExe.addThread(hand_r_lt);
    ParaExe.addThread(body_lt);
    ParaExe.addThread(face_lt);
    ParaExe.addThread(hair_l_lt);

    trace2("load start\n");

    ParaExe.start();
    ParaExe.join();

    next(imgLoaded);
    error(IOError, errorHandler);
    error(SecurityError, errorHandler);
  }

  private function imgLoaded():void
  {
    trace2("image loaded\n");

    var _hair_r:Loader = hair_r_lt.loader;
    _hair_r.width = 82;
    _hair_r.height = 257;
    hair_r.addChild(_hair_r);
    head0.addChild(hair_r);
    body.addChild(head0);

    var _negi:Loader = negi_lt.loader;
    _negi.width = 124;
    _negi.height = 44;
    negi.addChild(_negi);
    arm_r.addChild(negi);

    var _hand_r:Loader = hand_r_lt.loader;
    _hand_r.width = 96;
    _hand_r.height = 43;
    _hand_r.x = 113;
    _hand_r.y = 5;
    arm_r.addChild(_hand_r);
    body.addChild(arm_r);

    var _body:Loader = body_lt.loader;
    _body.width = 116;
    _body.height = 172;
    _body.x = 150;
    _body.y = 93;
    body.addChild(_body);

    var _face:Loader = face_lt.loader;
    _face.width = 114;
    _face.height = 111;
    _face.x = 47;
    _face.y = 0;
    head1.addChild(_face);

    var _hair_l:Loader = hair_l_lt.loader;
    _hair_l.width = 85;
    _hair_l.height = 247;
    hair_l.addChild(_hair_l);
    head1.addChild(hair_l);
    body.addChild(head1);
  }

  private function errorHandler(e:IOError, t:Thread):void
  {
    trace2("error\n");
    trace2(e.getStackTrace());
    next(null);
  }

  protected override function finalize():void
  {
    trace2("end\n");
  }
}

// --------------------------------------------

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);
  }
}
  
//-------------   
  
import flash.external.ExternalInterface;   
  
function trace2(...args):void   
{   
  var s:String = new String("");   
  for(var i:int=0;i<args.length;i++){   
    s += args[i];   
  }   
  
  try{   
    ExternalInterface.call("(function(s){$(\"compiler_messages\").value += s; $(\"compiler_messages\").scrollTop = $(\"compiler_messages\").scrollHeight - $(\"compiler_messages\").clientHeight;})", s);   
  }catch(e:Error){   
    throw e;   
  }   
}   
  
//*   
//-------------------------------------------------