<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>blog.seyself.com</title>
        <link>http://blog.seyself.com/</link>
        <description>[http://blog.seyself.com]</description>
        <language>ja</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Tue, 12 Aug 2008 22:08:58 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>[as3] DisplayObject と Proxy</title>
            <description><![CDATA[
何かと AS3 の Proxy クラスは使えないという声をよく目にします。<br />
特に目立つのが他のクラスを継承できないこと。<br />
<br />
例えば DisplayObject の Proxy を作ったとしても、元がProxyクラスなので
addChild() が使えないとか。たぶんそんなの。<br />
<br />
今回はその辺について、ちょっと思ったことを休み前にまとめとこうかと。<br />
<br />
Progression使いたいけど、自前で拡張したクラスも組み合わせて、
なんか有効にいろんなライブラリに手を出せないかな。と思ったのが
きっかけでして、そこで一番に思い当たるのはやっぱりProxyクラスだったわけです。<br />
<br />
で最初はProxy使った方法をいろいろごにょごにょと考えてたんですけど、
結局 addChild() や removeChild() で指定するためには、どうしても DisplayObject を
参照しなきゃいけなくなって、それが参照できる時点でProxyの役目は破綻してしまうんです。<br />
<br />
<pre>
var parentObject:DisplayObjectContainer
var childObject:Proxy

parentObject.addChild(childObject.display);
</pre>
<br />
例えば上記の場合、親のDisplayObjectにProxyクラスが内包するDisplayObjectを
displayというプロパティ経由で入れ子にしようとしています。<br />
<br />
でも、これをしてしまうと、以降、親DisplayObjectからは本来隠蔽しておきたいはずの
子DisplayObjectを参照できるようになってしまい、
Proxyを通さずに直接参照・変更ができてしまいます。<br />
<br />
そもそも Proxy は dynamic ステートメントを付けておかないと
効果を発揮しません。<br />
<br />
つまり、頑張って DisplayObjectProxy とか EventProxy とかを作っても、
それを継承して様々なクラスに派生させていくような作り方だと、
全部ダイナミッククラスになってしまって
はちゃめちゃになってしまいます。<br />
<br />
もしこういう使い方をしたいならば、
素直にDisplayObject のサブクラスを作って、中身をすべて
内包する他のオブジェクトに委譲したほうがいいかもしれません。<br />
<br />
ただ、DisplayObject で Proxy クラスを作成した場合でも、
結局のところ addChild には若干問題が残ります。<br />
<br />
Sprite や MovieClip なら、委譲先のオブジェクトを
DisplayObjectContainer から作成した Proxy 用クラスのコンテナ内に追加しておけば
addChild() 時に画面上に現れますが、TextField や 
Bitmap は親オブジェクトになれないので、これらを継承したProxyクラスは
addChild しても画面に表示されません。<br />
あくまで追加されるのは Proxy クラスだからです。<br />
<br />
addChild はまだマシな方で、ADDEDイベント発生時に内部処理で置き換えが可能ですが、
removeChild 時にはどう頑張ってもクライアント側で一工夫しないといけなくなります。<br />
<br />
結局いろいろ試した結果、僕は addChild の問題は放棄しました。<br />
Proxyを末端の子オブジェクトとして捉える限り、この問題は解決しないように思えたからです。<br />
<br />
ProxyならProxyらしくコンテナ側に回してやればいいんじゃないかと。<br />
<br />
<br />
で、以下はDisplayNodeというProxyクラスを継承したサブクラスを作ってみた場合の一例です。<br />
<br />
<pre>
var rootNode:DisplayNode = new DisplayNode(new Sprite());
rootNode.child1 = new Sprite();
rootNode.child1.grandchild1 = new Shape();
rootNode.child1.grandchild2 = new Shape();
rootNode.child1.grandchild3 = new Sprite();
rootNode.child1.grandchild3.addChild(new Bitmap());
rootNode.child2 = new Sprite();
rootNode.child2.dummy = new Sprite();
rootNode.child3 = new Sprite();
delete rootNode.child2;

trace(rootNode);
</pre>
<br />
出力結果<br />
<pre>
instance148 [object Sprite]
  child1 [object Sprite]
    grandchild1 [object Shape]
    grandchild2 [object Shape]
    grandchild3 [object Sprite]
        instance153 [object Bitmap]
  child3 [object Sprite]
</pre>
<br />
何をやってるかというと、
<pre>
private var _target:DisplayObjectContainer;

override flash_proxy function getProperty(name:*):* 
{
    var child:DisplayObject = _target.getChildByName(name);
    if (child is DisplayObjectContainer) 
        return new DisplayNode(child as DisplayObjectContainer);
    return child;
}

override flash_proxy function setProperty(name:*, value:*):void 
{
    if (value is DisplayObject)
    {
        value.name = name;
        _target.addChild(value);
    }
}
</pre>
setProperty と getProperty を使って表示オブジェクトを
参照名で addChild していく。ってもの。<br />
child2 は delete の実行によって、内部で removeChild してます。<br />
<br />
<br />
このクラスの中身も一応参考までにアップしておきます。<br />
こういう使い方もあるってことで。<br />
<br />
<strong><a href="http://seyself.googlecode.com/svn/trunk/as3/proxy/com/seyself/proxy/DisplayNode.as">DisplayNode</a></strong><br />
<br />
<br />
DisplayObjectを継承したProxyを作りたいときも、なんとなくそれっぽいものまでは作る事ができます。<br />
要はダイナミッククラスな訳ですから、以下のような処理で各メソッドの呼び出し時の処理に手を加えることも。<br />
<br />
<pre style="height:260px;">
package 
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.describeType;

dynamic public class TestProxy extends Sprite
{

public function TestProxy(target:DisplayObject) 
{
    setProxyMethods(target);
}

public function setProxyMethods(target:DisplayObject):void
{
    var data:XML = describeType(target);
    var n:uint, i:uint, name:String;
    var methods:XMLList = data.elements("method");
    n = methods.length();
    for (i = 0; i < n; i++ )
    {
        name = methods[i].@name;
        if (!this.hasOwnProperty(name))
        {
            this[name] = function():*
            {
                var func:Function = target[arguments.callee.methodName];
                return func.apply(target, arguments);
            }
            this[name].methodName = name;
        }
    }
    
    var accessor:XMLList = data.elements("accessor");
    n = accessor.length();
    for (i = 0; i < n; i++ )
    {
        name = accessor[i].@name;
        if (!this.hasOwnProperty(name))
        {
            this[name] = function():*
            {
                if (arguments.length == 1) 
                    return target[arguments.callee.propName] = arguments[0];
                return target[arguments.callee.propName];
            }
            this[name].propName = name;
        }
    }
}

}// end of class

}// end of package
</pre>

<pre>
var proxy:TestProxy = new TestProxy(new TextField());
proxy.appendText("hoge");
trace(proxy.text());          // 出力 : hoge
trace(proxy.getTextFormat()); // 出力 : [object TextFormat]</pre>
<br />
テキストフォーマットを吐き出すSpriteとか。<br />
<br />
ただし、getter と setter は動的に追加できないから、やっぱり完全なProxyクラスの代用は難しいと思う。<br />
上の例の場合はプロパティへのアクセス用メソッドを用意していて、text("hoge") みたいにして使う感じ。<br />
<br />
<strong><a href="http://seyself.googlecode.com/svn/trunk/as3/proxy/com/seyself/proxy/TestProxy.as">TestProxy</a></strong><br />
<br />
<br />
結局のところ TestProxy みたいに無尽蔵にメソッドを追加しちゃうようなものは<br />
実際にはあんまり使いどころがない気がする。コードヒントとか出ないし。<br />
<br />
現在 DisplayObject を継承した Proxy 用クラスで、比較的使用頻度の高いのは以下のようなクラス。<br />
こういうクラスを予め用意しておくと、結構役に立ってくれたりします。<br />
<br />
<strong><a href="http://seyself.googlecode.com/svn/trunk/as3/proxy/com/seyself/proxy/SpriteProxy.as">SpriteProxy</a></strong><br />
<br />
このクラスはこのままインスタンスを作ってもまったく意味のないクラスなので継承しないと使えません。<br />
<br />
<br />
これって Proxy じゃなくて Decorator な気もするけど、<br />
その辺そんなに詳しいわけでもないので気にしない。<br />
<br />
<br />
<br />
今回は DisplayObject と一緒に使う事に絞ってみたけど、
Proxy クラス自体はアクセス方法がかなり自由なのでいろんな使い方ができると思います。<br />
中でも MXML みたいな使い方は得意なんじゃないかと。<br />
<br />
あんまり多用すると後が怖いですけども。<br />
<br />
それにしても、とりとめのない文章だなあ。<br />
<br />]]></description>
            <link>http://blog.seyself.com/2008/08/post_2008081222.html</link>
            <guid>http://blog.seyself.com/2008/08/post_2008081222.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Tue, 12 Aug 2008 22:08:58 +0900</pubDate>
        </item>
        
        <item>
            <title>[JSFL] JSFLコマンド修正版</title>
            <description><![CDATA[<strong>リンケージ設定JSFLコマンド</strong><br />
<a href="http://blog.seyself.com/2008/08/04/LinkageSettings.mxp">LinkageSettings.mxp</a><br />
<br />

<ul>
<li>クラスパスに「/」が入力できなかったのを修正</li>
<li>参照ボタンが正常に動作していなかったので修正</li>
<li>「ActionScriptに書き出し」にデフォルトでチェックが入るように変更</li>
<li>「ActionScriptに書き出し」にチェックが入っていないときは「クラスファイルを作成する」を選択できないように変更</li>
</ul>

上の2つはかなり致命的な欠陥だったのに今まで気づかなかった。<br />
自分で使えよって話なんですが。<br />
<br />
上記以外は変わってないですが、今回の修正で結構便利度アップしたと思いますよ。<br />
<br />
例えば
<pre>
/project
  /bin
    index.fla
  /src
    Main.as
</pre>
上記のようなディレクトリ構成で、index.flaを開いて作業いていた状態で<br />
ステージ上に配置されたシンボル「HomeButton」「WorksButton」「ContactButton」の3つを選択して<br />
このコマンドを実行した場合、<br />
<pre>
クラスパス： ../src
クラス名： demo.buttons.*
基本クラス： *
</pre>
上記の設定で「クラスファイルを作成する」にチェックを入れて実行すると

<pre>
/project
  /bin
    index.fla
  /src
    Main.as
    /demo
      /buttons
        HomeButton.as
        WorksButton.as
        ContactButton.as
</pre>
上記のようにファイルが作成されます。<br />
クラスファイルの記述もちょいちょい設定できます。<br />


<br />

使い方は<a href="http://blog.seyself.com/2008/07/post_2008071118.html">前回の記事</a>のままです。<br />
不明点があればどうぞ遠慮なく聞いてください。<br />
<br />
以前の記事で、複数のシンボルがどうのこうのと注意事項で書いてますが、<br />
特に気にしなくても使えると思います。<br />
<br />


<strong>インスタンス名にシンボル名を設定するJSFLコマンド</strong><br />
<a href="http://blog.seyself.com/2008/08/04/setInstanceName.mxp">setInstanceName.mxp</a><br />
<br />


<ul>
<li>先頭の文字を小文字に変換する</li>
</ul>

これはシンボル名が「TestButton」だった場合、このコマンドを実行すると、<br />
ステージ上のインスタンス名は「testButton」になります。<br />
<br />
変更はこれだけですが、AS3では思いのほか便利になったと思います。<br />
<br />
上の「リンケージ設定コマンド」と併用するとさらに便利。<br />
クラス名はシンボル名が適用されて、インスタンス名は先頭文字だけ小文字<br />
って状況はAS3では良くあるんじゃないでしょうか。<br />
<br />
思い当たる人は是非使ってみてくださいませ。<br />
<br />

<strong>--追記</strong><br />
なんかディレクトリ構成の例が変だけど気にしないで（汗<br />
<br />
<strong>--更に追記</strong><br />
Embedタグの記述箇所が変だったのと、symbolパラメータの値が正しく入力されてなかったので<br />
再修正してアップしました。<br />
<a href="http://blog.seyself.com/2008/08/04/LinkageSettings.mxp">LinkageSettings.mxp</a><br />
<br />
<strong>--しつこくも更に追記</strong><br />
クラス作成時、インスタンス変数を追加する際に、変数の型をすべて「DisplayObject」にしていましたが<br />
クラスの割り当てがされているインスタンスについては、設定されたクラスを追加するようにしました。<br />
指定クラスファイルが存在しない場合は基本クラスに設定されているクラスが指定されます。<br />
さらに基本クラスがデフォルトである場合は DisplayObject が指定されます。<br />
（基本クラスが Sprite や MovieClip 等である場合、JSFLでは判定できないため）<br />
<br />
また、上記変更に伴い、import 文が長く（複数行）になる場合があるので<br />
import 文はソートした状態で書き加えられるように変更しました。（可読性向上のため）<br />
<br />
<a href="http://blog.seyself.com/2008/08/04/LinkageSettings.mxp">LinkageSettings.mxp</a><br />
<br />
]]></description>
            <link>http://blog.seyself.com/2008/08/post_2008080418.html</link>
            <guid>http://blog.seyself.com/2008/08/post_2008080418.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">JSFL</category>
            
            
            <pubDate>Mon, 04 Aug 2008 18:12:42 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3] Spark Project の Utils ライブラリの ASDocを更新しました</title>
            <description><![CDATA[一部更新、追加があったのでdocsも更新しときました。<br />
といっても、このライブラリ使ってんの僕だけだったりして。<br />
<br />
<strong>Utils</strong><br />
<a href="http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils">http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils</a><br />

<br />
<strong>asdocs</strong><br />
<a href="http://www.libspark.org/htdocs/as3/utils/">http://www.libspark.org/htdocs/as3/utils/</a><br />

<br />
<strong>ダウンロード</strong><br />
<a href="http://www.libspark.org/svn/as3/Utils/docs/utils_docs.zip">http://www.libspark.org/svn/as3/Utils/docs/utils_docs.zip</a><br />
<br />
]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008072920.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008072920.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Tue, 29 Jul 2008 20:50:18 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3][習作] 七五三ゲームを作ってみましたよ。</title>
            <description><![CDATA[是非挑戦してみてください。<br />
先攻・後攻は「SETTING」ボタンから変更できます。<br />
<br />
<script langage="javascript">
var so = new SWFObject("http://blog.seyself.com/2008/07/18/game.swf", "game753", 550, 330, "9" );
so.addParam('menu', 'false');
so.addParam('wmode', 'opaque');
so.addParam('allowScriptAccess', 'sameDomain');
document.write(so.getSWFHTML());
</script>
<br />
<strong>ルール</strong><br />
<ul>
<li>同じ行なら何個でも取れます。</li>
<li>間を飛ばして取ることはできません。</li>
<li>最後の1つになったら負け</li>
</ul>
<br />
<br />
FlashDeverop + FlexSDK で作ってます。<br />
Flash IDE は今回使ってません。<br />
FlexSDK だと、書き出しが早くてすばらしいですね。<br />
<br />
]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008071819.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008071819.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">習作</category>
            
            
            <pubDate>Fri, 18 Jul 2008 19:38:57 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3] NetStreamのonMetaDataイベント</title>
            <description><![CDATA[AS3 で FLV のメタデータの取り方が分からずに、かなり無駄に時間を費やしてしまった。。。<br />
FLV のメタデータは NetStream から onMetaData を使って取得できるんだけども、<br />
この onMetaData の使い方がさっぱり分からなかったので忘れないようにメモ。<br />
経過があまりにもアホくさすぎて絶対忘れないけども。<br />
<br />
<a href="http://livedocs.adobe.com/flex/3_jp/html/help.html?content=Working_with_Video_17.html">ビデオメタデータの使用</a>
<br />
NetStreamオブジェクトの client プロパティを指定して、<br />
指定したオブジェクトに onMetaData メソッドを定義しておくと使える。<br />
<br />
この <strong>client</strong> プロパティの存在に気づかずに四苦八苦してた自分が情けない。<br />
<br />
挙句の果てに、<a href="http://www.osflash.org/flv">ここ</a>見て自前で ByteArray からメタデータ取ろうとしてしまった。<br />
<br />
ByteArray から取得した FLV の値を出力した一例。<br />
<pre>
// FLV Header
Signature = FLV
Version = 1
Flags = 5
Offset = 9

// FLV Stream
PreviousTagSize = 0

// FLV Tag
Type = 18
BodyLength = 224
Timestamp = 0
TimestampExtended = 0
StreamId = 0

// MetaData
videodatarate = 1000
audiocodecid = 2
canSeekToEnd = true
duration = 8.866
audiodatarate = 128
framerate = 30
width = 450
videocodecid = 4
height = 400
audiodelay = 0.038
</pre>
<br />
アホですよ。まったく。<br />
<br />
ここまでやって、ちゃんと取得できることに気づいた。<br />
そもそも何で AS3 なのに NetStream はこんな実装なんだ。<br />
腹立たしい。アホか！<br />
<br />

一応以下にソース残しときます。<br />
結果的に中途半端なものになってますが、<br />
なんか消してしまうのも勿体ない気がしてしまって。（費やした時間が。）<br />
<br />
<pre>
public function readFLV(data:ByteArray):void
{
    // FLV Header
    var Signature:String = data.readUTFBytes(3);
    var Version:uint = uint8(data);
    var Flags:uint = uint8(data);
    var Offset:uint = uint32(data);
    
    // FLV Stream
    var PreviousTagSize:uint = uint32(data);
    
    // FLV Tag
    var Type:uint = uint8(data);
    var BodyLength:uint = uint24(data);
    var Timestamp:uint = uint24(data);
    var TimestampExtended:uint = uint8(data);
    var StreamId:uint = uint24(data);
    var Body:ByteArray = new ByteArray();
    data.readBytes(Body, 0, BodyLength);
    
    
    // Body(FLV Tag Type = 0x12 : AMF)
    var a:uint = uint8(Body);// ???
    var b:uint = uint8(Body);// ???
    
    // MetaData
    readString(Body);
    var metadata:Object = readMixedArray(Body);
    
    
    trace(Signature, Version, Flags, Offset);
    trace(PreviousTagSize);
    trace(Type, BodyLength, Timestamp, TimestampExtended, StreamId);
    
    // MetaData の中身
    for (var val:String in metadata) {
        trace(val + "=" + metadata[val]);
    }
    
}

public function  uint8(data:ByteArray):uint { return data.readByte(); }
public function uint16(data:ByteArray):uint { return data.readUnsignedShort(); }
public function uint24(data:ByteArray):uint { return data[data.position++]&lt;&lt;16 | data[data.position++]&lt;&lt;8 | data[data.position++]; }
public function uint32(data:ByteArray):uint { return data.readUnsignedInt(); }

public function readNumber(data:ByteArray):Number
{
    return data.readDouble();
}
public function readBoolean(data:ByteArray):Boolean
{
    return data.readByte() == 0x01;
}
public function readString(data:ByteArray):String
{
    var len:uint = data.readByte();
    return data.readUTFBytes(len);
}
public function readObject(data:ByteArray):Object
{
    return null;
}
public function readMixedArray(data:ByteArray):Object
{
    data.readByte();
    var length:uint = data.readInt();
    var res:Object = { };
    var value:*;
    var name:String;
    var type:uint;
    var len:uint = data.length;
    for (;; ) {
        var separator:uint = data.readByte();
        name = readString(data);
        type = data.readByte();
        
        if (type == 0x09) break;
        
        switch(type) {
            case 0x00 : { value = readNumber(data); break; } // Object
            case 0x01 : { value = readBoolean(data); break; } // Object
            case 0x02 : { value = readString(data); break; } // Object
            case 0x03 : { value = readObject(data); break; } // Object
            //case 0x04 : { break; } // Movie Clip
            case 0x05 : { value = null; break; } // Object
            case 0x06 : { value = undefined; break; } // Object
            //case 0x07 : { break; } // Reference
            case 0x08 : { value = readMixedArray(data); break; } // MixedArray
            case 0x0a : { value = readArray(data); break; } // Array
            case 0x0b : { value = readDate(data); break; } // Date
        }
        res[name] = value;
    }
    return res;
}
public function readArray(data:ByteArray):Array
{
    return null;
}
public function readDate(data:ByteArray):String
{
    return null;
}
</pre>
]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008071420.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008071420.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Mon, 14 Jul 2008 20:07:02 +0900</pubDate>
        </item>
        
        <item>
            <title>[JSFL] リンケージの設定と同時にクラスファイルを自動生成するJSFLコマンド</title>
            <description><![CDATA[リンケージの設定と同時にクラスファイルを自動生成する<br />
Flash CS3 用の JSFLコマンドをアップしました。<br />
<br />
<a href="http://blog.seyself.com/2008/07/11/LinkageSettings.mxp">LinkageSettings.mxp</a><br />
<br />
Flashのメニューから「<strong>コマンド</strong>」＞「<strong>LinkageSettings</strong>」で使用できます。<br />
このコマンドを呼び出す際は、以下の条件が必要です。<br />
<br />
<ul>
<li>flaファイルが保存されたもの。<br />（新規作成で開いた状態で未保存の場合は使用できません。）</li>
<li>ステージ上のシンボル、もしくはライブラリ内のシンボルを1つ以上選択した状態であること。</li>
<li>ドキュメントのActionScriptのバージョンが3であること。</li>
</ul>
<br />
まだベータ版ってことで、Macで検証できてないのと、
AS2 には使用できません。<br />
実行すると以下のダイアログが表示されます。<br />
<br />
<img src="http://blog.seyself.com/2008/07/11/linkage_settings.png" width="396" height="504" border="0" /><br />
<br />
<strong>特徴</strong><br />
<ul>
<li>ステージ上、もしくはライブラリ内で選択中の複数のシンボルをまとめてリンケージ設定可能</li>
<li>リンケージの設定対象は MovieClip, Bitmap, Font, Sound, Button の5種類です。</li>
<li>リンケージ設定時にクラスファイルが存在しない場合、自動で生成することができます。</li>
<li>クラスファイルの自動生成時に特定のイベントを追加しておくことができます。</li>
<li>クラスファイルの自動生成時にEmbedタグを設定しておくことができます。</li>
<li>複数選択時、クラス名に<strong>*</strong>を使用することで、各シンボル名と同名のクラスを作成します。<br />
例）classes.display.*</li>
<li>複数選択時、基本クラス名に<strong>*</strong>を使用することで、<br />
各アイテムのデフォルトで割り当てられるクラスを基本クラスに設定することができます。</li>
<li>対象がムービークリップの場合、内包するインスタンス名を変数宣言しておくことができます。</li>
<li>対象がムービークリップの場合、タイムライン上のスクリプトを調べて、クラス内に addFrameScript として設定することができます。</li>
<li>書き出すクラスファイルのテンプレートは単独のファイルとなっているため、比較的容易に編集が可能です。<br />
"Commands/seyself/templates/as3_class.tmpl" がテンプレートファイルです。<br />
テンプレートファイル内で<strong>[XXXX]</strong>と書かれている箇所が、<br />
それぞれ置き換えられる場所になっているので、編集の際はご注意ください。</li>
</ul>
<br />
<strong>注意事項</strong><br />
<ul>
<li>まだ検証が十分ではありませんので、ご使用には注意してください。<br />
特に複数のシンボルをまとめてリンケージ設定する際に、クラス生成も同時に行うと<br />
予期せぬ結果になる可能性があります。</li>
<li>クラスパスは相対パスで記述してください</li>
<li>Embedタグを追加した際、自動的にswfファイルへの参照が記述されますが、<br />
この機能はflaファイルの位置を指しています。<br />
flash側でパプリッシュ先を、他のディレクトリに指定を変更した場合でも、<br />
flaファイルの位置を元に書き込まれます。</li>
</ul>
<br />
<strong>困ってること</strong><br />
<ul>
<li>Flash側でSWFのパブリッシュ先を変更した場合の、書き出し先の取得方法が分かりません。</li>
<li>XULがよく分からず、表示パネルの外枠がやたらデカくて困ってます。</li>
<li>Mac　にて検証する環境がないため、ディレクトリの指定等がまったく分かりません。</li>
</ul>
<br />

もしどなたか Mac 環境で検証してくれるって方がおられましたら<br />
是非以下の JSFL ファイル（DirectoryTest.jsfl）を使用して、<br />
出力された結果を教えていただけませんでしょうか。<br />
<br />
<a href="http://blog.seyself.com/2008/07/11/directory_access_test.zip">directory_access_test.jsfl</a>
<br />
<br />
ちなみに「 Windows XP SP2 / Flash CS3 」での出力結果は以下のようになりました。
ご参考まで。
<pre>
//==== Directory Access Test ====

■fl.configURI =
file:///C|/Documents%20and%20Settings/wada/Local%20Settings/Application%20Data/Adobe/Flash%20CS3/ja/Configuration/

■document.path =
D:\wada\00_works\2008_latter\20080709_test_commands\flash\20080709\index.fla

■fl.browseForFolderURL() =
file:///C|/flex_sdk_3/bin

■fl.browseForFileURL() =
file:///C|/Program%20Files/Adobe/Adobe%20Flash%20CS3/Flash.exe

//==== Test Complete ====
</pre>
<br />
以後、ゆっくりとですが調整していく予定です。<br />
<br />]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008071118.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008071118.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">JSFL</category>
            
            
            <pubDate>Fri, 11 Jul 2008 18:35:32 +0900</pubDate>
        </item>
        
        <item>
            <title>[JSFL] JSFLでBitmapItemのリンケージ設定</title>
            <description><![CDATA[現状 Flash CS3 では、 JSFLで画像（BitmapItem）のリンケージ設定で<br />
「ActionScript に書き出し」の設定をしようとしても値が false のままで変更できません。<br />

<pre>
item.linkageExportForAS = true;
alert(item.linkageExportForAS); // output : false
</pre>

<pre>
lib.setItemProperty('linkageExportForAS', true);
alert(item.linkageExportForAS); // output : false
</pre>

プロパティを直接設定しても、 setItemProperty を使っても同じです。<br />
<br />
で、ちょっと無茶な方法ですが以下のようにスクリプトを変更します。<br />

<pre>
var item = fl.getDocumentDOM().library.getSelectedItems()[0];
<strong>if(item.itemType=="bitmap") item.linkageExportForRS = true;</strong>
item.linkageExportForAS = true;
item.linkageExportInFirstFrame = true;
</pre>

こうすると、ライブラリからマウス操作でリンケージパネルを開いたとき、以下のようになります。<br />
<br />
<img src="http://blog.seyself.com/2008/07/10/linkage_panel.png" width="447" height="231" border="0" /><br />
<br />
このように「ランタイム共有用に書き出し」が true に設定された状態で、<br />
「ActionScript に書き出し」は設定されていないという、パネルを直接操作しても<br />
再現出来ないようなおかしなことになってますが、このときのBitmapItem のプロパティを<br />
出力すると以下のようになります。<br />

<pre>
linkageExportForRS = true
linkageExportForAS = undefined
linkageExportInFirstFrame = true
<strong>linkageClassName = image.jpg</strong>
linkageBaseClass = 
allowSmoothing = false
compressionType = photo
quality = -1
useImportedJPEGQuality = true
itemType = bitmap
name = items/image.jpg
linkageImportForRS = undefined
linkageIdentifier = image.jpg
linkageURL = 
</pre>

linkageClassName（太字）のところを見ると、クラスが設定されています。<br />
この状態であれば、linkageClassName、linkageBaseClass 共にスクリプトで設定しなおすことが出来ます。<br />
linkageURL はそのまま空でもパブリッシュは可能です。<br />
<br />
このJSFLコマンドを実行した後、リンケージパネルを変更せずに<br />
以下の ActionScript をタイムラインに書いてプレビューしてみると、<br />
ちゃんと書き出されてることが確認できます。<br />
linkageClassName は JFSL に追記して "image_jpg" に変更しています。<br />

<pre>
import flash.display.Bitmap;
addChild(new Bitmap(new image_jpg(1,1)));
</pre>

ただし、「ランタイム共有用に書き出し」を行ってしまうので、これを使うと<br />
Bitmap に設定したクラス名とファイルを配置した SWF の URL が分かれば、<br />
他のドキュメントソースファイルから「ランタイム共有用に読み込み」で読み込んでしまえる。<br />
<br />
残念ながら linkageExportForRS を false にすると、結局 AS への書き出しも行われなくなってしまうので<br />
今のところ対処方法はまだわかりません。無いのかもしれない。<br />
<br />
FlashDevelop + FlexSDK とかで開発する上で、<br />
SWF から [Embed] タグで画像を読み込む分には使えるかもしんない。<br />
それをしないといけない状況があるかどうかなんですが。<br />
<br />]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008071013.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008071013.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">JSFL</category>
            
            
            <pubDate>Thu, 10 Jul 2008 13:55:45 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3] Spark Project の Utils ライブラリの ASDoc</title>
            <description><![CDATA[Spark Project の Utils ライブラリの ASDoc を書き出してアップしてみました。<br />
HTMLでアップするとファイルが多いのでZIPに圧縮してます。<br />
<br />
あとちょろちょろとクラスファイルを足してます。<br />
何か無駄なところも多々あると思います。<br />
実装が微妙なところも結構あります。EventUtil とか。<br />
<br />
<strong>Utils</strong><br />
<a href="http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils">http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils</a><br />
<br />
<strong>utils_docs.zip</strong><br />
<a href="http://www.libspark.org/svn/as3/Utils/docs/utils_docs.zip">http://www.libspark.org/svn/as3/Utils/docs/utils_docs.zip</a><br />
<br />
<br />
とりあえず、今こんなのが入ってるってのが把握できればと思います。<br />
<br />
]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008070917.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008070917.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Wed, 09 Jul 2008 17:35:24 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3] イベントハンドラとarguments</title>
            <description><![CDATA[今までまったく気づかなかったことなんですが
<pre>
addEventListener("enterFrame", handler);
function handler():void {}
</pre>
ってすると
<pre>
ArgumentError: Error #1063: _fla::MainTimeline/handler() の引数の数が一致していません。0 が必要ですが、1 が指定されました。
</pre>
ってエラーが出て怒られるんだけども、
<pre>
addEventListener("enterFrame", handler);
function handler():void { <strong>arguments;</strong> }
</pre>
上記の場合はそのまま何事もなく実行される。<br />
上記のようにイベントハンドラの中に「arguments」が入ってると、引数は別に定義されてなくてもいいみたい。<br />
<br />
これは引数の数は関係ないみたいだけども、「...rest」が入ってると「arguments」が使えなくなるのでダメっぽい。<br />
まあ、そもそも「...rest」入れてる時点で引数の数はあんまり関係なくなるけども。<br />
<br />
じゃあ、普通に関数でも使えるかと思って試してみた。
<pre>
function test():void {arguments;}
test(1, 2, 3);
</pre>
普通に怒られた。
<pre>引数の数が正しくありません。0個以下であることが必要です。</pre>
って。<br />
で少し呼び出し方を変えてみる。<br />
<pre>
function test():void {arguments;}
test.apply(null, [1, 2, 3]);
</pre>
と、今度はすんなり通った。<br />
ようはイベントの通知には apply が使われてるってことか。<br />
<br />
もしかして dispatchEvent もこの要領で「dispatchEvent.apply」とかすれば引数勝手に増やせるかも？<br />
とか思ったけど、やっぱりそれはダメでした。<br />
<br />
で、結局のところ「だから何なんだ」って話しで、<br />
特に何も得することもないんですが。<br />
<br />
<br />
通常、外部からの呼び出しの時は引数無しだったり、個定数の引数を渡さないといけなくしておいて<br />
内部処理のみ、内緒でこっそり引数渡してやりたい時なんかは使えるかもしれないですね。<br />
再起処理の時のフラグとか。<br />


]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008070916.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008070916.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Wed, 09 Jul 2008 16:24:03 +0900</pubDate>
        </item>
        
        <item>
            <title>[AIR] Airでクリップボードランチャを作ってみました</title>
            <description><![CDATA[
久しぶりの投稿です。<br />
どうもご無沙汰しております。<br />
<br />
Airでクリップボードランチャを作ってみました。<br />
インストール、解説もろもろは以下にページを作っておきました。<br />
<br />
<a href="http://www.seyself.com/airclip/">AirClip</a> [<a href="http://www.seyself.com/airclip/">http://www.seyself.com/airclip/</a>]<br />
<br />
一応このアプリケーションはスニペット的な使用を想定して作ってみました。<br />
（ショートカットとかないですけども）<br />
<br />
テキストと画像の管理ができますが、画像管理はほとんどおまけ状態です。<br />
というのも、クリップボードにコピーした画像データを取得しても、<br />
アルファ情報が破棄されちゃってて透過画像をうまく管理できなかったんです。<br />
これについて、誰か対処方法知ってたら是非とも教えてほしいです。<br />
<br />
あと、複数の履歴を管理できるようにしようかとも思いましたが<br />
UIが思いつかなかったので、とりあえず放置しました。<br />
<br />
<br />
履歴1000件とかは試してないので、あんまり多くなったときにどうなるかは謎です。<br />
<br />
僕自身、ちょいちょい使いながら手直ししていこうかなと思ってます。<br />
<br />
何か不具合とか要望とか、コメントもらえれば追々対応しますです。<br />
致命的過ぎない限り即日対応とかは無理ですが。<br />
<br />
<br />
]]></description>
            <link>http://blog.seyself.com/2008/07/post_2008070120.html</link>
            <guid>http://blog.seyself.com/2008/07/post_2008070120.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">AIR</category>
            
            
            <pubDate>Tue, 01 Jul 2008 20:37:15 +0900</pubDate>
        </item>
        
        <item>
            <title>[ActionScript] Catmull-Rom 補間</title>
            <description><![CDATA[スプライン補間があんまり混雑な計算になってしまうので<br />
いろいろ探してたら「Catmull-Rom 補間」なるものを知りました。<br />
<br />
<pre>
function CatmullRom(p0:Number, p1:Number, p2:Number, p3:Number, t:Number):Number
{
    var v0:Number = (p2 - p0) / 2;
    var v1:Number = (p3 - p1) / 2;
    var t2:Number = t * t;
    var t3:Number = t2 * t;
    return (2 * p1 - 2 * p2 + v0 + v1) * t3 + 
        ( -3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
</pre>
t には 0.0 から 1.0 の係数が入ります。<br />
p0 から p3 間にある点、p1、p2を通過する曲線を求めます。<br />
得られる値は p1 から p2 までです。<br />
Processing の curve() といっしょ。（←不確かですが...）<br />
<br />
ただ Graphics.curveTo() で描くのはちょっと難しいっぽいです。<br />
角っこがポコってなる。<br />
3次ベジェをきっちり定義できれば curveTo() も使えるかも。<br />
<br />
<strong>デモ（開曲線）</strong><br />
<script langage="javascript">
var so = new SWFObject("http://blog.seyself.com/2008/06/10/spline_open.swf", "curve_open", 400, 400, "9" );
so.addParam('menu', 'false');
so.addParam('wmode', 'opaque');
so.addParam('allowScriptAccess', 'sameDomain');
document.write(so.getSWFHTML());
</script><br />
<br />
<strong>デモ（閉曲線）</strong><br />
<script langage="javascript">
var so = new SWFObject("http://blog.seyself.com/2008/06/10/spline_close.swf", "curve_close", 400, 400, "9" );
so.addParam('menu', 'false');
so.addParam('wmode', 'opaque');
so.addParam('allowScriptAccess', 'sameDomain');
document.write(so.getSWFHTML());
</script><br />
<br />
<br />
参考 : <a href="http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html">http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html</a><br />]]></description>
            <link>http://blog.seyself.com/2008/06/post_2008061020.html</link>
            <guid>http://blog.seyself.com/2008/06/post_2008061020.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">ActionScript</category>
            
            
            <pubDate>Tue, 10 Jun 2008 20:01:59 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3] FlashPlayer10のVectorクラスって</title>
            <description><![CDATA[FlashPlayer10が世間を賑わせてますが、僕はまだインストールしてないです。<br />
3Dに対応したけど、世の中のFlashコンテンツが3Dだらけになったら嫌だなあ。とかぼやきつつ<br />
もうしばらく静観してようかなと思ってます。<br />
いろんな人が新機能についてノウハウを記事にされるのを読んでからにしようかと。<br />
Flexも持ってないし。<br />
まったく人任せな。<br />

<br />
ところで、Vectorクラスなんですけども、<br />
これって中身を型指定できるってことなんですが<br />
<pre>
var a:Array = new Vector.&lt;String&gt;();
</pre>
みたいなことって出来るんでしょうか。<br />
<br />
<a href="http://hg.mozilla.org/tamarin-central/index.cgi/file/b0ee91f30435/core/Vector.as">Vectorクラス自体の実装</a>を一見しても、Array を継承してるようでもないので、<br />
もしかしてArrayとはまったく別物なのかな？ と。<br />
<br />
個人的な要望としては<br />
<pre>
var a:String[] = ["a","b","c"];
</pre>
みたいな方が都合良さげな気がするんですが。<br />
<br />
もしかして<br />
<pre>
var v:Vector.&lt;String&gt; = ["a","b","c"];
</pre>
とかもできないんだろうか。<br />
<br />
さすがに<br />
<pre>
function test( arg:Vector.&lt;String&gt; ): Vector.&lt;String&gt;
{
   return arg;
}
</pre>
ってことは出来るんだろうけど。<br />
<br />
でも、やっぱり Vector が Array として認識できないと何か嫌。<br />
認識できなくていいなら、Proxy使って<a href="http://www.libspark.org/browser/as3/Study/ArrayOf/src/ArrayOf.as">こんな実装</a>でいいんじゃないかと。<br />
これなら今のままでも使えるし。<br />
<br />
まあ、Arrayより高速に処理できるってことはいいんだろうけど。<br />
<br />
<br />
ついでに、上記の「こんな実装」を使った場合は以下のような感じ。<br />
<strong><a href="http://www.libspark.org/browser/as3/Study/ArrayOf/src/ArrayOf.as">ArrayOf</a></strong>
<pre>
import flash.geom.Point;

var points:ArrayOf = new ArrayOf(Point);
points[0] = new Point(1,1);
points[1] = new Point(2,2);
points.push( new Point(3,3), new Point(4,4) );

trace(points); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4)

var a:Array = points.toArray();
trace(a); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4)

var points2:ArrayOf = new ArrayOf(Point);
points2.push(new Point(5,5), new Point(6,6));

var points3:ArrayOf = points.concat(points2);


trace( points3 ); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4),(x=5, y=5),(x=6, y=6)
trace(points3[4]);          // (x=5, y=5)
trace(points3.shift());     // (x=1, y=1)
trace(points3.pop());       // (x=6, y=6)
trace(points3.splice(0,2)); // (x=2, y=2),(x=3, y=3)

test(points); // ok

points[0] = 1; // ArgumentError: Point と関連しない型の値は格納できません。

function test(arg:ArrayOf):void
{
    if( arg.type != Point ) throw new ArgumentError("エラー");
    trace("ok");
}
</pre>

]]></description>
            <link>http://blog.seyself.com/2008/05/post_2008051621.html</link>
            <guid>http://blog.seyself.com/2008/05/post_2008051621.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Fri, 16 May 2008 21:50:51 +0900</pubDate>
        </item>
        
        <item>
            <title>[as3] 久しぶりにSparkにコミットしました</title>
            <description><![CDATA[
<a href="http://www.libspark.org/">Spark Project</a> の Utils ライブラリにコミットしました。<br />
<a href="http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils">http://www.libspark.org/browser/as3/Utils/src/org/libspark/utils</a><br />
<br />
至らない点は多々あると思うので、使い勝手のいいように変更してもらえればいいと思います。<br />
もちろん何か言っていただければ可能な限り対応します。<br />
<br />
コミットしたのは以下のファイル。<br />
<br />
<strong>ArrayUtil</strong>（追記）<br />
<strong>BitmapUtil</strong><br />
<strong>ColorUtil</strong><br />
<strong>DateUtil</strong>（追記）<br />
<strong>MathUtil</strong>（追記）<br />
<strong>StringUtil</strong>（追記）<br />
<br />
（追記）は元々あったものに手を加えました。<br />
<br />
<br />
いろんなライブラリを使ってると「ArrayUtil」とか「ColorUtil」とか<br />
同じ名前のクラスが 3 つも 4 つもある状態になってしまったりするので<br />
（as3corelibとか、popforgeとか、progressionとか。とかとか。）<br />
そういうのんに含まれてるものも、こっちに書き写してしまえば<br />
使うとき楽でいいんだけどなあ。と思う今日この頃です。<br />
（写したら同じのが増えちゃうんですけども。。。）<br />
<br />
<br />
ちなみに<br />
<a href="http://www.be-interactive.org/">BeInteractive!</a>さんが「<a href="http://www.be-interactive.org/index.php?itemid=362">「これコミットして大丈夫なのかな...」と考える前にコミットして欲しい</a>」って記事を<br />
書いてくれていて、これは小心者の僕としてはコミットへの後押しになりました。<br />
記事を書いておられるのがコメントもらった次の日だっていうのに、気づいたのが今日という僕ですが。<br />
<br />
こっそりと感謝です。<br />
<br />
<br />

<strong>追記::</strong>（2008.05.16）<br />
<strong>GeomUtil</strong><br />
<strong>ObjectUtil</strong><br />
上記2点追加しました。<br />
<br />
]]></description>
            <link>http://blog.seyself.com/2008/05/post_2008051419.html</link>
            <guid>http://blog.seyself.com/2008/05/post_2008051419.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">as3</category>
            
            
            <pubDate>Wed, 14 May 2008 19:54:17 +0900</pubDate>
        </item>
        
        <item>
            <title>[Progression] Progression用のモーション用コマンドもろもろ</title>
            <description><![CDATA[休み前なので立て続けですが。<br />
たぶん休み中は更新しないです。あしからず。<br />
<br />
<a href="http://progression.libspark.org/">Progression</a>用のモーション系のコマンドをいくつか作りました。<br />
せっかくなのでアップしておきます。<br />
作ったといっても、AS2からずっと使ってる自前のモーションクラスをコマンド用に書き換えただけなんですが。<br />
もちろん、みんなが安心、<a href="http://code.google.com/p/tweener/">Tweener</a>をベースにしなおしといたんで、そのまま使うなり改良するなり、煮るなり焼くなりご自由に。<br />
<br />
ただしProgressionのバージョンが2.1.xにバージョンアップすると使えなくなる可能性大です。<br />
そのうち対応するとは思いますが。←僕が<br />
<br />
あと、はじめに言い訳しておくと、パッケージ名がCroquisですが、<br />
fladdictさんの<a href="http://code.google.com/p/sketchbook/">sketchbook</a>の名前をパクリました。すいません。（中身はパクってません）<br />
というのも、なんかここまでいろんな便利ライブラリが出回ってると、自分でなんか作る気もしないので<br />
とりあえずProgressionをベースに世のオープンソースなライブラリを自分用にまとめてショートカットクラスなんかにしちゃってるわけです。<br />
sketchbookから<a href="http://www.libspark.org/">Spark</a>のutilsとか<a href="http://www.gskinner.com/blog/archives/2007/12/colormatrix_upd.html">ColorMatrix</a>とかとか<br />
<br />
そこまでくると、どこまで公開してもいいのか良く分からんし、あんまり大きな声じゃ言えないんですが。<br />
<br />
んで、以下はその中の一部ってことです。はい。<br />
<br />
ところで余談なのですが、SparkのUtilクラスってホントに勝手に書き足したやつとかコミット（？）しちゃっていいんだろうか。<br />
あと、どれくらいUtil系そろえるつもりなんだろう。とにかく万能Utilにしちゃうんだろうか。<br />
それとも他で出てるものとはかぶらない様にとかあるんだろか。<br />
もしとにかく何でもってんなら、少しは貢献できるかもしれないけども。<br />
なんかあの辺の人たち凄すぎて気後れしちゃうよ。<br />
へむへむ。<br />
<br />
<br />
でわでわ。以下デモになります。<br />
<script langage="javascript">
var so = new SWFObject("http://blog.seyself.com/2008/04/24/demo.swf", "motions", 550, 400, "9" );
so.addParam('menu', 'false');
so.addParam('wmode', 'opaque');
so.addParam('allowScriptAccess', 'sameDomain');
document.write(so.getSWFHTML());
</script>
<br />
<br />
ソースファイルはこちら。<br />
<a href="http://blog.seyself.com/2008/04/24/croquis.zip">croquis.zip</a><br />
<br />

以下、このデモに含まれるクラス。<br />
<br />
<strong>◆クラス一覧</strong><br />
<br />
<strong>基本クラス</strong><br />
croquis.motions.Motion<br />
<br />
<strong>移動用コマンドクラス</strong><br />
croquis.motions.Linear<br />
croquis.motions.Curve<br />
croquis.motions.Cycle<br />
croquis.motions.Wave<br />
croquis.motions.Twist<br />
croquis.motions.Bug<br />
<br />
<strong>変形用コマンドクラス</strong><br />
croquis.motions.Trans<br />
<br />
<strong>着色用コマンドクラス</strong><br />
croquis.motions.FillColor<br />
<br />
<br />
<br />
<strong>◆簡易リファレンス</strong><br />
<br />
<strong>croquis.motions.Motion</strong><br />
Motion( type:String, time:Number, transition:String=null, delay:int = 0 )<br />
<br />
Motionクラスのベースになるクラスです。<br />
このクラスは直接インスタンスを生成することができません。<br />
作成する場合は必ずサブクラスを作成します。<br />
<br />
<strong>croquis.motions.Linear</strong><br />
Linear(target:Object, time:Number = 1.0, x:Number = 0.0, y:Number = 0.0, transition:String=null, delay:int=0) <br />
<br />
指定座標まで直進します。<br />
<pre>
target      対象となるオブジェクト
time        移動時間
x           目標X座標
y           目標Y座標
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<strong>croquis.motions.Curve</strong><br />
Curve(target:Object, time:Number = 1.0, x:Number = 0.0, y:Number = 0.0, angle:Number = 0.0, radius:Number=0.0, transition:String=null, delay:int=0) <br />
<br />
指定座標まで弧を描いくように移動します<br />
<pre>
target      対象となるオブジェクト
time        移動時間
x           目標X座標
y           目標Y座標
angle       始点から終点までの中点からの中継点の角度
radius      始点から終点までの中点からの中継点までの半径
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<strong>croquis.motions.Cycle</strong><br />
Cycle(target:Object, time:Number = 1.0, x:Number = 0.0, y:Number = 0.0, round:Number = 0, clockwise:Boolean = true, transition:String=null, delay:int=0) <br />
<br />
指定座標を中心に回転しながら移動します<br />
<pre>
target      対象となるオブジェクト
time        移動時間
x           目標X座標
y           目標Y座標
round       回転数
clockwise   時計回り（true） 反時計回り（false）
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<strong>croquis.motions.Wave</strong><br /><br />
Wave(target:Object, time:Number = 1.0, x:Number = 0.0, y:Number = 0.0, radius:Number = 0.0, swing:Number = 0.0, transition:String=null, delay:int=0)<br /> 
<br />
指定座標までの直線軸を中心に揺れながら移動します<br />
<pre>
target      対象となるオブジェクト
time        移動時間
x           目標X座標
y           目標Y座標
radius      初期振幅距離
swing       振動回数
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<strong>croquis.motions.Twist</strong><br />
Twist(target:Object, time:Number = 1.0, x:Number = 0.0, y:Number = 0.0, radius:Number = 0.0, round:Number = 0.0, clockwise:Boolean = true, transition:String=null, delay:int=0) <br />
<br />
指定座標までの直線軸を中心に回転しながら目標点に移動します。<br />
<pre>
target      対象となるオブジェクト
time        移動時間
x           目標X座標
y           目標Y座標
radius      回転半径
round       回転数
clockwise   時計回り（true） 反時計回り（false）
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<strong>croquis.motions.Bug</strong><br />
Bug(target:Object, time:Number = 1.0, x:Number = 0.0, y:Number = 0.0, turnSpeed:Number=0.05, transition:String=null, delay:int=0) <br />
<br />
不規則な動作をしながら指定座標まで移動します<br />
<pre>
target  対象となるオブジェクト
time    移動時間
x   目標X座標
y   目標Y座標
turnSpeed   向きを変える速度
transition  Tweenerに渡すtransitionパラメータ
delay   待機時間
</pre>
<br />
<strong>croquis.motions.Trans</strong><br />
Trans(target:DisplayObject, time:Number = 1.0, scaleX:Number = 1.0, scaleY:Number = 1.0, rotation:Number=0.0, basePoint:Point=null, transition:String=null, delay:int=0) <br />
<br />
任意の座標を中心に DisplayObject インスタンスを回転、及び拡大縮小させます<br />
<pre>
target      対象となるオブジェクト
time        移動時間
scaleX      X軸拡大縮小値
scaleY      Y軸拡大縮小値
rotation    回転角度
basePoint   任意の中心点
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<strong>croquis.motions.FillColor</strong><br />
FillColor(target:DisplayObject, time:Number = 1.0, colorTransform:ColorTransform = null, transition:String = null, delay:int = 0) <br />
<br />
ColorTransform によって DisplayObject インスタンスに着色します<br />
<pre>
target      対象となるオブジェクト
time        移動時間
colorTransform  変更対象となる色情報
transition  Tweenerに渡すtransitionパラメータ
delay       待機時間
</pre>
<br />
<br />
<strong>追記：</strong><br />
executeボタンを押したときに前回のコマンドが実行中の場合、前回のコマンドを停止してから実行するようにしました。<br />
上記の一覧のクラスには変更はありません。<br />
<br />

]]></description>
            <link>http://blog.seyself.com/2008/04/post_2008042422.html</link>
            <guid>http://blog.seyself.com/2008/04/post_2008042422.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Progression</category>
            
            
            <pubDate>Thu, 24 Apr 2008 22:29:07 +0900</pubDate>
        </item>
        
        <item>
            <title>[連載] デザイナーのためのActionScript講座 ― 第10回：ヘルプを利用してMovieClipのプロパティを調べる</title>
            <description><![CDATA[前回はMovieClipの _x と _y のプロパティを変更して移動させましたが、<br />
MovieClipにはその他にも様々なプロパティが定義されています。<br />
このプロパティを変更することで、ムービークリップを回転させたり<br />
透明度を変更したり、拡大縮小することなど、いろんなことができるようになります。<br />
<br />
ってことでした。<br />
<br />
<br />
それでは、他にどのようなプロパティが定義されているのか調べてみましょう。<br />
<br />
キーボードの<strong>F1</strong>キーを押すとヘルプパネルが立ち上がるかと思います。（少なくとも初期設定の状態であれば）<br />
<br />
<img src="http://blog.seyself.com/2008/04/vol10/help1.jpg" alt="ヘルプパネル 図.1" /><br />
<br />
ヘルプパネルが開いたら上図のプルダウンメニューから「リファレンスガイド（ActionScript &amp; コンポーネント）」を開きます。<br />
<br />
選択したらスクロールバーがしばらく、ずりーっとなったあと下図のようになります。<br />
<br />
<img src="http://blog.seyself.com/2008/04/vol10/help2.jpg" alt="ヘルプパネル 図.2" /><br />
<br />
表示されたリストから「ActionScript 2.0 リファレンスガイド」→「ActionScript クラス」を選択します。<br />
<br />
<img src="http://blog.seyself.com/2008/04/vol10/help3.jpg" alt="ヘルプパネル 図.3" /><br />
<br />
FLASH CS3 を利用している場合は以下のような感じです。<br />
<br />

<img src="http://blog.seyself.com/2008/04/vol10/help5.jpg" alt="ヘルプパネル 図.3-2" /><br />
<br />

ActionScriptに定義されているクラスの一覧がつらつらと表示されるので、<br />
その中から「MovieClip」の項を探して選択します。<br />
<br />

<img src="http://blog.seyself.com/2008/04/vol10/help4.jpg" alt="ヘルプパネル 図.4" /><br />
<br />

開いたページ内には「<strong>プロパティ一覧</strong>」「<strong>イベントの一覧</strong>」「<strong>メソッド一覧</strong>」とテーブルが並んでいます。<br />
このプロパティ一覧に _x や _y のようなプロパティから、透明度やサイズのプロパティの解説が書かれています。<br />
このテーブルから、MovieClipがどのようなプロパティが定義されているのかを調べることができます。<br />
実際にはどんなプロパティがあるのかを調べるより、こういうことをしたいときにはどのようなプロパティやメソッドを用いればいいのか。といった調べ方の方が多いと思いますが、そういうときにも僕はこの一覧の中から探しています。<br />
<br />
ちなみに前回用いた onEnterFrame は「イベントの一覧」の中にあります。<br />
<br />
さらに特定のプロパティの詳細が知りたいときは、左の一覧から選択するか、CS3の場合はリスト内のプロパティ名の箇所がリンクになっているので、そこから詳細ページに移ることができます。<br />
詳細ページでは簡単なサンプルソースが掲載されていたりもするので、かなり参考になります。<br />
<br />
<br />
これまで僕も様々なFLASHの参考書を買いあさってきましたが、結局最後まで使うのはヘルプです。<br />
ヘルプを見ればほとんどのスクリプトの説明が載ってます。<br />
これを読んでる方が調べて、解説されていないスクリプトってのはないんじゃないかと思います。<br />
<br />
今ではActionScriptについて書かれているブログもかなり増えましたし、<br />
技術者向けのニュースサイトで解説もされているので、インターネットを利用しても簡単に見つけることができると思います。<br />
<br />
分からないときは FLASH-JP のようなフォーラムで質問するのも助けになるかと思いますが、<br />
まずは、自分で調べる力を身につけましょう。<br />
<br />
<br />
<strong>おまけ</strong><br />
以下のようなサイトで ActionScript について解説されています。<br />
<br />
<strong><a href="http://www.fumiononaka.com/">fumioNonaka.com</a></strong><br />
URL : http://www.fumiononaka.com/<br />
<br />
<strong><a href="http://hakuhin.hp.infoseek.co.jp/main/as.html">Flashゲーム講座 &amp; アクションスクリプトサンプル集</a></strong><br />
URL : http://hakuhin.hp.infoseek.co.jp/main/as.html<br />
<br />
<strong><a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20071025/285488/">IT Pro 「Flash CS3入門　基本からActionScriptまで」</a></strong><br />
URL : http://itpro.nikkeibp.co.jp/article/COLUMN/20071025/285488/<br />
<br />
<strong><a href="http://1art.jp/">Flashの枝（FLASH・アニメーション・ActionScript1.0,2.0,3.0の学習サイト）</a></strong><br />
URL : http://1art.jp/<br />
<br />
<strong><a href="http://www.openspc2.org/reibun/QuickReferenceActionScript/index.html">ActionScript 逆引きクイックリファレンス</a></strong><br />
URL : http://www.openspc2.org/reibun/QuickReferenceActionScript/index.html<br />
<br />
<strong><a href="http://gihyo.jp/dev/serial/01/as3">gihyo.jp「ActionScript 3.0で始めるオブジェクト指向スクリプティング」</a></strong><br />
URL : http://gihyo.jp/dev/serial/01/as3<br />
<br />
<br />
ここで挙げた以外にも様々なサイトがありますので、いろいろ見てみるのもいいと思います。<br />

]]></description>
            <link>http://blog.seyself.com/2008/04/post_2008042417.html</link>
            <guid>http://blog.seyself.com/2008/04/post_2008042417.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">連載</category>
            
            
            <pubDate>Thu, 24 Apr 2008 17:38:25 +0900</pubDate>
        </item>
        
    </channel>
</rss>
