<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flash &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/flash/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 14 May 2013 01:22:38 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>FlashCS6+で生成したスプライトシートをjQueryでロードする実験（後編）</title>
		<link>https://blog.mach3.jp/2013/05/14/load-flash-sprite-with-jquery-02.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 14 May 2013 01:22:38 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Sprite]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3099</guid>

					<description><![CDATA[前編に引き続き、FlashCS6のスプライトシートをjQueryで処理するお話です。 処理をライブラリにまとめましたので、ご紹介します。 FlashSprite.js Flashspritejs by mach3 Ado [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2013/05/load-flash-sprite-with-jquery.html">前編</a>に引き続き、FlashCS6のスプライトシートをjQueryで処理するお話です。 処理をライブラリにまとめましたので、ご紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-xNwj9NkeFQs/UY_hqVz19JI/AAAAAAAACCQ/WNZ11DXGmtg/s400/20130513-00.png" alt="FlashCS6+で生成したスプライトシートをjQueryでロードする実験（後編）"/></figure>



<p></p>



<span id="more-3099"></span>



<h2 class="wp-block-heading">FlashSprite.js</h2>



<h3 class="wp-block-heading"><a href="http://mach3.github.io/flashspritejs/">Flashspritejs by mach3</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-kFIADlJY_kM/UZFMlLZzTJI/AAAAAAAACCw/da9hADPDiDA/s500/20130514-01.png" alt="Flashspritejs by mach3"/></figure>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Adobe Flash CS6+ で出力されたスプライトアニメーションシートを再生するjQueryベースのライブラリ。</p>
</blockquote>



<p>前回の処理に加えて停止や逆再生、各種設定やイベント発火等の機能を付け足した物です。 使い方は上記URLで概ねわかると思いますが、簡単にご紹介しておきます。</p>



<h2 class="wp-block-heading">簡単な使い方</h2>



<h3 class="wp-block-heading">1. FlashCS6+でスプライトシートを生成する</h3>



<p>FlashIDE上で、ステージに配置したアニメーションインスタンスを右クリックし、 コンテキストメニューから<em>「スプライトシートを生成」</em>を選択してダイアログを開きます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-rEkIabD4d0E/UY_f01DzSxI/AAAAAAAACB4/dfA1WWWMeeU/s498/20130513-02.png" alt="スプライトシートを生成"/></figure>



<p></p>



<p>データ形式は<em>「JSON-Array」</em>を選択し、<em>「書き出し」</em>を行います。 ステージ上でインスタンス名を付けておけばその名前でファイルが作成されます。</p>



<h3 class="wp-block-heading">2. 配置する</h3>



<p>画像ファイルとJSONファイルが出力されるので、任意の場所に保存しましょう。 今回はこんな感じにしてみます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>./<br />
  ├ data/<br />
  │ ├ sprite.json<br />
  │ └ sprite.png<br />
  └ index.html</p>
</blockquote>



<h3 class="wp-block-heading">3. ロードする</h3>



<p>jQueryとFlashSprite.jsを読み込んで、新しい要素を生成してスプライトアニメーションを初期化します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> myAnimation = $(<span class="hljs-string">"&lt;div&gt;"</span>);
        myAnimation.flashSprite({
                <span class="hljs-attr">src</span> : <span class="hljs-string">"data/sprite.json"</span>
        })
        .appendTo($(<span class="hljs-string">"body"</span>));
}());
</code></span></pre>


<p><strong>$.fn.flashSprite()</strong> にオプションを渡す事で初期化され、要素にロードされます。 デフォルトの設定では自動再生がオンになっているので、初期化した時点で再生がはじまります。</p>



<p>無事再生されましたか？</p>



<h2 class="wp-block-heading">イベントとメソッドを使ってみる</h2>



<p>イベントとメソッドを使う事でもう少し細かい処理をする事ができます。 下の例では、データロードの完了を待って、アニメーションを配置・フェードインさせています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> myAnimation = $(<span class="hljs-string">"&lt;div&gt;"</span>);

        <span class="hljs-comment">// JSONと画像がロードされると "flashSpriteReady" イベントが発火します</span>
        myAnimation.on(<span class="hljs-string">"flashSpriteReady"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                $(<span class="hljs-keyword">this</span>).hide()
                .appendTo($(<span class="hljs-string">"body"</span>))
                .flashSprite(<span class="hljs-string">"config"</span>, { <span class="hljs-attr">fps</span> : <span class="hljs-number">60</span> }) <span class="hljs-comment">// "config" メソッドで設定変更</span>
                .flashSprite(<span class="hljs-string">"play"</span>) <span class="hljs-comment">// "play" メソッドで再生</span>
                .fadeIn();
        });

        myAnimation.flashSprite({
                <span class="hljs-attr">src</span> : <span class="hljs-string">"data/sprite.json"</span>,
                <span class="hljs-attr">autoPlay</span> : <span class="hljs-literal">false</span>, <span class="hljs-comment">// 自動再生をオフに</span>
                <span class="hljs-attr">repeat</span> : <span class="hljs-literal">false</span> <span class="hljs-comment">// 繰り返し再生をオフに</span>
        });
}());
</code></span></pre>


<p>イベントには、ロード完了時に発火される <em>&#8220;flashSpriteReady&#8221;</em> の他に、 停止時の <em>&#8220;flashSrpiteEnd&#8221;</em>、フレーム毎に発火する <em>&#8220;flashSpriteEnterFrame&#8221;</em> が用意されています。</p>



<p>また、<em>jQuery.fn.flashSprite()</em> にメソッド名を文字列で渡すことでメソッドを呼び出す事ができます。 第二引数以降はそのメソッドに渡されます。</p>



<p>それぞれの詳細は<a href="http://mach3.github.com/flashspritejs">ドキュメント</a>をご参照ください。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>と、こんな感じで作ってみました。</p>



<p>実際のところ、機能豊富なCreateJSを利用すべき場面の方が多いと思いますが、 その為に大きなソースを追加で読み込まなければならないのも事実。</p>



