ActionScriptを極める
  ActioScriptでできることはたくさんあります。 
  ただし、大きく分けて、クラス、イベント処理、MovieClip、その他。に分類できるような気がします。  Mingでは確か?自前のクラスは使えないので残るはイベント処理とMovieClipの理解が重要になります。
  今回はmovieclipどおし、どのようにして連携できるのか確認してみましょう。
( 注意 :: 今回からMovieClipを作成する部分を書くのが面倒なので、クラスにまとめて扱うことにしました。
今回使うクラス、MCRect、MCCircle。 MCContainer、MCObject ←どれも未完成です作りこむこしはないです。 )
階層構造
        __ rect 
 movie_|
       |__ cirle
図のような構造を持つものとします。とても単純です。s


<?php
include_once("mcRect.php");
include_once("mcCircle.php");
 
 $Rect   = new mcRect();
 $Circle = new mcCircle();
 $Movie =  new SWFMovie();
 
 $Rect->compile();
 $Circle->compile();

 ming_useSWFVersion(5);
 $Movie->setDimension(200,200);

 $item_rect = $Movie->add($Rect->getMovieclip());
 $item_rect = $Movie->setName("rect");
 $item_rect->moveto(50,100);

 $item_circle = $Movie->add($Circle->getMovieclip());
 $item_circle->setName("circle");
 $item_circle->moveto(100,100);

 $Movie->nextFrame();

 $Movie->save("Moive.swf");
?>
こんな感じでどうでしょうか。
こんな感じになります
ためしに使ってみる
 Circleを右に動かす。


<?php
include_once("mcRect.php");
include_once("mcCircle.php");
 
 $Rect   = new mcRect();
 $Circle = new mcCircle();
 $Movie =  new SWFMovie();

 $Circle->setAction
(
new SWFAction("this._x += 1;")
);
 
 $Rect->compile();
 $Circle->compile();

 ming_useSWFVersion(5);
 $Movie->setDimension(200,200);

 $item_rect = $Movie->add($Rect->getMovieclip());
 $item_rect->moveto(50,100);
 $item_circle = $Movie->add($Circle->getMovieclip());
 $item_circle->moveto(100,100);

 $Movie->nextFrame();

 $Movie->save("Moive.swf");
?>


こんな感じになります
MovieClipの初期化と関数
 MovieClipを使うと、機能をMovieClipごとに機能を分けて書くこともできます。 もちろん movieclipには 画像を描画するなどの機能があるので、クラスのような使い方をすると重くなる?と思ます?

 Circleが加速しながら右へ進むActionScriptを例に考えいてきましょう。
include_once("mcRect.php");
include_once("mcCircle.php");
 
 $Rect   = new mcRect();
 $Circle = new mcCircle();
 $Movie =  new SWFMovie();

 $Circle->setAction
(
new SWFAction(
"
var accel = 1;

this.onEnterFrame = function(){
this._x += this.accel;
this.accel +=1;
};
")
);

 $Circle->getMovieclip()->setFrames(100);
 $Rect->compile();
 $Circle->compile();
 for($i = 0;$i <97;$i++){
 $Circle->getMovieclip()->nextFrame();
 }
 
 ming_useSWFVersion(5);
 
 $Movie->setDimension(200,200);
 $Movie->setFrames(100);
 $item_rect = $Movie->add($Rect->getMovieclip());
 $item_rect->moveto(50,100);
 $item_circle = $Movie->add($Circle->getMovieclip());
 $item_circle->moveto(100,100);

 $Movie->nextFrame();
 $Movie->save("Moive.swf");
作成したもの
 mcObject.phpに問題が見つかりました。 せっかくActionScriptを設定しても setFrames()で指定したフレーム数を過ぎるとまた最初に戻ってしまいます。
 次使うときからは、ここらへんも考えながら作らないとだめでしょう。 もしかしたら。フレーム数無限というのもあるかもしれないし。
 ということで ソースがよみずらいですね。


 onEnterFrame()はフレームが呼び出されるごとに実行されます。
最初の方でaccelが宣言されて初期化された後、setFramesとnextFrameで指定された フレーム数が終わるまで、続きます。指定されたフレーム数に達すると最初に戻ります。
位置関係
簡単なころから位置関係
_root 〜主にSWFMovieが_rootになります。
_parent 〜"rectの_parentはmovie" "circleの_prentもmovie"
this 〜自分自身指します。
おまけ
 ActionScriptを極める用なので、手抜きです。
mcObject
class mcObject
 {
  protected $_movieclip; //SWFSprite
  protected $_items; //SWFDisplayitem 
  protected $_action;
  protected $_figure;
  function __construct()
   {
	print("mcObject const \n");
	$this->_movieclip = new SWFSprite();
	$this->_items = array("movieclip" => array(),"displayitem" => array());
	$this->_action= null;
	$this->_figure = null;
   }

  function addmcObject($obj){
	$this->_items["displayitem"][$this->_items["displayitem"]] = $this->_items["movieclip"][$this->_item["movieclip"]] = $obj;
  }

 function setAction($pen)
 {
   $this->_action = $pen;
 }

 function setFigure($pen)
 {
    $this->_figure = $pen;
 }

  function getMovieclip()
   {
	return $this->_movieclip;
   }

  function compile()
   {
	if($this->_figure != null){
	print("figure_compile");
	$this->_movieclip->add($this->_figure);
	}

	for($i =0;$i<$this->_item;$i++)
	  {
	 	if($this->_item["movieclip"][$i] != null){
		$this->_movieclip->compile();
	  	$this->_movieclip->add($this->_item["movieclip"][$i]);
	 	}
	  }
	
	
	
	$this->_movieclip->nextFrame();

		if($this->_action !=null){
		$this->_movieclip->add($this->_action);
		$this->_movieclip->nextFrame();
		}
   }

  }
mcRect
include_once("mcObject.php");

class mcRect extends mcObject
{
 function __construct()
	{
	parent::__construct();
	print("mcRect Const");
	$spRect = new SWFShape();
	$spRect->setLine(2,0,30,20);
	$spRect->setRightFill(10,10,10,100);
	$spRect->drawLine(0,5);
	$spRect->drawLine(5,0);
	$spRect->drawLine(0,-5);
	$spRect->drawLine(-5,0);
	$this->setFigure($spRect);
	}
}
mcCircle
include_once("mcObject.php");

class mcCircle extends mcObject
{
 function __construct()
	{
	parent::__construct();
	print("mcRect Const");

	$spRect = new SWFShape();

	$spRect->setLine(2,0,30,20);
	$spRect->setLeftFill(10,10,10,100);

$spRect->movepento(10*cos(0),10*sin(0));

for($i = 0;$i<36;$i++){
	$spRect->drawLineTo(10*cos($i/6),10*sin($i/6));
	}
	$spRect->drawLineTo(10*cos(0),10*sin(0));
	$this->setFigure($spRect);
	}
}

mcCircle.php
include_once("mcObject.php");

class mcCircle extends mcObject
{
 function __construct()
	{
	parent::__construct();
	print("mcRect Const");

	$spRect = new SWFShape();

	$spRect->setLine(2,0,30,20);
	$spRect->setLeftFill(10,10,10,100);

$spRect->movepento(10*cos(0),10*sin(0));

for($i = 0;$i<36;$i++){
	$spRect->drawLineTo(10*cos($i/6),10*sin($i/6));
	}
	$spRect->drawLineTo(10*cos(0),10*sin(0));
	$this->setFigure($spRect);
	}
}

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル