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