<p>ただパラパラ漫画を再生する為だけに大仰な…と感じるようなケースなら、 こんな単機能のライブラリも使い道があるのかな、と思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FlashCS6+で生成したスプライトシートをjQueryでロードする実験（前編）</title>
		<link>https://blog.mach3.jp/2013/05/13/load-flash-sprite-with-jquery.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 13 May 2013 01:28:32 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Sprite]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3090</guid>

					<description><![CDATA[結構前の話ではありますが、FlashはCS6から、アニメーションを「スプライトシート」として書き出す機能が実装されています。 これはCreateJS等で簡単に再生出来る様になる便利な機能ですが、 今回はこのスプライトシー [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>結構前の話ではありますが、FlashはCS6から、アニメーションを「スプライトシート」として書き出す機能が実装されています。 これはCreateJS等で簡単に再生出来る様になる便利な機能ですが、 今回はこのスプライトシートをjQueryで再生してみようというお話です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-xNwj9NkeFQs/UY_hqVz19JI/AAAAAAAACCQ/WNZ11DXGmtg/w400-h150-no/20130513-00.png" alt="FlashCS6+で生成したスプライトシートをjQueryでロードする実験"/></figure>



<p></p>



<span id="more-3090"></span>



<h2 class="wp-block-heading">スプライトシートってなに</h2>



<p>スプライトシートは、CSSスプライトを利用したアニメーションテクニックです。 アニメーションの全フレームを一つの画像に並べて配置し、 要素の背景画像として埋め込んで background-position を変更していくことで パラパラ漫画のようなアニメーションを再生します。概要はこんな感じ。</p>



<p>一年程前、CS6が出るちょっとだけ前に似たような記事を書いたことがありました。</p>



<ul class="wp-block-list">
<li><a href="/2012/05/moviecrop-js.html">シンプルなスプライトアニメーションライブラリ 「MovieCrop.js」 | Mach3.laBlog</a></li>
</ul>



<p>上の記事はまだCS6が出る前だったので自力でスプライトシートを作成する前提のものですが、 せっかく出力する機能があるんだから利用させて頂こうという事で、今回の記事なわけです。</p>



<h3 class="wp-block-heading">CreateJSでやればよくない？</h3>



<p>その通りです。その方が効率的なのでそれでいいと思います。</p>



<p>今回の記事は、あまり多くの依存ライブラリを読み込みたくなかったり、 宗教上の理由や遺言、あるいは政治的外圧等でjQueryで処理せざるを得ないケースを想定したものです。 CreateJSでの利用の仕方については、おそらく多くの方が詳しい記事を書いてくださっているので、そちらをご参照ください。</p>



<h2 class="wp-block-heading">FlashCS6+でスプライトシートを生成する</h2>



<p>例えば、FlashCS6でアニメーションのムービークリップ等を作り、それをステージに設置します。 その設置されたインスタンスを右クリックすると、コンテキストメニューに「スプライトシートを生成」が表れます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-L2oEk1ZBi1M/UY_f0ddqmoI/AAAAAAAACB4/JCDGQgWdXIM/w500-h300-no/20130513-01.png" alt="コンテキストメニュー"/></figure>



<p></p>



<p>それを選択すると現れるのがこんなダイアログ。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-rEkIabD4d0E/UY_f01DzSxI/AAAAAAAACB4/dfA1WWWMeeU/w498-h383-no/20130513-02.png" alt="スプライトシートを生成"/></figure>



<p></p>



<p>ここから「書き出し」を行うと、画像とデータ形式で指定したデータが出力されます。 指定出来るデータはJSON、各種ゲームエンジンの形式、そしてCreateJSのeaseljs形式です。</p>



<p>今回は使いやすそうだった &#8220;JSON-Array&#8221; 形式を使用します。</p>



<h2 class="wp-block-heading">JSONデータの中身</h2>



<p>&#8220;JSON-Array&#8221; で出力されたJSONデータの中身はこのような構成になっています。</p>


<pre class="wp-block-code"><span><code class="hljs language-json">{
        <span class="hljs-attr">"frames"</span>: &#91;
                {
                        <span class="hljs-attr">"filename"</span>: <span class="hljs-string">"loading0000"</span>,
                        <span class="hljs-attr">"frame"</span>: {<span class="hljs-attr">"x"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"y"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"w"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">33</span>},
                        <span class="hljs-attr">"rotated"</span>: <span class="hljs-literal">false</span>,
                        <span class="hljs-attr">"trimmed"</span>: <span class="hljs-literal">false</span>,
                        <span class="hljs-attr">"spriteSourceSize"</span>: {<span class="hljs-attr">"x"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"y"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"w"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">33</span>},
                        <span class="hljs-attr">"sourceSize"</span>: {<span class="hljs-attr">"w"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">33</span>}
                }
                ,{
                        <span class="hljs-attr">"filename"</span>: <span class="hljs-string">"loading0001"</span>,
                        <span class="hljs-attr">"frame"</span>: {<span class="hljs-attr">"x"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"y"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"w"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">33</span>},
                        <span class="hljs-attr">"rotated"</span>: <span class="hljs-literal">false</span>,
                        <span class="hljs-attr">"trimmed"</span>: <span class="hljs-literal">false</span>,
                        <span class="hljs-attr">"spriteSourceSize"</span>: {<span class="hljs-attr">"x"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"y"</span>:<span class="hljs-number">0</span>,<span class="hljs-attr">"w"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">33</span>},
                        <span class="hljs-attr">"sourceSize"</span>: {<span class="hljs-attr">"w"</span>:<span class="hljs-number">33</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">33</span>}
                }

                ...

        ],
        <span class="hljs-attr">"meta"</span>: {
                <span class="hljs-attr">"app"</span>: <span class="hljs-string">"Adobe Flash CS6"</span>,
                <span class="hljs-attr">"version"</span>: <span class="hljs-string">"12.0.0.481"</span>,
                <span class="hljs-attr">"image"</span>: <span class="hljs-string">"sample.png"</span>,
                <span class="hljs-attr">"format"</span>: <span class="hljs-string">"RGBA8888"</span>,
                <span class="hljs-attr">"size"</span>: {<span class="hljs-attr">"w"</span>:<span class="hljs-number">256</span>,<span class="hljs-attr">"h"</span>:<span class="hljs-number">256</span>},
                <span class="hljs-attr">"scale"</span>: <span class="hljs-string">"1"</span>
        }
}
</code></span></pre>


<p>&#8220;frames&#8221; が実際のアニメーションのデータで、配列の中に個々のフレームの情報（サイズや座標等）を格納したオブジェクトが並んでいます。</p>



<p>&#8220;meta&#8221; にはスプライトシートの基本情報が格納されています。</p>



<h3 class="wp-block-heading">このデータから再生するには…</h3>



<p>アニメーションを再生するには、&#8221;frames&#8221;内のインデックスをひとつずつ進めてやり、格納されている座標情報を元に背景画像を移動してやる要領でしょうか。 座標は画像の左上からの座標なので、これを background-position に適用する際はマイナスの数値にしてやる必要がありますね。</p>



<h2 class="wp-block-heading">再生させてみよう</h2>



<p>では早速このデータを元にアニメーションを設置し、再生させてみましょう。 JSONデータも画像データもHTMLと同じディレクトリにある想定で進めます。</p>



<h3 class="wp-block-heading">JSONを読み込む</h3>



<p>まずJSONデータを読み込みます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$</span>)</span>{

    $.getJSON(<span class="hljs-string">"sample.json"</span>)
    .then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data, status</span>)</span>{
            <span class="hljs-keyword">var</span> my = {};

            my.data = data;

            <span class="hljs-comment">// この中でいろいろしよう</span>
    });

}(jQuery));
</code></span></pre>


<h3 class="wp-block-heading">アニメーションの要素を生成、配置する</h3>



<p>受け取ったJSONのデータの内容から、アニメーション用のHTML要素を生成し、bodyに配置します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">my.node = $(<span class="hljs-string">"&lt;div&gt;"</span>).css({
    <span class="hljs-string">"width"</span> : my.data.frames&#91;<span class="hljs-number">0</span>].sourceSize.w,
    <span class="hljs-string">"height"</span> : my.data.frames&#91;<span class="hljs-number">0</span>].sourceSize.h,
    <span class="hljs-string">"background-image"</span> : <span class="hljs-string">"url("</span> + my.data.meta.image + <span class="hljs-string">")"</span>
})
.appendTo($(<span class="hljs-string">"body"</span>));
</code></span></pre>


<p>要素のサイズははじめのフレームの &#8220;sourceSize&#8221; から取得することにします。</p>



<p>画像は、前述の通り同じディレクトリで展開する想定なのでそのまま代入していますが、<br />
恐らく運用時は他のディレクトリに入れると思うので、その時はその時で画像へのパスをなんやかんやする必要がありますね。</p>



<h3 class="wp-block-heading">再生する</h3>



<p>今回は、単純に setTimeout で再生用の関数をぶん回して繰り返し再生を行います。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">my.index = <span class="hljs-number">0</span>; <span class="hljs-comment">// 現在のフレームインデックス</span>
my.length = my.data.frames.length; <span class="hljs-comment">// 合計フレーム数</span>
my.interval = <span class="hljs-built_in">Math</span>.floor(<span class="hljs-number">1000</span>/<span class="hljs-number">30</span>); <span class="hljs-comment">// 約FPS30ぐらいで再生</span>

my.play = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> frame;

    my.index = (my.index + <span class="hljs-number">1</span>) % (my.length - <span class="hljs-number">1</span>);
    frame = my.data.frames&#91;my.index].frame;
    my.node.css(
            <span class="hljs-string">"background-position"</span>,
            <span class="hljs-string">"-"</span> + frame.x + <span class="hljs-string">"px -"</span> + frame.y + <span class="hljs-string">"px"</span>
    );
    setTimeout(my.play, my.interval);
};

my.play();
</code></span></pre>


<p>他にも、ページのスクロール位置やマウスの挙動などをトリガーにしたりすると表現の幅が広がりますね。</p>



<h3 class="wp-block-heading">全体のコード</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$</span>)</span>{

    $.getJSON(<span class="hljs-string">"sample.json"</span>)
    .then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data, status</span>)</span>{

        <span class="hljs-keyword">var</span> my = {};

        my.data = data;

        my.node = $(<span class="hljs-string">"&lt;div&gt;"</span>).css({
            <span class="hljs-string">"width"</span> : my.data.frames&#91;<span class="hljs-number">0</span>].sourceSize.w,
            <span class="hljs-string">"height"</span> : my.data.frames&#91;<span class="hljs-number">0</span>].sourceSize.h,
            <span class="hljs-string">"background-image"</span> : <span class="hljs-string">"url("</span> + my.data.meta.image + <span class="hljs-string">")"</span>
        })
        .appendTo($(<span class="hljs-string">"body"</span>));

        my.index = <span class="hljs-number">0</span>;
        my.length = my.data.frames.length;
        my.interval = <span class="hljs-built_in">Math</span>.floor(<span class="hljs-number">1000</span>/<span class="hljs-number">30</span>);

        my.play = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">var</span> frame;

            my.index = (my.index + <span class="hljs-number">1</span>) % (my.length - <span class="hljs-number">1</span>);
            frame = my.data.frames&#91;my.index].frame;
            my.node.css(
                    <span class="hljs-string">"background-position"</span>,
                    <span class="hljs-string">"-"</span> + frame.x + <span class="hljs-string">"px -"</span> + frame.y + <span class="hljs-string">"px"</span>
            );
            setTimeout(my.play, my.interval);
        };
        my.play();
    });
}(jQuery));
</code></span></pre>


