<?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>Sprite &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/sprite/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>
	</channel>
</rss>