<h2 class="wp-block-heading">めんどくさい！</h2>



<p>勿論毎度これは面倒なので、ライブラリ化してみましたが、それは後編で。</p>



<p>» <a href="https://blog.mach3.jp/2013/05/load-flash-sprite-with-jquery-02.html">FlashCS6+で生成したスプライトシートをjQueryでロードする実験（後編） | Mach3.laBlog</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JavaScriptでAS風のEnterFrameの実装を考えてみる</title>
		<link>https://blog.mach3.jp/2010/11/09/js-enterframe-like-as.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 09 Nov 2010 02:44:18 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jsdoit]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1068</guid>

					<description><![CDATA[jQueryのアニメーション機能はあまりにも便利ですが、 刻々と位置情報などを更新していくタイプの処理には向いていません。 こういうのが得意なのは、例えばASにおけるEnterFrameイベントなのですが、 似たような実 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>jQueryのアニメーション機能はあまりにも便利ですが、<br />
刻々と位置情報などを更新していくタイプの処理には向いていません。<br />
こういうのが得意なのは、例えばASにおけるEnterFrameイベントなのですが、<br />
似たような実装をJavaScriptで出来ないだろうか、というのが今回の趣旨です。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TNi0gYIE9NI/AAAAAAAABFU/aHSbRQxDMUM/201011091137.png" alt="EnterFrame on JavaScript"/></figure>



<p></p>



<span id="more-1068"></span>



<h2 class="wp-block-heading">生のsetInterval/setTimeoutでいいんじゃない？</h2>



<p>ごもっとも。そんなに複雑にはなりませんしね。<br />
ただ、もうちょっと直感的に扱いたかったり、管理し易いクラスが欲しかった。<br />
さらに強いて言えば、「書いてみたかった」のです。</p>



<p>以下に、2通りのパターンをライブラリにしてみました。<br />
さりげなくjsdo.itデビューも果たしてみましたよ！</p>



<p>※いずれもjQueryを使用</p>



<h2 class="wp-block-heading">Timeline.js</h2>



<p>jQueryのbind/triggerを使ってイベントを拾っていくタイプです。<br />
AS3のaddEventListenerに最も近くて馴染み易いのではないでしょうか。<br />
…相変わらずコメントのほうが長い！</p>



<dl>
<dt>Source</dt>
<dd><a href="https://github.com/mach3/js-timeline-enterframe/blob/master/timeline.js">timeline.js at master from mach3&#8217;s js-timeline-enterframe &#8211; GitHub</a></dd>
<dt>Demo</dt>
<dd><a href="http://jsdo.it/mach3/wvRl">JavaScriptでEnterFrame：(1) Timeline.js &#8211; jsdo.it</a></dd>
</dl>



<h3 class="wp-block-heading">使い方</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> tl = <span class="hljs-keyword">new</span> Timeline( <span class="hljs-number">30</span> ); <span class="hljs-comment">// 引数はfps</span>
tl.bind( <span class="hljs-string">"enterFrame"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">/* do something */</span> } );
tl.start(); <span class="hljs-comment">// タイムライン開始</span>
</code></span></pre>


<p>コンストラクタの引数は省略可能。FPSの初期値は30です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> func = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">/* do something */</span> };
tl.bind( tl.EVENT_ENTER_FRAME, func ); <span class="hljs-comment">// イベントリスナの追加</span>
tl.unbind( tl.EVENT_ENTER_FRAME, func ); <span class="hljs-comment">// イベントリスナの削除</span>
</code></span></pre>


<p>イベントリスナを削除したい時用に、unbindのwrapperも用意してございます。<br />
また、イベント名（enterFrame）は定数<em>EVENT_ENTER_FRAME</em>に格納してあります。</p>



<h2 class="wp-block-heading">EnterFrame.js</h2>



<p>こちらはもう少し簡略化したタイプで、わざわざjQueryのbind/triggerを介しません。<br />
若干のパフォーマンス向上が見込めるのではないかと予想。<br />
ただ、ActionScriptの実装とはだいぶかけ離れてしまった…</p>



<dl>
<dt>Source</dt>
<dd><a href="https://github.com/mach3/js-timeline-enterframe/blob/master/enterframe.js">enterframe.js at master from mach3&#8217;s js-timeline-enterframe &#8211; GitHub</a></dd>
<dt>Demo</dt>
<dd><a href="http://jsdo.it/mach3/9pRA">JavaScriptでEnterFrame：(2) EnterFrame.js &#8211; jsdo.it</a></dd>
</dl>



<h3 class="wp-block-heading">使い方</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> ef = <span class="hljs-keyword">new</span> EnterFrame( <span class="hljs-number">30</span> ); <span class="hljs-comment">// インスタンス生成</span>
ef.add( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">/* do something */</span> });
ef.start();
</code></span></pre>


<p>addメソッドでイベントリスナを追加。その他はTimelineと同様です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> func = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">/* do something */</span> } );
ef.add( func ); <span class="hljs-comment">// イベントリスナの追加</span>
ef.remove( func ); <span class="hljs-comment">// イベントリスナの削除</span>
</code></span></pre>


<p>削除にはremoveメソッドを使用します。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>画面いっぱい使ってヌルヌル動くギャラリーなんかは、<br />
いがいと作り易いかもしれないですね。</p>



<h2 class="wp-block-heading">追記 : 2013/10/13</h2>



<p>今なら requestAnimationFrameとかもあるので、setTimeout等を使うより<br />
こちらがある場合は利用した方がよさそうですね。<br />
そのうち記事になると思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>備忘録： Flashライブラリ内のビットマップを表示しようとして困った （～CS4）</title>
		<link>https://blog.mach3.jp/2010/08/04/display-bitmap-in-flashlibrary.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 04 Aug 2010 21:49:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/08/04/%e5%82%99%e5%bf%98%e9%8c%b2%ef%bc%9a-flash%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e5%86%85%e3%81%ae%e3%83%93%e3%83%83%e3%83%88%e3%83%9e%e3%83%83%e3%83%97%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%97.html</guid>

					<description><![CDATA[タイトルの通りですが、ちょっとつまづいたポイントがあったのでメモ。 Flashの「ライブラリ」に登録したビットマップデータの表示の仕方です。 そんなに頻繁にやる事ではなさそうですが…。 リンケージを設定 まずライブラリ内 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>タイトルの通りですが、ちょっとつまづいたポイントがあったのでメモ。<br />
Flashの「ライブラリ」に登録したビットマップデータの表示の仕方です。<br />
そんなに頻繁にやる事ではなさそうですが…。</p>



<span id="more-2254"></span>



<h2 class="wp-block-heading">リンケージを設定</h2>



<p>まずライブラリ内でリンケージを設定します。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TFlftVVmqOI/AAAAAAAAA_o/qOEPN-x0UI4/s800/201008042139.png" alt="リンケージの設定"/></figure>



<p></p>



<p>お好きなクラス名を入力。<br />
基本クラスは自動的にBitmapDataに設定されます。</p>



<h2 class="wp-block-heading">クラス化→配置</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> cls:Class = getDefinitionByName(<span class="hljs-string">"MyImage"</span>) <span class="hljs-keyword">as</span> Class;
addChild( <span class="hljs-keyword">new</span> Bitmap( <span class="hljs-keyword">new</span> cls() ) );
</code></span></pre>


<p>ライブラリにあるクラスを呼び出すには<a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/utils/package.html#getDefinitionByName()">getDefinitionByName</a>を使います。<br />
MyImageはBitmapDataを継承しているので、<br />
Bitmapのコンストラクタにぶん投げてステージに配置します。</p>



<h2 class="wp-block-heading">FlashCS4以下ではエラーになる</h2>



<p>ここで困った事に、CS3でパブリッシュ中に下記のエラーが表示されました。<br />
（後述のリンク先に記載されてますが、CS4迄は同じ症状のようです。）</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>myimage$iinit() の引数の数が一致していません。2 が必要ですが、0 が指定されました。</p>
</blockquote>



<p>どうやらコンストラクタに引数を二つ渡さなければならない様子。<br />
継承元のBitmapDataにあわせてwidth/heightを渡すのかな？と思いましたが<br />
それだとスクリプト上で一々画像の縦横サイズを記述しておかなければならない。<br />
これは、大変美しくない。</p>



<p>が、調べている内に余計な心配だったことが発覚しました。</p>



<p><a href="http://www.fumiononaka.com/TechNotes/Flash/FN1005003.html">N1005003 &#8211; [ライブラリ]のビットマップに自動設定したクラスに渡す引数 &#8211; Flash : テクニカルノート</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>ふたつの引数というのはインスタンスの幅と高さです。これは、「自動生成された」クラスの継承するBitmapDataクラスのコンストラクタメソッドが、同じふたつの引数を必須としていることに対応していると考えられます。もっとも、その数値は実際のビットマップの幅と高さでなくて構いません。引数にどんな数値を指定しようが、結果として値はビットマップの実際の幅と高さになます[*1]。また、後から変えられません(読取り専用)。したがって、引数には0をふたつ渡せば結構です。</p>
</blockquote>



<p>つまり、引数に何を突っ込もうが<br />
ちゃんと画像サイズはオリジナルの物が使用されるという事ですね。安心。<br />
したがって引数には適当な物をつっこんでおきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> cls:Class = getDefinitionByName(<span class="hljs-string">"MyImage"</span>) <span class="hljs-keyword">as</span> Class;
addChild( <span class="hljs-keyword">new</span> Bitmap( <span class="hljs-keyword">new</span> cls( <span class="hljs-number">0</span>, <span class="hljs-number">0</span> ) ) );
</code></span></pre>


<p>尚、引数の型には縛りがないようで、<br />
文字列や配列等いろいろ突っ込んでみましたが正常に動作します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">addChild( <span class="hljs-keyword">new</span> Bitmap( <span class="hljs-keyword">new</span> cls( <span class="hljs-string">"しごと"</span>, <span class="hljs-string">"めんどい"</span> ) ) );
</code></span></pre>


<p>お好みで彩りを添えてあげてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>HTML5を簡潔にまとめたインフォグラフィック＋Flashの行方</title>
		<link>https://blog.mach3.jp/2010/06/18/infographic-html5-and-flash.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 18 Jun 2010 02:10:00 +0000</pubDate>
				<category><![CDATA[Monologue]]></category>
		<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Infographic]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/06/18/html5%e3%82%92%e7%b0%a1%e6%bd%94%e3%81%ab%e3%81%be%e3%81%a8%e3%82%81%e3%81%9f%e3%82%a4%e3%83%b3%e3%83%95%e3%82%a9%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3%e3%83%83%e3%82%af%ef%bc%8bflash%e3%81%ae%e8%a1%8c.html</guid>

					<description><![CDATA[「HTML5」をまとめた素晴らしいインフォグラフィックが公開されていました。 重要な新要素や、各ブラウザのサポート状況も簡潔に紹介されています。 WTF is HTML5 (Infographic) ちびっと文字が小さい [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「HTML5」をまとめた素晴らしいインフォグラフィックが公開されていました。<br />
重要な新要素や、各ブラウザのサポート状況も簡潔に紹介されています。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TBpWIMx3NZI/AAAAAAAAA8Y/H3DW0JsAQDg/s800/201006180205.png" alt="WTF is HTML5"/></figure>



<p></p>



<span id="more-22"></span>



<p><a href="http://www.focus.com/images/view/11905/">WTF is HTML5 (Infographic)</a><br />
<a href="http://www.focus.com/images/view/11905/"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TBpWIKWcpWI/AAAAAAAAA8c/6UKoyvajMs0/s800/201006180206.png" alt="WTF is HTML5"></a></p>



<p>ちびっと文字が小さいですが、わかりやすくまとまっていますね。<br />
HTML5を独習する際の目安としても使えそうです。</p>



<p>さて気になるのは下段のFlashに関する項ですが…</p>



<h2 class="wp-block-heading">FlashとHTML、Webを席巻するのはどちらか？</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>HTML5 VS. FLASH. WHO WILL OWN THE WEB&#8217;S INTERACTIVE FUTURE ?</p>
</blockquote>



<p>このインフォグラフィックでは、FlashとHTML5を4つの要素で比較しています。</p>



<ul class="wp-block-list">
<li>どちらが安いか</li>



<li>どちらがパワフルか</li>



<li>どちらがより広く受け入れられるか</li>



<li>どちらが有能か</li>
</ul>



<p>結果は画像を見ての通りですが、「どちらが安いか」については…</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Flash Playerはフリーだが、Adobe製の開発環境は非常に高価だ。HTML5は開発者にとっても無料だ。</p>
</blockquote>



<p>確かにFlashIDEもFlashBuilder(Flex)も製品を購入すると高価ですが、<br />
FlashにはオープンソースのFlexSDKがあります。<br />
<a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK">Flex SDK &#8211; Flex SDK &#8211; Adobe Open Source</a><br />
高価な統合環境を使用しない前提でHTML5と比較するのであれば、<br />
こちらと比較したほうがフェアな気はしますね。</p>



<p>最後は次のように締めくくっています。超訳。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>これらのチョイスは排他的ではなく、場合によって、開発者は両方ともに使用する。<br />
  長い目でみれば、HTML5が要求に叶う選択になるだろう。</p>
</blockquote>



<p>要は、当面の間は適材適所だという事です。</p>



<h2 class="wp-block-heading">私見</h2>



<p>開発者にとっては、インタラクティブなWebアプリを作るにあたって<br />
まだまだFlashに軍配があがるのではないでしょうか。<br />
HTML5にはFlashのような優れた開発環境がまだ無いからです。</p>



<p>ただ、遅かれ早かれFlashIDEは、HTML5+CSS3+JSで<br />
プロジェクトの書き出しが出来るようになるのではと予想しています。<br />
ASとJSは親戚ですし、Flashの得意なベクターもSVGで解決出来ます。<br />
相性は非常に良いでしょう。</p>



<p>既にちょっと違った方法でswf→HTML5を実現してしまっているライブラリも存在しますね。<br />
<a href="http://smokescreen.us/">Smokescreen</a></p>



<p>問題はAdobeがその後FlashPlayerをどうするのか。<br />
それまでの間に、HTML5ではとても実現出来ないような素晴らしい表現が可能になるか、<br />
そうでなければFlashPlayerはHTML5が表示出来ない、<br />
古い環境の面倒を見る為の存在になってしまいかねません。</p>



<p>AdobeとしてはFlashが売れればそれでよさそうな気もしますが、<br />
1ファンとして、Flashの底力をまだまだ見てみたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AS3実験室: SimpleButtonクラスをトグル出来るように拡張した「SimpleToggleButton」</title>
		<link>https://blog.mach3.jp/2010/05/24/as3-simpletogglebutton.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 24 May 2010 00:20:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SimpleButton]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/24/as3%e5%ae%9f%e9%a8%93%e5%ae%a4-simplebutton%e3%82%af%e3%83%a9%e3%82%b9%e3%82%92%e3%83%88%e3%82%b0%e3%83%ab%e5%87%ba%e6%9d%a5%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e6%8b%a1%e5%bc%b5%e3%81%97%e3%81%9f.html</guid>

					<description><![CDATA[AS3実験室: 画像を読み込んでボタンにする～SimpleButtonの巻 AS3実験室: 画像を読み込んでボタンにするに続いて、 もういい加減にしなさいというテーマですが、書いてみちゃいました。 今回は、SimpleB [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2010/05/as3-simplebutton-with-bitmap.html">AS3実験室: 画像を読み込んでボタンにする～SimpleButtonの巻</a><br />
<a href="/2010/05/as3-bitmapbutton.html">AS3実験室: 画像を読み込んでボタンにする</a>に続いて、<br />
もういい加減にしなさいというテーマですが、書いてみちゃいました。<br />
今回は、SimpleButtonクラスを拡張してselectedプロパティを追加してトグル出来るようにしました。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/S_lHhjin2OI/AAAAAAAAA6c/LrhVY9HeUuY/s800/201005232315.png" alt="SimpleToggleButton"/></figure>



<p></p>



<span id="more-33"></span>



<p><a href="https://docs.google.com/uc?id=0B7k6jIWYcmkLYmVmMzBhNjktNjcxYi00MTg3LWExNDUtZjY0NGRjNjVmMDk3&amp;export=download&amp;hl=ja">Download : simpletogglebutton.as3.zip</a></p>



<p>大した行数はないので貼りつけておきます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">package jp.mach3.ui
{
    import flash.display.DisplayObject;
    import flash.display.SimpleButton;

    <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SimpleToggleButton</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">SimpleButton</span>
    </span>{
        <span class="hljs-keyword">private</span> <span class="hljs-keyword">var</span> _upState:DisplayObject;
        <span class="hljs-keyword">private</span> <span class="hljs-keyword">var</span> _selectedState:DisplayObject;
        <span class="hljs-keyword">private</span> <span class="hljs-keyword">var</span> _selected:Boolean = <span class="hljs-keyword">false</span>;

        <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">SimpleToggleButton</span><span class="hljs-params">( upState:DisplayObject = null,
        overState:DisplayObject = null, downState:DisplayObject = null,
        hitTestState:DisplayObject = null, selectedState:DisplayObject = null )</span>
        </span>{
            super(upState, overState, downState, hitTestState);
            _selectedState = selectedState;
            render();
        }

        <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">render</span><span class="hljs-params">(n:* = null)</span>:<span class="hljs-title">void</span>
        </span>{
            _upState = upState;
        }

        <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">set</span> <span class="hljs-title">selected</span><span class="hljs-params">( selected:Boolean )</span>:<span class="hljs-title">void</span>
        </span>{
            <span class="hljs-keyword">if</span> (selected) {
                upState = _selectedState;
                mouseEnabled = <span class="hljs-keyword">false</span>;
            } <span class="hljs-keyword">else</span> {
                upState = _upState;
                mouseEnabled = <span class="hljs-keyword">true</span>;
            }
            _selected = selected;
        }

        <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">get</span> <span class="hljs-title">selected</span><span class="hljs-params">()</span>:<span class="hljs-title">Boolean</span>
        </span>{
            <span class="hljs-keyword">return</span> _selected;
        }

        <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">set</span> <span class="hljs-title">selectedState</span><span class="hljs-params">( selectedState:DisplayObject )</span>:<span class="hljs-title">void</span>
        </span>{
            _selectedState = selectedState;
        }

        <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">get</span> <span class="hljs-title">selectedState</span><span class="hljs-params">()</span>:<span class="hljs-title">DisplayObject</span>
        </span>{
            <span class="hljs-keyword">return</span> _selectedState;
        }

    }
}
</code></span></pre>


<h2 class="wp-block-heading">SimpleButtonと違う点</h2>



<p><a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/SimpleButton.html">SimpleButton &#8211; ActionScript 3.0 コンポーネントリファレンスガイド</a><br />
基本的な使い方はSimpleButtonと同じですが、<br />
SimpleToggleButtonクラスには以下の二つのメンバが追加されています。</p>



<dl>
<dt>selectedState : DisplayObject</dt>
<dd>選択状態を表示する為のDisplayObjectを、upStateやoverState等と同様に設定します。</dd>
<dt>selected : Boolean</dt>
<dd>トグルに使用するBool値。trueにする事でselectedStateが表示され、マウスイベントが効かなくなります。falseにすると元に戻ります。</dd>
<dt>render()</dt>
<dd>コンストラクタではなく、プロパティアクセスでDisplayObjectを設定した場合に、これを呼ぶ必要があります。苦し紛れのメソッド。後述。</dd>
</dl>



<p>また、コンストラクタの引数が一つ追加されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">SimpleToggleButton( upState:DisplayObject = <span class="hljs-literal">null</span>, <span class="hljs-attr">overState</span>:DisplayObject = <span class="hljs-literal">null</span>, <span class="hljs-attr">downState</span>:DisplayObject = <span class="hljs-literal">null</span>, <span class="hljs-attr">hitTestState</span>:DisplayObject = <span class="hljs-literal">null</span>, <span class="hljs-attr">selectedState</span>:DisplayObject = <span class="hljs-literal">null</span> )
</code></span></pre>


<dl>
<dt>selectedState</dt>
<dd>選択状態のDisplayObjectを格納します。</dd>
</dl>



<h2 class="wp-block-heading">簡単な使い方(1)</h2>



<p>myUpState、myOverState、myDownState、myHitTestState、mySelectedStateには<br />
それぞれの状態に使用するDisplayObjectが格納されていると想定します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">var</span> myButton:SimpleToggleButton = <span class="hljs-keyword">new</span> SimpleToggleButton();

myButton.upState = myUpState;
myButton.overState = myOverState
myButton.downState = myDownState;
myButton.hitTestState = myHitTestState;
myButton.selectedState = mySelectedState;
myButton.render(); <span class="hljs-comment">// Don't miss it !</span>

addChild( myButton );
</code></span></pre>


<p>選択状態にトグルする場合は、プロパティアクセスでselectedをtrueにします。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">myButton.selected = <span class="hljs-literal">true</span>;
</code></span></pre>


<h2 class="wp-block-heading">簡単な使い方(2)</h2>



<p>SimpleButton同様、プロパティアクセスでDisplayObjectを設定する事も出来ますが、<br />
その場合、格納し終えた後にrender()を呼ぶ必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">var</span> myButton:SimpleToggleButton = <span class="hljs-keyword">new</span> SimpleToggleButton();

myButton.upState = myUpState;
myButton.overState = myOverState
myButton.downState = myDownState;
myButton.hitTestState = myHitTestState;
myButton.selectedState = mySelectedState;
myButton.render(); <span class="hljs-comment">// Don't miss it !</span>

addChild( myButton );
</code></span></pre>


<p>render()は、upStateをプライベートメンバの_upStateにコピーするだけのメソッドです。<br />
このクラスは、upStateをselectedStateで上書きする事でトグルを実現しているので<br />
この処理がないとselectedが再びtrueにされた場合に表示するためのDisplayObjectが見つからなくなります。</p>



<p>本来であれば、upStateのセッターで記述すべきものなのですが…<br />
元祖SimpleButtonのupStateが内部でどのように処理されているかがわからなかった為、<br />
このようなスマートではない方法を取ることになりました。</p>



<p>もっと良い方法はないだろうか…<br />
（え、まだつづくの！？）</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AS3備忘録: 設定用のXMLファイルへのパスをflashvarsで指定する</title>
		<link>https://blog.mach3.jp/2010/05/16/as3-xml-on-flashvars.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 16 May 2010 23:58:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/16/as3%e5%82%99%e5%bf%98%e9%8c%b2-%e8%a8%ad%e5%ae%9a%e7%94%a8%e3%81%aexml%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%b8%e3%81%ae%e3%83%91%e3%82%b9%e3%82%92flashvars%e3%81%a7%e6%8c%87%e5%ae%9a%e3%81%99.html</guid>

					<description><![CDATA[先日取引先から、納品したFlashについて問い合わせがありまして、 「設定用のXMLファイルの場所をswfと一緒に移動したら動かなくなった」とのこと。 XMLファイルへのパスをスタティックに指定してしまうと、 こういう事 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日取引先から、納品したFlashについて問い合わせがありまして、<br />
<em>「設定用のXMLファイルの場所をswfと一緒に移動したら動かなくなった」</em>とのこと。</p>



<p>XMLファイルへのパスをスタティックに指定してしまうと、<br />
こういう事態に対処出来なくなり、メンテナンス性を欠くのでは？<br />
という事でflashvarsでXMLファイルへのパスを渡す方式にして解決しました。</p>



<span id="more-37"></span>



<p>こんな感じでflashvarsは渡してあげます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"flashvars"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"xmlpath=/the/path/to/"</span> /&gt;</span>
</code></span></pre>


<p>AS3で受け取ります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Main</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">MovieClip</span></span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Main</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">var</span> xmlpath = loaderInfo.parameters&#91;<span class="hljs-string">"xmlpath"</span>];
        <span class="hljs-keyword">var</span> ul:URLLoader = <span class="hljs-keyword">new</span> URLLoader;
        ul.addEventListener(Event.COMPLETE, onXmlLoaded);
        ul.load( <span class="hljs-keyword">new</span> URLRequest( xmlpath + <span class="hljs-string">"config.xml"</span> ) );
    }
    <span class="hljs-keyword">private</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onXmlLoaded</span><span class="hljs-params">(e:Event)</span>:<span class="hljs-title">void</span></span>{
        <span class="hljs-comment">// do something</span>
    }
}
</code></span></pre>


<p>モノによってはそうすべきではないケースもあるかもしれませんが、<br />
お客さんが直接手作業で更新するようなローテーションバナー等は<br />
こういう仕様にしてあげたほうが安心ですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AS3実験室: 画像を読み込んでボタンにする～SimpleButtonの巻</title>
		<link>https://blog.mach3.jp/2010/05/03/as3-simplebutton-with-bitmap.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 03 May 2010 21:56:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SimpleButton]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/03/as3%e5%ae%9f%e9%a8%93%e5%ae%a4-%e7%94%bb%e5%83%8f%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%93%e3%81%a7%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ab%e3%81%99%e3%82%8b%ef%bd%9esimplebutton%e3%81%ae%e5%b7%bb.html</guid>

					<description><![CDATA[AS3実験室: 画像を読み込んでボタンにするを書いたあとに気付いたのですが、 SimpleButtonという便利なクラスが存在しておりまして、 これを使った方がより簡単にボタン化出来るので、フォローとしてログっておきます [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2010/05/as3-bitmapbutton.html">AS3実験室: 画像を読み込んでボタンにする</a>を書いたあとに気付いたのですが、<br />
SimpleButtonという便利なクラスが存在しておりまして、<br />
これを使った方がより簡単にボタン化出来るので、フォローとしてログっておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/S97GN4U-B4I/AAAAAAAAA4A/kJzsGboyxdg/s800/201005032149.png" alt="SimpleButton"/></figure>



<p></p>



<span id="more-44"></span>



<p>途中までは前記事と似たような処理なのでちょっと割愛してるところもあるのでご注意。</p>



<h2 class="wp-block-heading">1. 画像の読み込み</h2>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">private</span> <span class="hljs-keyword">var</span> bl:BulkLoader = <span class="hljs-keyword">new</span> BulkLoader(<span class="hljs-string">"imageloader"</span>);

<span class="hljs-comment">/* 中略 */</span>

bl.add( <span class="hljs-string">"images/button_normal.png"</span> );
bl.add( <span class="hljs-string">"images/button_over.png"</span> );
bl.add( <span class="hljs-string">"images/button_down.png"</span> );
bl.addEventListener( BulkProgressEvent.COMPLETE, initialize );
bl.start();
</code></span></pre>


<h2 class="wp-block-heading">2. SimpleButtonをつくる</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> btn:SimpleButton = <span class="hljs-keyword">new</span> SimpleButton(
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_normal.png"</span>)),
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_over.png"</span>)),
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_down.png"</span>)),
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_normal.png"</span>))
);
addChild(btn);
</code></span></pre>


<p><a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/SimpleButton.html">SimpleButton &#8211; ActionScript 3.0</a></p>



<p>使い方は上記リンク参照。余計なもの（!?）をimportしなくていい分心地よいです。</p>



<p>ただし、このままでは<a href="/2010/05/as3-bitmapbutton.html">BitmapButton</a>にはあった「選択時」の状態が使用できません。<br />
この点は今頭を悩ましているところですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2010/05/17</dt>
<dd>さすがに端折りすぎたのでコードを追記</dd>
<dt>2010/05/24</dt>
<dd>フォロー記事書きました。<br />
<a href="/2010/05/as3-simpletogglebutton.html">AS3実験室: SimpleButtonクラスをトグル出来るように拡張した「SimpleToggleButton」</a></dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AS3実験室: 画像を読み込んでボタンにする</title>
		<link>https://blog.mach3.jp/2010/05/02/as3-bitmapbutton.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 02 May 2010 02:34:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SimpleButton]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/02/as3%e5%ae%9f%e9%a8%93%e5%ae%a4-%e7%94%bb%e5%83%8f%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%93%e3%81%a7%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ab%e3%81%99%e3%82%8b.html</guid>

					<description><![CDATA[これも意外と頻出する処理ではないでしょうか。 読み込んだビットマップデータをボタン化する処理を、面倒なのでクラス化してみました。 BitmapButton Download : BitmapButton パブリック プロ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>これも意外と頻出する処理ではないでしょうか。<br />
読み込んだビットマップデータをボタン化する処理を、面倒なのでクラス化してみました。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/S9xgPZSz5aI/AAAAAAAAA34/nVejL_S7M5E/s800/201005020105.png" alt="BitmapButton"/></figure>



<p></p>



<span id="more-45"></span>



<h2 class="wp-block-heading">BitmapButton</h2>



<p><a href="https://docs.google.com/uc?id=0B7k6jIWYcmkLMGViNTBmYWEtY2UwMC00NmJiLTk4NjctYjk4Y2VhM2Y0OTRm&amp;export=download&amp;hl=ja">Download : BitmapButton</a></p>



<h3 class="wp-block-heading">パブリック プロパティ</h3>



<dl>
<dt>hitRect : Rectangle = null</dt>
<dd>ヒット領域をRectangleで設定。 nullの場合は画像にあわせたヒット領域になります。</dd>
<dt>selected : Boolean = false</dt>
<dd>ボタンの選択状態を示すBoolean値。</dd>
</dl>



<h3 class="wp-block-heading">パブリック メソッド</h3>



<dl>
<dt>render() : void</dt>
<dd>setImagesで渡されたBitmapDataを元にボタンを生成します。</dd>
<dt>setImages( _config : Object ) : void</dt>
<dd>normalImage（通常時）、overImage（マウスオーバー時）、downImage（マウスダウン時）、selectedImage（選択時）の画像をBitmapDataで格納したオブジェクトを渡します。</dd>
</dl>



<h2 class="wp-block-heading">簡単な使い方</h2>



<p>インポートをお忘れなく。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">import</span> <span class="hljs-selector-tag">jp</span><span class="hljs-selector-class">.mach3</span><span class="hljs-selector-class">.ui</span><span class="hljs-selector-class">.BitmapButton</span>
</code></span></pre>


<h3 class="wp-block-heading">1. 画像の用意</h3>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/S9xgPSD3G5I/AAAAAAAAA38/I4Amwnf9qek/s800/201005020107.png" alt="各ステータス画像の用意"/></figure>



<p></p>



<p>こんな感じで画像を用意しましょう。</p>



<h3 class="wp-block-heading">2. 画像の読み込み</h3>



<p><a href="/2010/04/as3-bulkloader.html">以前記事で紹介</a>した<a href="http://code.google.com/p/bulk-loader/">BulkLoader</a>を使ってみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">private</span> <span class="hljs-keyword">var</span> bl:BulkLoader = <span class="hljs-keyword">new</span> BulkLoader( <span class="hljs-string">"imageloader"</span> );

<span class="hljs-comment">/* 中略 */</span>

bl.add( <span class="hljs-string">"images/button_normal.png"</span> );
bl.add( <span class="hljs-string">"images/button_over.png"</span> );
bl.add( <span class="hljs-string">"images/button_down.png"</span> );
bl.add( <span class="hljs-string">"images/button_selected.png"</span> );
bl.addEventListener( BulkProgressEvent.COMPLETE, initialize );
bl.start();
</code></span></pre>


<h3 class="wp-block-heading">3. BitmapButtonインスタンスの生成</h3>



<p>completeイベントに設定したinitializeでビットマップボタンを生成してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">private</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">initialize</span><span class="hljs-params">( e:Event )</span> : <span class="hljs-title">void</span> </span>{
    <span class="hljs-keyword">var</span> btn:BitmapButton = <span class="hljs-keyword">new</span> BitmapButton;
    btn.setImages( {
        normalImage: bl.getBitmapData( <span class="hljs-string">"images/button_normal.png"</span> ),
        overImage: bl.getBitmapData( <span class="hljs-string">"images/button_over.png"</span> ),
        downImage: bl.getBitmapData( <span class="hljs-string">"images/button_down.png"</span> ),
        selectedImage: bl.getBitmapData( <span class="hljs-string">"images/button_selected.png"</span> )
    } );
    btn.render();
    addChild( btn );
}
</code></span></pre>


<p>各ステータスの画像を設定する<em>setImages()</em>は、<br />
BitmapDataを格納したnormalImage, overImage,<br />
downImage, selectedImageらをまとめたオブジェクトを引数として受け取ります。<br />
あとは<em>render()</em>でボタンイメージを生成し、addChild。</p>



<h3 class="wp-block-heading">4. イベントなど</h3>



<p>Spriteを継承しているので、イベントなどはよきにはからえ、で。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">btn</span><span class="hljs-selector-class">.addEventListener</span>( <span class="hljs-selector-tag">MouseEvent</span><span class="hljs-selector-class">.CLICK</span>, <span class="hljs-selector-tag">myFunc</span> );
</code></span></pre>


<h3 class="wp-block-heading">5. 選択状態の変更</h3>



<p>selectedプロパティをtrueにすることで、選択時の状態にする事ができます。<br />
トグルボタンなどを作りたい時はこちらを利用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">btn.selected = <span class="hljs-literal">true</span>
</code></span></pre>


<p>こんな感じで作ってみたわけですが、何かの役にたてば幸いです。<br />
とりあえず自分で使おう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2010/05/02</dt>
<dd>SimpleButtonを使えばもっと楽だという事に次の日気づきました</dd>
<dt>2010/05/03</dt>
<dd>フォロー記事書きました<br />
<a href="/2010/05/as3-simplebutton.html">AS3実験室: 画像を読み込んでボタンにする～SimpleButtonの巻</a></dd>
<dt>2010/05/24</dt>
<dd>フォロー記事書きました<br />
<a href="/2010/05/as3-simpletogglebutton.html">AS3実験室: SimpleButtonクラスをトグル出来るように拡張した「SimpleToggleButton」</a></dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Twitterのリアルタイムを感じるWebサービス</title>
		<link>https://blog.mach3.jp/2010/04/30/twitter-realtime-services.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 30 Apr 2010 22:04:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Infographic]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/04/30/twitter%e3%81%ae%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%92%e6%84%9f%e3%81%98%e3%82%8bweb%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9.html</guid>

					<description><![CDATA[忙しさにかまけてだいぶ時間が経ってしまいました… Twitterと連動するサービスは星の数ほどありますが、 今回ご紹介するのは「情報の可視化」を試みたWebサービス2点です。 POST-SEASON TWITTER PL [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>忙しさにかまけてだいぶ時間が経ってしまいました…</p>



<p>Twitterと連動するサービスは星の数ほどありますが、<br />
今回ご紹介するのは「情報の可視化」を試みたWebサービス2点です。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/S9rUgbO4SiI/AAAAAAAAA3k/OwQPJWIspA0/s800/201004302149.png" alt="Twitterのリアルタイムを感じるWebサービス"/></figure>



<p></p>



<span id="more-46"></span>



<h2 class="wp-block-heading">POST-SEASON TWITTER PLAYOFFS</h2>



<p><a href="http://postseason-stream.nikebasketball.com/live/">Nike NBA</a></p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/S9rUg64zGqI/AAAAAAAAA3o/lejjgOLdVgo/s800/201004302156.png" alt="Nike NBA"/></figure>



<p></p>



<p>まずはNikeが立ち上げた「POST-SEASON TWITTER PLAYOFFS」、<br />
ツイートを集めてWeb上でプレイオフを楽しもうというサービスです。<br />
ユーザがお気に入りのチームに関するツイートをすると、<br />
投稿数によってチームのボックスが拡大縮小します。<br />
THUNDERが消えそうだーーーっ！</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/S9rUhU6k-FI/AAAAAAAAA3s/BoJkYq0QJUU/s800/201004302157.png" alt="BRACKETモード"/></figure>



<p></p>



<p>こちらは「BRACKET」モードの画面。<br />
最も投稿数が多かったチームがチャンピオン！<br />
ユーザー参加型のWeb上の応援合戦ですね。</p>



<h2 class="wp-block-heading">revisit</h2>



<p><a href="http://moritz.stefaner.eu/projects/revisit/">moritz.stefaner.eu &#8211; revisit &#8211; demo</a></p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/S9rUhyRJSpI/AAAAAAAAA3w/0w0no0XiqQo/s800/201004302158.png" alt="revisit"/></figure>



<p></p>



<p>お次は、ツイート間の関連性を可視化した「revisit」。<br />
見ての通り、どのツイートがどのツイートに対するリアクションなのかが<br />
うねうねとビジュアル化されています。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/S9rUiCyoWlI/AAAAAAAAA30/RrdipdvjZfU/s800/201004302159.png" alt="Search terms"/></figure>



<p></p>



<p>右カラムの「Search terms」に、ツイッター検索の文法で入力すると<br />
その検索結果をもとにビジュアライズされます。</p>



<p>残念ながら日本語は表示されないようですが、<br />
旬なキーワードと「RT」等を組み合わせて検索すると、<br />
なかなか美しい図形を描画してくれますよ。</p>



<p>情報を可視化した作品やサービスを近頃よく目にしますが、<br />
Twitterのリアルタイム性と併せると面白い化学反応が拝めそう。<br />
そのあたりでまた新しいアイデアを拾いたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
