<?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>blog.alumican.net &#187; library</title>
	<atom:link href="http://blog.alumican.net/tag/library/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.alumican.net</link>
	<description>日々の記憶と記録とActionScript とその周辺</description>
	<lastBuildDate>Tue, 20 Jul 2010 16:21:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ActionScriptで変態言語Whitespaceのインタプリタ</title>
		<link>http://blog.alumican.net/2010/07/12_155751</link>
		<comments>http://blog.alumican.net/2010/07/12_155751#comments</comments>
		<pubDate>Mon, 12 Jul 2010 06:57:51 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Whitespace]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1723</guid>
		<description><![CDATA[何かを作るとき、色々な技術の応用や組み合わせばかりにとらわれている気がして、ActionScriptという言語自体に真剣に向き合ってみようと思ったらいつのまにかWhitespaceという言語に真剣に向き合っていた。な…　 [...]]]></description>
			<content:encoded><![CDATA[<p>何かを作るとき、色々な技術の応用や組み合わせばかりにとらわれている気がして、ActionScriptという言語自体に真剣に向き合ってみようと思ったらいつのまにか<a href="http://compsoc.dur.ac.uk/whitespace/">Whitespace</a>という言語に真剣に向き合っていた。な…　何を言ってるのかわからねーと思うが（ry</p>
<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="Whitespace Interpreter - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/gpUu" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p>RunをクリックするとSource Codeに記述したコードが実行され、実行結果がOutputへ出力されます。場合によっては（というかPreset Codeでは Hello, World! 以外全て）入力待ち状態になるのでその際はInputに要求された文字列もしくは数値を入力してSendをクリックします。<br />
<span id="more-1723"></span><br />
<strong>Whitespace？なにそれおいしいの？</strong><br />
Whitespaceは簡単なプログラミング言語です。ただし<span style="color: #eeeeee;">見えない</span>ことを除いては。なぜならばWhitespaceのソースコードは半角スペース、タブ、改行のみで構成されているからです。それ以外の文字は全てコメントとして扱われます。</p>
<p>ちなみに、公式サイトに掲載されているHello Worldのソースです。なんだろうこのドヤ感。<br />
» <a href="http://compsoc.dur.ac.uk/whitespace/hworld.ws">Hello World</a></p>
<p><strong>スタックマシンとしての動作と文法</strong><br />
Whitespaceは記憶領域としてスタック、ヒープというものを使います。ASで言うならばスタックはArray、ヒープはObjectと言ったところでしょうか。スタックは値を一番上に積み上げるか、一番上から取り出すことしかできませんし、値を見るだけでもいちいち取り出さなければいけません。ヒープは任意のラベル（アドレス）に値を保存したり、保存しておいた値を取り出しすことができます。</p>
<pre><code>//スタックのイメージ
stack.push(value);           //値の積み上げ
var value:int = stack.pop(); //値の取り出し

//ヒープのイメージ
heap[address] = value;         //値の保存
var value:int = heap[address]; //値の取り出し</code></pre>
<p>ソースコードは処理命令の羅列となっているので、Whitespaceはソースコードの最初から順番に処理命令を読み取りながら、スタックとヒープを操作してプログラムを実行していきます。ひとつの処理命令は「IMP + コマンド + パラメータ」のセットになっています。それぞれの役割は次のようになっています。</p>
<ul>
<li>IMP ･･･ Instruction Modification Parameterの略で、処理命令の大まかなカテゴリを表します（AS的にはパッケージのようなものです）。</li>
<li>コマンド ･･･ 処理命令の具体的な種類を表します（AS的にはメソッドのようなものです）。</li>
<li>パラメータ ･･･ コマンドを実行するための引数です。コマンドによっては無い場合があります。</li>
</ul>
<p>それぞれの具体的なコードは以下で解説されているので、心の目で見るといいと思います。<br />
» <a href="http://d.hatena.ne.jp/hiroshi128/20100201/1265031426">Whitespace基礎文法最速マスター</a></p>
<p><strong>ソースコード</strong><br />
<a href="http://wonderfl.net/c/gpUu/download">こちら</a>からダウンロードして自由に使ってください。496行目辺りからインタプリタのクラスが記述してあります。本当は正規表現でスマートにやりたかったんですけど、汚くなっちゃいました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/07/12_155751/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>縦横比を保ったままリサイズするBoundaryResizerクラス</title>
		<link>http://blog.alumican.net/2009/10/07_225251</link>
		<comments>http://blog.alumican.net/2009/10/07_225251#comments</comments>
		<pubDate>Wed, 07 Oct 2009 13:52:51 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1435</guid>
		<description><![CDATA[読み込んだ画像をサムネイル枠内に収まるように縦横比を保ったままリサイズしたり、ステージの背景に敷くために拡大したりすることがあると思います。その都度計算式を書くのは面倒なので、クラス化しました。地味によく使っているので紹 [...]]]></description>
			<content:encoded><![CDATA[<p>読み込んだ画像をサムネイル枠内に収まるように縦横比を保ったままリサイズしたり、ステージの背景に敷くために拡大したりすることがあると思います。その都度計算式を書くのは面倒なので、クラス化しました。地味によく使っているので紹介します。<br />
このクラスはRectangleの情報をやりとりするだけなので、Bitmap以外にも何にでも使えます。</p>
<p><strong>サンプル</strong><br />
ご覧いただければ何が目的のライブラリなのか、だいたい分かると思います。</p>
<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="[Sample] BoundaryResizer Demo - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/kF5j" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p><strong>ダウンロード</strong><br />
» <a href="http://lab.alumican.net/boundary_resizer_demo/BoundaryResizer.zip">通常版はこちら</a><br />
» <a href="http://lab.alumican.net/boundary_resizer_demo/BoundaryResizer.txt">BoundaryResizer.asファイルのみ （拡張子をasに変更してください）</a></p>
<p><strong>使い方</strong><br />
コードはこんな感じで。</p>
<pre><code>var bmp:Bitmap = ...
var target:Rectangle = bmp.bitmapData.rect;
var boundary:Rectangle = new Rectangle(50, 50, 300, 300);
var scaleMode:String = BoundaryResizer.NO_BORDER;
var align:String = BoundaryResizer.TOP_LEFT;
<span style="color: #ff0000;">var resized:Rectangle = BoundaryResizer.resize(target, boundary, scaleMode, align);</span>
bmp.x = resized.x;
bmp.y = resized.y;
bmp.width = resized.width;
bmp.height = resized.height;</code></pre>
<p><span id="more-1435"></span></p>
<p>BoundaryResizer.resizeメソッドの引数はこんな感じで。</p>
<ul>
<li><strong>target:Rectangle</strong> ･･･ 第1引数。リサイズ対象オブジェクトの矩形を指定します。上の例ではリサイズしたい画像の矩形となります。</li>
<li><strong>boundary:Rectangle</strong> ･･･ 第2引数。リサイズの基準となる矩形を指定します。上の例ではリサイズ後の画像を収める枠となります。</li>
<li><strong>scaleMode:String</strong>（省略可） ･･･第3引数。 リサイズ時のスケールモードを指定します。このパラメータはStageScaleModeと互換性があります。このパラメータを省略した場合はBoundaryResizer.NO_SCALEとなり、リサイズはおこなわれません。</li>
<li><strong>align:String</strong>（省略可） ･･･ 第4引数 。boundaryに対するtargetの基準位置を指定します。このパラメータはStageAlignと互換性があります。このパラメータを省略した場合はBoundaryResizer.CENTERとなり、縦横ともに中央揃えとなります。</li>
<li><strong>戻り値:Rectangle</strong> ･･･ リサイズ後の矩形が返されます。target及びboundaryは変更しません。</li>
</ul>
<p>リサイズ方法を操作するscaleModeには以下の定数を指定できます。</p>
<pre><code>// targetとboundaryが完全に一致するようにリサイズされます。多くの場合、targetの縦横比は保たれません。
BoundaryResizer.<span style="color: #ff0000;">EXACT_FIT</span>

// targetが縦横比を保ち、かつtargetがboundaryの内側にフィットするようにリサイズされます。targetがトリミングされることはありませんが、上下または左右に隙間ができることがあります。
BoundaryResizer.<span style="color: #ff0000;">SHOW_ALL</span>

// targetが縦横比を保ち、かつboundaryがtargetの内側にフィットするようにリサイズされます。targetとboundaryの間に隙間ができることはありませんが、targetがトリミングされることがあります。
BoundaryResizer.<span style="color: #ff0000;">NO_BORDER</span>

// リサイズがおこなわれず、alignによる基準点合わせのみがおこなわれます。
BoundaryResizer.<span style="color: #ff0000;">NO_SCALE</span></code></pre>
<p>リサイズ後のオブジェクトの基準点を操作するalignには以下の定数を指定できます。</p>
<pre><code>BoundaryResizer.<span style="color: #ff0000;">TOP_LEFT</span>     // x軸方向:左　, y軸方向:上
BoundaryResizer.<span style="color: #ff0000;">TOP</span>          // x軸方向:中央, y軸方向:上
BoundaryResizer.<span style="color: #ff0000;">TOP_RIGHT</span>    // x軸方向:右　, y軸方向:上
BoundaryResizer.<span style="color: #ff0000;">LEFT</span>         // x軸方向:左　, y軸方向:中央
BoundaryResizer.<span style="color: #ff0000;">CENTER</span>       // x軸方向:中央, y軸方向:中央
BoundaryResizer.<span style="color: #ff0000;">RIGHT</span>        // x軸方向:右　, y軸方向:中央
BoundaryResizer.<span style="color: #ff0000;">BOTTOM_LEFT</span>  // x軸方向:左　, y軸方向:下
BoundaryResizer.<span style="color: #ff0000;">BOTTOM</span>       // x軸方向:中央, y軸方向:下
BoundaryResizer.<span style="color: #ff0000;">BOTTOM_RIGHT</span> // x軸方向:右　, y軸方向:下</code></pre>
<p><strong>追記 09.10.08</strong><br />
・多少最適化しました。以前のバージョンをお使いの方はBoundaryResizer.asを入れ替えて頂ければ大丈夫です。<br />
・wonderflのサンプルを更新しました。</p>
<p><strong>追記 09.10.22</strong><br />
・使い方のサンプルコードに間違いがあったので修正しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/10/07_225251/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Shift-JISやEUC-JPのXMLを読み込むSimpleXMLLoaderクラス</title>
		<link>http://blog.alumican.net/2009/07/30_014333</link>
		<comments>http://blog.alumican.net/2009/07/30_014333#comments</comments>
		<pubDate>Wed, 29 Jul 2009 16:43:33 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[SimpleXMLLoader]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1205</guid>
		<description><![CDATA[先日のエントリ『AS3の標準XMLパーサ　ちょっとしたまとめ』で、余計な説明を省くために作ったSimpleXMLLoaderクラスでしたが、使ってみたら予想以上に便利だったのでバージョンアップしてみました。まあ大したこと [...]]]></description>
			<content:encoded><![CDATA[<p>先日のエントリ『<a href="http://blog.alumican.net/2009/07/20_004016">AS3の標準XMLパーサ　ちょっとしたまとめ</a>』で、余計な説明を省くために作ったSimpleXMLLoaderクラスでしたが、使ってみたら予想以上に便利だったのでバージョンアップしてみました。まあ大したことはやっていなくて、今までutf-8専用だったところを、<strong>好きな文字コードで書かれたxmlを読み込めるようにした</strong>だけです。</p>
<p>» <a href="http://lab.alumican.net/as3_xml_demo/parse_demo/SimpleXMLLoader.txt">SimpleXMLLoader.as （拡張子をasに変更してください）</a></p>
<p>例をどうぞ。使い方としては、loadメソッドにオプションとして文字コードを指定できようになっただけで、他は変わっていません。なお、エラー処理付きのサンプルは先日のエントリに載せています。</p>
<pre><code>//Shift-JISで書かれたxmlを読み込む
var loader:SimpleXMLLoader = new SimpleXMLLoader();
loader.onLoadComplete = onLoadComplete;
loader.load("shift-jis.xml", <span style="color: #ff0000;">SimpleXMLLoader.SHIFT_JIS</span>);

function onLoadComplete(xml:XML):void {
  trace(xml + "を読み込みました。ね？簡単でしょ？");
}</code></pre>
<p><span id="more-1205"></span><br />
動作確認済みの4種類の文字コード(左)と、第2引数への指定の仕方（右）を以下に示します。引数省略時はUTF-8で読み込みます。<br />
UTF-8 ･･･ <strong>SimpleXMLLoader.UTF_8</strong><br />
Shift-JIS ･･･ <strong>SimpleXMLLoader.SHIFT_JIS</strong><br />
EUC-JP ･･･ <strong>SimpleXMLLoader.EUC_JP</strong><br />
JIS ･･･ <strong>SimpleXMLLoader.JIS</strong></p>
<p>これ以外の文字コードは動作確認していませんが、Adobe ActionScriptリファレンス『<a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/charset-codes.html">サポートする文字セット</a>』の文字コードであれば大丈夫だと思います、多分。</p>
<p>上記リファレンスの文字コードをミスタイプしそうだったり、文字列を直接書くのはどうなのという僕のような人のために、指定文字列をstatic変数化して1にまとめたCharsetクラスを作りました。アラビア語のxmlを読み込むときには、Charset.ASMO_708 を第2引数に指定してください。読み込めるかも知れません。</p>
<p>» <a href="http://lab.alumican.net/as3_xml_demo/multi_charset_demo/Charset.txt">Charset.as （拡張子をasに変更してください）</a></p>
<p>それでは、今回のバージョンアップ箇所まわりの中身がどうなっているのかを軽く解説しておきます。<br />
まずFlashの特性として、検出したテキストを全部Unicodeとして見なしてしまうために、UTF-8以外の2バイト文字は化けてしまいます。<br />
じゃあAS2時代よろしく System.useCodePage = true; すればいいじゃないかと思えば、今度はxmlデータの末尾にゴミが入ったりすることがあります。テキストの中身が組み変わったりすることもあるようで、あまり良くないようです。AS2のときはうまくいってたのに残念です。</p>
<p>結局どうしたのかというと、ByteArrayを使いました。バイナリデータを扱うアレです。ByteArrayには、指定した文字コードのバイナリ列をutf-8へとエンコードしながら読み出すというreadMultiByteメソッドがあるのでこれを使います。そのためには、まずURLLoaderの読み込みデータフォーマットをバイナリで指定しなければなりません。</p>
<p>具体的には、読み込み時には下記のようにURLLoaderクラスのdataFormatプロパティをURLLoaderDataFormat.BINARYで指定します。</p>
<pre><code>var loader:URLLoader = new URLLoader();
<span style="color: #ff0000;">loader.dataFormat = URLLoaderDataFormat.BINARY;</span>
loader.load(new URLRequest("shift-jis.xml"));</code></pre>
<p>そして、読み込み完了時に一度データをByteArrayに格納した後にreadMultiByteメソッドでUTF-8として読み取ります。下記の例ではShift-JISからUTF-8へエンコードしながらテキストを読み出しています。実装したコードよりもちょっとだけ丁寧に書いてます。</p>
<pre><code>var ba:ByteArray = loader.data as ByteArray;
var utf8Str:String = <span style="color: #ff0000;">ba.readMultiByte(ba.length, "shift-jis");</span>
var xml:XML = new XML(utf8Str);</code></pre>
<p>これでOK。</p>
<p>･･･かと思いきや、このreadMultiByteメソッドもバグ持ちで、EUC-JPを上手く読み込めません。おいおい。。。<br />
そこで、<a href="http://kudelab.com/">クデラボ -KudeLab-</a>さんが作られたEUC-JP→UTF-8変換ライブラリ『<a href="http://kudelab.com/archives/20">JCode.as</a>』を使わせていただきました。ありがとうございます！</p>
<pre><code>var ba:ByteArray = loader.data as ByteArray;
var utf8Str:String = <span style="color: #ff0000;">Jcode.EUCtoUTF8(ba);</span>
var xml:XML = new XML(utf8Str);</code></pre>
<p>最終的な処理の流れとして、ちょっと分岐が不細工なのですが以下のようになりました。<br />
1．UTF-8ならそのままテキストデータとして読み込む<br />
2．EUC-JPならバイナリで読み込んだ後にJCode.asを使ってUTF-8テキストに変換<br />
3．それ以外ならバイナリで読み込んだ後にreadMultiByteメソッドでUTF-8テキストに変換</p>
<p>このプロセスはxml以外のプレーンなテキストの読み込みにも使える話だと思うので、UTF-8以外のテキストを扱いたい方の参考になれば幸いです。</p>
<p>今回のプロジェクト一式はこちらです。<br />
» <a href="http://lab.alumican.net/as3_xml_demo/multi_charset_demo.zip">Download</a></p>
<p>ちなみに先日のエントリでアップしたのプロジェクト内のSimpleXMLLoaderクラスも最新バージョンににすり替えています。</p>
<p><strong>追記 09.07.31</strong><br />
無駄な処理が紛れていたので修正しました。</p>
<pre><code>//修正前
var ba:ByteArray = new ByteArray();
ba = loader.data as ByteArray;</code></pre>
<pre><code>//修正後
var ba:ByteArray = loader.data as ByteArray;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/07/30_014333/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>一定時間後に関数を一度だけ実行するDelayExecutorクラス</title>
		<link>http://blog.alumican.net/2009/07/26_224801</link>
		<comments>http://blog.alumican.net/2009/07/26_224801#comments</comments>
		<pubDate>Sun, 26 Jul 2009 13:48:01 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[DelayExecutor]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1082</guid>
		<description><![CDATA[DelayExecutorクラス
Timerは手続きが多くて面倒、setTimeoutは何故かしっくりこない人のための、一定時間後に指定した関数を一度だけ実行するクラスです。いわゆる遅延処理。
» DelayExecut [...]]]></description>
			<content:encoded><![CDATA[<p><strong>DelayExecutorクラス</strong><br />
Timerは手続きが多くて面倒、setTimeoutは何故かしっくりこない人のための、一定時間後に指定した関数を一度だけ実行するクラスです。いわゆる遅延処理。</p>
<p>» <a href="http://lab.alumican.net/delay_executor_demo/src/DelayExecutor.txt">DelayExecutor.as （拡張子をasに変更してください）</a></p>
<p>以下の例は、全て3秒後にtrace(&#8220;完了！&#8221;)を実行します。<br />
　<br />
<strong>(1) new DelayExecutor()でインスタンスを生成して実行する</strong></p>
<pre><code>var exe:DelayExecutor = new DelayExecutor(func, 3000);
exe.start();

function func(executor:DelayExecutor):void {
  trace("完了！");
}</code></pre>
<p>　<br />
<strong>(2) インスタンスを生成後に、コールバック関数と遅延時間を設定して実行する</strong></p>
<pre><code>var exe:DelayExecutor = new DelayExecutor();
exe.onComplete = func;
exe.delay = 3000;
exe.start();

function func(executor:DelayExecutor):void {
  trace("完了！");
}</code></pre>
<p>　<br />
<strong>(3) インスタンス生成から実行までを、static関数を使って1行で繋げる</strong></p>
<pre><code>DelayExecutor.register(func, 3000).start();

function func(executor:DelayExecutor):void {
  trace("完了！");
}</code></pre>
<p>　<br />
<strong>(4) 無名関数を使った、さらなる省略形</strong></p>
<pre><code>DelayExecutor.register(function(executor:DelayExecutor):void {
  trace("完了！");
}, 3000).start();</code></pre>
<p><span id="more-1082"></span></p>
<p>内部的にaddEventListenerしたものは、タイマー完了時に全てremoveEventListenerしています。</p>
<p>また autoClear = true; とすれば、タイマー完了時に onComplete = null; が実行されます。上記のように、タイマーを再利用しない場合には autoClear = true; とすることをお勧めします。autoClearはコンストラクタやregisterの第3引数でも設定可能であり、デフォルトでtrueです。</p>
<p>ただし、あらかじめ autoClear = false; としておけば以前設定したonCompleteを再設定せずにタイマーを再実行することができます。次の例のように無名関数と組み合わせる場合に有効かも知れません。次の例では autoClear = false; とした上で遅延時間を3秒後、5秒後、7秒後・・・と増やしながら無名関数を実行していきます。<br />
　<br />
<strong>(5) autoClear = false で実行関数を再設定せずにタイマーを再利用する</strong></p>
<pre><code>DelayExecutor.register(function(executor:DelayExecutor):void {
  trace("完了！");
  executor.delay += 2000;
  executor.start();
}, 3000, <span style="color: #ff0000;">false</span>).start();</code></pre>
<p>autoClear = false; とする場合、またはstop()でタイマーを停止した状態でタイマーが不要になったときには、必ず手動で onComplete = null; としてください。（メモリリークの原因となることがあります。）<br />
　<br />
register()、start()、stop()メソッドは戻り値としてDelayExecutorインスタンスを返すので、タイマーのキャンセルや再利用などに使ってください。</p>
<p>例によって、今回使ったソースファイル一式を置いておきます。<br />
» <a href="http://lab.alumican.net/delay_executor_demo/src.zip">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/07/26_224801/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActionScript3.0製のスクロールバー JPPScrollbar 公開</title>
		<link>http://blog.alumican.net/2009/05/28_040338</link>
		<comments>http://blog.alumican.net/2009/05/28_040338#comments</comments>
		<pubDate>Wed, 27 May 2009 19:03:38 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JPPScrollbar]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=796</guid>
		<description><![CDATA[簡単に使えるActionScript3.0製のスクロールバー「JPPScrollbar」をSpark Projectでリリースしました。はい、名前はエアロスミスのJust Push Playにあやかっています、すいません [...]]]></description>
			<content:encoded><![CDATA[<p>簡単に使えるActionScript3.0製のスクロールバー「JPPScrollbar」をSpark Projectでリリースしました。はい、名前はエアロスミスのJust Push Playにあやかっています、すいません。以下説明。</p>
<p><strong><a href="http://www.libspark.org/wiki/alumican/JPPScrollbar">JPPScrollbar</a></strong></p>
<p>Just（ただ） Put（置けば） Play（動く） Scrollbar（スクロールバー）<br />
サンプルファイルのライブラリからステージに置けば動いてくれるActionScript3.0製のスクロールバーです。個人的に作っていましたが、割と高機能になったので公開します。</p>
<p><strong>主な機能</strong></p>
<ul>
<li>任意のSpriteやMovieClipをスクロールバーのパーツとしてバインド可能です</li>
<li>滑らかな減速スクロールを使用可能です</li>
<li>コンテンツ量に合わせて縮むスクロールバーを使用可能です</li>
<li>スライダーの高さを0ピクセルとして扱うことが可能です</li>
<li>iPhoneのような、スクロールが行き過ぎて戻る演出が使用可能です</li>
<li>エンドロールのような自動スクロールを実行可能です</li>
<li>外部からメソッド呼び出しでスクロールさせることが可能です</li>
<li>スクロール量など、こと細かく決められます</li>
<li>スライダーやスクロール対象コンテンツを整数値に吸着できます</li>
<li>y座標でなくても、任意のプロパティをスクロール可能です</li>
<li>ライブラリからコピペしなくてもnewして使えます</li>
<li><a href="http://www.libspark.org/wiki/SWFWheel">SWFWheel</a>を使用しているので大抵の環境でマウスホイールを使えます</li>
</ul>
<p>などなど色々ありますが、とりあえず目的にかなったサンプルのフォルダからごそっとコピペすれば動くようになっています。もう少し詳しい使い方は<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar">Spark Project</a>のほうに書いてあります。</p>
<p><strong>サンプル</strong></p>
<ul>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/01/sample01.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/01</a> ･･･ コンテンツ量に合わせて伸縮するスライダーを使用した減速スクロールバー（デフォルト）</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/02/sample02.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/02</a> ･･･ 減速スクロールを使わないスクロールバー</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/03/sample03.swf" rel="shadowbox;width=426;height=765;options={flashBgColor:'#ffffff'};">samples/03</a> ･･･ iPhoneっぽいスクロールとイベントの使用例 （<a href="http://log.sncr.jp/">matsumos</a>さんに作成していただきました）</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/04/sample04.swf" rel="shadowbox">samples/04</a> ･･･ リキッドレイアウトに対応したスクロールバー</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/05/sample05.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/05</a> ･･･ useIgnoreSliderHeight  = true （スライダーの高さを0として扱う）の使いどころ → スライダーの基準点をスクロールエリアの上から下までめいっぱい動かしたいとき</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/06/sample06.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/06</a> ･･･ 水平スクロールバーのサンプル</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/07/bin/sample07.swf" rel="shadowbox;width=360;height=240;options={flashBgColor:'#ffffff'};">samples/07</a> ･･･ ASファイルだけで作ったサンプル （<a href="http://log.sncr.jp/">matsumos</a>さんに作成していただきました） </li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/08/bin/sample08.swf" rel="shadowbox;width=800;height=600;options={flashBgColor:'#ffffff'};">samples/08</a> ･･･ Papervision3Dのテクスチャに組み込んだサンプル （<a href="http://log.sncr.jp/">matsumos</a>さんに作成していただきました） </li>
<li>サンプルどしどし受付中です！</li>
</ul>
<p>つーわけでこのJPPScrollbar、ガンガン使ってもらえると嬉しいです。<br />
めんどくさい部分はちゃちゃっと済ませちゃいましょー。</p>
<p><strong>追記 10.05.12　バージョン1.03への移行について</strong><br />
バージョン1.03へのアップデートに伴い、これまでの使い方ではエラーが出るようになりました。詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.03">SparkProject</a>に追記していますのでそちらをご覧ください。バージョン1.02もダウンロード可能です。</p>
<p><strong>追記 10.07.04　バージョン1.04をリリースしました</strong><br />
MagicMouse使用時の不具合に対処しました。詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.04">SparkProject</a>に追記しています。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/05/28_040338/feed</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>Plug-in &#8220;WP-Al-SWFObject&#8221; embeds Flash on WordPress</title>
		<link>http://blog.alumican.net/2009/05/18_005204</link>
		<comments>http://blog.alumican.net/2009/05/18_005204#comments</comments>
		<pubDate>Sun, 17 May 2009 15:52:04 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=765</guid>
		<description><![CDATA[This entry is English version of the Japanese one. I&#8217;m sorry I&#8217;m not good at English. If you find any mistakes, please let me know.
WP-Al-SWFObject
I made the plug-in to embed on the entry of WordPress easily, so it introduces it. This is powerful plug-in for embedding swf on WordPress. It is possible to specify parameters  [...]]]></description>
			<content:encoded><![CDATA[<p>This entry is English version of <a href="http://blog.alumican.net/2009/04/19_233117">the Japanese one</a>. I&#8217;m sorry I&#8217;m not good at English. If you find any mistakes, please let me know.</p>
<p><strong>WP-Al-SWFObject</strong><br />
I made the plug-in to embed on the entry of WordPress easily, so it introduces it. This is powerful plug-in for embedding swf on WordPress. It is possible to specify parameters more in detail than WP-SWFObject.</p>
<p><a href="/2009/05/18_005204#wp_al_swobject_download">Download</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_usage">How to use</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_usage_anywhere">・How to use (In a location other than the entry)</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_control">Control panel</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_example">Examples</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_swfobjectversion">Version of SWFObject used</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_license">License</a></p>
<p><strong id="wp_al_swobject_download">- Download</strong><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_en.zip">Download (Enblish)</a><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_ja.zip">Download (Japanese)</a></p>
<p><strong id="wp_al_swobject_usage">- How to use</strong></p>
<ol>
<li>The wp-al-swfobject folder is created by defrosting downloaded zip, and you up-load the folder to the wp-content/plugins directory of the server.</li>
<li>The WP-Al-SWFObject plug-in is made effective from set screen -&gt; plug-in of WordPress.</li>
<li>Describe the following codes at the position in which you want to embed swf. Please replace [ /embedSWF] with [/embedSWF].</li>
</ol>
<pre><code>[embedSWF]<span style="color: #ff0000;">swf</span>, width, height, align, version, expressInstall, flashvars, params, attributes[ /embedSWF]</code></pre>
<p><span style="color: #ff0000;">The parameter of the deficit</span> is indispensable, and other parameters is optional (It is possible to omit it).</p>
<ul>
<li><span style="color: #ff0000;">swf（indispensable） ･･･ The path to embedded swf</span></li>
<li>width（optional） ･･･ The width of swf.  If you omit it, the default value specified on a control panel is used.</li>
<li>height（optional） ･･･ The height of swf. If you omit it, the default value specified on a control panel is used.</li>
<li>align（optional） ･･･ The position of swf. You can choose from the &#8220;left&#8221;, the &#8220;right&#8221;, or the &#8220;center&#8221;.<br />
If you omit it, the value isn&#8217;t specified especially.</li>
<li>version（optional） ･･･ The version of necessary FlashPlayer. It becomes 9.0.0 when omitting it.</li>
<li>expressInstall（optional） ･･･ The path to express-install-swf. It is displayed when the player doesn&#8217;t meet the requirement. SWFObject default &#8220;expressInstall.swf&#8221; is displayed when omitting it.</li>
<li>flashvars（optional） ･･･ The flashvars a.k.a the variable that html passes swf. It is described by the format <em>{name1:&#8221;value1&#8243;, name2,&#8221;value2&#8243;}</em>.</li>
<li>params（optional） ･･･ The parameters when swf is embedded is described by flashvars and the same format.</li>
<li>attributes（optional） ･･･ The attributes on html when swf is embedded is described by flashvars and the same format.</li>
</ul>
<p><span id="more-765"></span></p>
<p><strong id="wp_al_swobject_usage_anywhere">・How to use (In a location other than the entry)</strong><br />
If you want to paste swf to the outside of the entry (For example, header and sidebar), you can call the following php function in where you want to paste swf.</p>
<pre><code>&lt;?php wp_al_swfobject_echo('[embedSWF]swf, width, height, align, version, expressInstall, flashvars, params, attributes[／embedSWF]'); ?&gt;</code></pre>
<p><strong id="wp_al_swobject_control">- Control panel</strong><br />
The default value of each parameter can be set from the plug-in Control panel.<br />
The default value is applied to all swf embedded by WP-Al-SWFObject.<br />
The priority level when the same variable is set in two or more parts becomes the following.</p>
<p>Settings in [embedSWF] tag &gt; <em>{name1:&#8221;value1&#8243;, name2:&#8221;value2&#8243;}</em> at Control panel &gt; Supplementary setting in control panel(only params can be set).</p>
<p>It is overwrited by the variable with a high priority level. Moreover, for flashvars and params and attributes, the superscription is judged individually in each variable.</p>
<p>For instance, when the following code is set from Control panel, </p>
<pre><code>aaa:"30", bbb:"50"</code></pre>
<p>flashvars (<em>aaa=&#8221;50&#8243;, bbb</em>=&#8221;30&#8243;) is passed to all embedded swf by using WP-Al-SWFObject. Under such a condition, as follows is done and swf is embedded.</p>
<pre><code>[embedSWF]hoge.swf,,,,,,{aaa:"10"}[ /embedSWF]</code></pre>
<p>In this case, because variable <em>aaa</em> is alse specified with flashvars in [embedSWF] tag, the default value is not applied to variable <em>aaa</em>. In a word, this swf will receive flashvars as <em>aaa=&#8221;10&#8243;, bbb=&#8221;50&#8243;</em>.</p>
<p><strong id="wp_al_swobject_example">- Example</strong><br />
It embeds without specifying the option (Be set it to 300 in width and 50 in height on the Control panel).</p>
<pre><code>[embedSWF]hoge.swf[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:300px; height:50px; line-height:50px; background: #ffffff;"><div id="swfbdf56">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf56", "300", "50", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
<br />
　</p>
<p>Next, width and height are embedded specifying it.</p>
<pre><code>[embedSWF]hoge.swf, 200, 100[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfbdf57">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf57", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
<br />
　</p>
<p>Next, it makes to right adjust, and flashvars is passed.</p>
<pre><code>[embedSWF]hoge.swf, 200, 100, right,,,{aaa:"10"}[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin-left: auto; background: #ffffff;"><div id="swfbdf58">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf58", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {aaa:"10"}, {}, {});
</script>
<br />
　</p>
<p>Next, the <em>id</em> and the <em>name</em> attribute of html are added.</p>
<pre><code>[embedSWF]hoge.swf, 200, 100,,,,{},{},{id:"sample", name:"sample"}[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfbdf59">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf59", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {id:"sample",name:"sample"});
</script>
<br />
　</p>
<p>Next, all parameters are specified (Flashplayer 9.0.0 or later is required. When the player version is low, <em>http://hogehoge.jp/alt.swf</em> is displayed. The variable named <em>aaa=10</em> is passed to swf. The context menu is not given. The connection between html and swf is always permitted. The id and the name attribute of html is sample).</p>
<pre><code>[embedSWF]hoge.swf, 400, 360, center, 9.0.0, http://hogehoge.jp/alt.swf, {aaa:"10"}, {menu:"false", allowScriptAccess:"always"}, {id:"sample", name:"sample"}[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin: auto; margin-right: auto; background: #ffffff;"><div id="swfbdf510">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf510", "200", "100", "9.0.0", "http://hogehoge.jp/alt.swf", {aaa:"10"}, {menu:"false",allowScriptAccess:"always"}, {id:"sample",name:"sample"});
</script>
<br />
　</p>
<p><strong id="wp_al_swobject_swfobjectversion">- Version of SWFObject used</strong><br />
You can switch the version of SWFObject on COntrol panel (It is 2.1 in default).<br />
It corresponds to version from 1.5 to 2.2. But, <a href="http://code.google.com/p/swfobject/wiki/whats_new">Callback method</a> that is the new features included of 2.2, and the attributes of 1.5 cannot be specified at current version.</p>
<p><strong id="wp_al_swobject_license">- license</strong><br />
<a href="http://sourceforge.jp/projects/opensource/wiki/licenses%2FGNU_General_Public_License">GPL license</a>. Because WP-SWFObject that is origin of WP-SWFObject is GPL license. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/05/18_005204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressにFlashを貼り付けるプラグインWP-Al-SWFObject</title>
		<link>http://blog.alumican.net/2009/04/19_233117</link>
		<comments>http://blog.alumican.net/2009/04/19_233117#comments</comments>
		<pubDate>Sun, 19 Apr 2009 14:31:17 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=586</guid>
		<description><![CDATA[English is here.
WP-Al-SWFObject
WordPressのエントリにswfを簡単に貼り付けるためのプラグインを作ったので紹介します。WP-SWFObjectよりも細かくパラメータを指定できます [...]]]></description>
			<content:encoded><![CDATA[<p>English is <a href="http://blog.alumican.net/2009/05/18_005204">here</a>.</p>
<p><strong>WP-Al-SWFObject</strong><br />
WordPressのエントリにswfを簡単に貼り付けるためのプラグインを作ったので紹介します。WP-SWFObjectよりも細かくパラメータを指定できます。</p>
<p><a href="/2009/04/19_233117#wp_al_swobject_download">ダウンロード</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_usage">使い方</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_usage_anywhere">使い方（エントリー以外の場所に貼り付ける）</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_control">管理画面</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_example">使用例</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_swfobjectversion">使用するSWFObjectのバージョン</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_license">ライセンス</a></p>
<p><strong id="wp_al_swobject_download">・ダウンロード</strong><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_en.zip">Download （英語版）</a><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_ja.zip">Download （日本語版）</a></p>
<p><strong id="wp_al_swobject_usage">・使い方</strong></p>
<ol>
<li>ダウンロードしたzipを解凍するとwp-al-swfobjectフォルダができるので、フォルダごとサーバのwp-content/pluginsディレクトリにアップロードします。</li>
<li>WordPressの設定画面-&gt;プラグインから、WP-Al-SWFObjectプラグインを有効化します。</li>
<li>エントリー内のswfを貼り付けたい位置に以下のコードを記述します。[／embedSWF]は[/embedSWF]に置き換えてください。</li>
</ol>
<pre><code>[embedSWF]<span style="color: #ff0000;">swf</span>, width, height, align, version, expressInstall, flashvars, params, attributes[／embedSWF]</code></pre>
<p>赤字のパラメータは必須、黒字のパラメータはオプション(省略可能)です。</p>
<ul>
<li><span style="color: #ff0000;">swf（必須） ･･･ 貼り付けるswfへのパスを記述します。</span></li>
<li>width（省略可） ･･･ swfの幅を指定します。省略するとプラグインの設定ページで指定したデフォルト値が用いられます。</li>
<li>height（省略可） ･･･ swfの高さを指定します。省略するとプラグインの設定ページで指定したデフォルト値が用いられます。</li>
<li>align（省略可） ･･･ swfを貼り付ける際の位置を指定します。左寄せ、右寄せ、中央寄せに対してそれぞれleft、right、centerで指定します。省略すると特に指定されません。</li>
<li>version（省略可） ･･･ 必要なFlashPlayerのバージョンを記述します。省略すると9.0.0となります。</li>
<li>expressInstall（省略可） ･･･ プレイヤーが要件を満たさない場合に表示するswfへのパスを記述します。省略するとSWFObjectデフォルトのexpressInstall.swfを表示します。</li>
<li>flashvars（省略可） ･･･ HTMLからflashに渡す変数（flashvars）を、{変数名1:&#8221;値1&#8243;, 変数名2:&#8221;値2&#8243;}という形式で記述します。</li>
<li>params（省略可） ･･･ swfを貼り付ける際のパラメータを、flashvarsと同形式で記述します。</li>
<li>attributes（省略可） ･･･ swfを貼り付ける際のhtml属性を、flashvarsと同形式で記述します。</li>
</ul>
<p><span id="more-586"></span></p>
<p><strong id="wp_al_swobject_usage_anywhere">・使い方（エントリー以外の場所に貼り付ける）</strong><br />
ヘッダーやサイドバーなど、エントリ以外の場所に貼り付ける場合は、貼り付けたい場所で以下のphp関数を呼び出します。引数として、エントリー内に貼り付ける場合のタグと同様のものをまるごと文字列で渡します。</p>
<pre><code>&lt;?php wp_al_swfobject_echo('[embedSWF]swf, width, height, align, version, expressInstall, flashvars, params, attributes[／embedSWF]'); ?&gt;</code></pre>
<p><strong id="wp_al_swobject_control">・管理画面</strong><br />
WP-Al-SWFObjectは管理画面から各パラメータのデフォルト値を設定できます。<br />
デフォルト値はWP-Al-SWFObjectによって貼られる全てのswfに適用されます。<br />
同じ変数を複数の箇所で設定した場合の優先順位は<br />
[embedSWF]タグ内 &gt; 設定画面の{変数名1:&#8221;値1&#8243;, 変数名2:&#8221;値2&#8243;} &gt; 設定画面の補助設定（paramsのみ設定可）<br />
となっており、優先順位の高い変数に上書きされます。また、flashvars、params、attributesに関しては各変数ごとに上書き判定がなされます。</p>
<p>例えば、管理画面からflashvarsの項目に</p>
<pre><code>aaa:"30", bbb:"50"</code></pre>
<p>を設定すると、WP-Al-SWFObjectを使って貼る全てのswfに aaa=&#8221;30&#8243;, bbb=&#8221;50&#8243; としてflashvarsが渡されます。この状態で、以下のようにしてswfを貼り付けます。</p>
<pre><code>[embedSWF]hoge.swf,,,,,,{aaa:"10"}[／embedSWF]</code></pre>
<p>この場合、タグ内でデフォルト値と同名の変数名aaaでflashvarsを指定しているため、デフォルト値は変数aaaに対して適用されません。つまり、このswfは aaa=&#8221;10&#8243;, bbb=&#8221;50&#8243; としてflashvarsを受け取ることになります。</p>
<p><strong id="wp_al_swobject_example">・使用例</strong><br />
オプションを指定せずに貼り付ける（管理画面で幅300、高さ50に設定してあります）</p>
<pre><code>[embedSWF]hoge.swf[／embedSWF]</code></pre>
<p><div style="text-align: center; width:300px; height:50px; line-height:50px; background: #ffffff;"><div id="swfbdf516">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf516", "300", "50", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
</p>
<p>幅と高さを指定して貼り付ける</p>
<pre><code>[embedSWF]hoge.swf, 200, 100[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfbdf517">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf517", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
</p>
<p>右寄せにしてflashvarsを渡す</p>
<pre><code>[embedSWF]hoge.swf, 200, 100, right,,,{aaa:"10"}[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin-left: auto; background: #ffffff;"><div id="swfbdf518">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf518", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {aaa:"10"}, {}, {});
</script>
</p>
<p>htmlのidとname属性を付加する</p>
<pre><code>[embedSWF]hoge.swf, 200, 100,,,,{},{},{id:"sample", name:"sample"}[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfbdf519">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf519", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {id:"sample",name:"sample"});
</script>
</p>
<p>全パラメータを指定する（プレイヤーは9.0.0以上、プレイヤーバージョンが低い場合はhttp://hogehoge.jp/alt.swfを表示、aaa=10という変数をswfに渡す、右クリックメニューを出さない、htmlとswfの通信を常に許可する、htmlのidとname属性をsampleとする）</p>
<pre><code>[embedSWF]hoge.swf, 400, 360, center, 9.0.0, http://hogehoge.jp/alt.swf, {aaa:"10"}, {menu:"false", allowScriptAccess:"always"}, {id:"sample", name:"sample"}[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin: auto; margin-right: auto; background: #ffffff;"><div id="swfbdf520">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfbdf520", "200", "100", "9.0.0", "http://hogehoge.jp/alt.swf", {aaa:"10"}, {menu:"false",allowScriptAccess:"always"}, {id:"sample",name:"sample"});
</script>
</p>
<p><strong id="wp_al_swobject_swfobjectversion">・使用するSWFObjectのバージョン</strong><br />
管理画面から切り替えられます（デフォルトでは2.1）。<br />
バージョン1.5～2.2まで対応していますが、現在のところ1.5のattributesと2.2の新機能である<a href="http://code.google.com/p/swfobject/wiki/whats_new">Callback method</a>は指定できません。</p>
<p><strong id="wp_al_swobject_license">・ライセンス</strong><br />
元にしたWP-SWFObjectが<a href="http://sourceforge.jp/projects/opensource/wiki/licenses%2FGNU_General_Public_License">GPLライセンス</a>なのでGPLでお願いします。</p>
<p><strong>追記 09.04.24</strong><br />
使用方法が2エントリに分割されていたので、1つにまとめました。<br />
swfの幅と高さが省略可能となりましたので、それに伴いエントリ内容を修正しました。<br />
プラグインの紹介に特化するため、前段部分の文章（下記のもの）を削除しました。</p>
<blockquote><p><a href="http://blog.alumican.net/2009/04/17_134737">前回のエントリ</a>にも書いたのですが、WordPressにswfを貼り付けるには<a href="http://wordpress.org/extend/plugins/wp-swfobject/">WP-SWFObjectプラグイン</a>が便利です。が、どうにもparamsとattributeを指定できないようなので、プラグインを自作しました。（WP-SWFObjectでのflashvarsの渡し方は<a href="http://blog.alumican.net/2009/04/17_134737#comments">コメント欄で</a>まつもとさんに教えていただきました、ありがとうございます！）</p></blockquote>
<p><strong>追記 09.05.11</strong><br />
<a href="http://www.libspark.org/wiki/alumican/WP-Al-SWFObject">SparkProjectにコミット</a>しました。</p>
<p><strong>追記 09.05.18</strong><br />
<a href="http://blog.alumican.net/2009/05/18_005204">英語版エントリ</a>を書きました。</p>
<p><strong>追記 09.06.30</strong><br />
<a href="/2009/06/30_151045">v2.1にバージョンアップしました</a>。wp_al_swfobject_echo関数により、エントリー以外の場所でもswfの貼り付けが可能となりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/19_233117/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>終・Eseclockを改造しました</title>
		<link>http://blog.alumican.net/2009/04/14_152001</link>
		<comments>http://blog.alumican.net/2009/04/14_152001#comments</comments>
		<pubDate>Tue, 14 Apr 2009 06:20:01 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Eseclock]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[UNIQLOCK]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=445</guid>
		<description><![CDATA[ESEQLOCK アナログ時計バージョン
第1回、第2回と連載してきた、一体誰が得をするのか分からないこのEseclock改造版の解説シリーズも、今回をもって最後とさせていただきます。最後は、
『時計表示（と下のテキスト [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/eseqlock/sample07.html" rel="shadowbox"><img src="http://blog.alumican.net/wp-content/uploads/2009/04/eseclock3.png" alt="Eseclock" title="Eseclock" width="478" height="200" class="alignnone size-full wp-image-368" /></a><a href="http://lab.alumican.net/eseqlock/sample07.html" rel="shadowbox">ESEQLOCK アナログ時計バージョン</a></p>
<p><a href="/2009/04/07_222813">第1回</a>、<a href="/2009/04/10_041347">第2回</a>と連載してきた、一体誰が得をするのか分からないこのEseclock改造版の解説シリーズも、今回をもって最後とさせていただきます。最後は、<br />
<strong>『時計表示（と下のテキスト）を好きなビジュアルにしよう』</strong><br />
です。でもあまり解説することがないです（ぉぃ</p>
<p><span id="more-445"></span></p>
<p><strong>5．時計下のテキスト部分（以下テキスト）を書き換える</strong><br />
これは簡単で、</p>
<pre><code>description = "EBISU / JAPAN"</code></pre>
<p>などとすれば良いです。これでデフォルトの「TOKYU / JAPAN」が「EBISU / JAPAN」となります。恵比寿とした理由は職場が恵比寿だからです。僕の怠慢により、EseclockがaddChildされた後に書き換えないと例外エラーが出るかも知れません。ごめんなさい。<br />
　</p>
<p><strong>6．時計やテキストを好きな形式のTextFieldで表示する</strong><br />
この場合、表示に使用したいTextFieldをもったカスタムクラスを作成する必要があります。</p>
<p>まず、時計やテキストを好きなフォントで表示する場合です。この場合、表示に使用したいテキストフィールドをもったカスタムクラスを作成する必要があります。今回、サンプルではテキストののカスタムクラスをCustomClockFieldクラスとして、Helveticaフォントで表示することにしました。flaファイル内のライブラリに、TextFieldをもったCustomDescriptionFieldというムービークリップがあり、CustomDescriptionFieldクラスに関連づけられています。</p>
<p>そして、CustomDescriptionField.asを見てみると、CustomDescriptionFieldクラスはEseclockDefaultDescriptionTextFieldを継承しているのが分かるかと思います。このEseclockDefaultDescriptionTextFieldクラス（以下デフォルトクラス）は、Eseclockにデフォルトで表示されるテキストを管理するクラスです。</p>
<p>今回のようにデフォルトの表示からの変更点がTextFormatのみの場合、カスタムクラスにデフォルトクラスを継承させるとほとんど何もすることがありません。カスタムクラスのコンストラクタ内で、表示に使用したいTextFieldインスタンスを_fieldプロパティに渡してあげればカスタマイズ完了です。以下、テキスト部分のカスタムクラスです。ソースコードはsample\06に入っています。</p>
<pre><code>package {
    import flash.text.TextField;
    import flash.text.TextFormat;
    import org.libspark.eseclock.textfield.EseclockDefaultDescriptionTextField;

    //時計に使うクラスはEseclockDefaultClockTextFieldを, テキストに使うクラスはEseclockDefaultDescriptionTextFieldをそれぞれ継承させる
    public class CustomDescriptionField extends EseclockDefaultDescriptionTextField {

        //ライブラリのCustomDescriptionFieldシンボルの中に配置してあるTextField
        public var tf:TextField;

        //コンストラクタ
        public function CustomDescriptionField():void {

            //tfというTextFieldインスタンスを表示に使う
            _field = tf;

            //ボールド表示にしてみる
            var fmt:TextFormat = _field.defaultTextFormat;
            fmt.bold = true;
            _field.defaultTextFormat = fmt;
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample06.html" rel="shadowbox">Sample</a><br />
　</p>
<p><strong>7．時計やテキストを好きなように表示する</strong><br />
デフォルト表示では例えば「01 23 45」のように、時分秒の間に半角スペースを入れることで時間を1つのTextFieldのみで表示しています。しかし今回は字詰めの関係で時分秒を3つのTextFieldに分けることにしました。このカスタマイズは、デフォルトのTextFieldのtextFormatを変更するだけでは対応できません。そこで、時計部分のデフォルトクラス（EseclockDefaultClockTextFieldクラス）を継承させずにカスタムクラスを作ります。継承させてもいいのですが、この場合ほとんどのメソッドをオーバーライドしないといけないので継承させない方がてっとり早いと思います。。。</p>
<p>実際どうやるかというと、ライブラリのCustomClockFieldというムービークリップに3つのTextFieldを入れて、CustomClockFieldクラスに関連づけておきます。ここで大事なのは、CustomClockFieldクラスにIEseclockTextFieldインターフェースを実装させるということです。</p>
<p>IEseclockTextFieldインターフェースは、カスタムクラスがEseclockの時計もしくはテキストとして振る舞うために、最低限必要なメソッドをまとめたインターフェースとなっており、カスタムクラスは以下のメソッドを実装する必要があります。</p>
<p><strong>・objectWidth、objectHeight メソッド</strong><br />
時計またはテキストの幅および高さを取得するためのgetterメソッドです。</p>
<pre><code>function get objectWidth():Number;
function get objectHeight():Number;</code></pre>
<p><strong>・setColor メソッド</strong><br />
表示オブジェクトの色を変更するメソッドです。<br />
表示オブジェクトを、引数で指定された色へと変更するコードを実装することになります。</p>
<pre><code>function setColor(color:uint):void;</code></pre>
<p><strong>・updateClock メソッド</strong><br />
時計を表示するカスタムクラスの場合、毎秒updateClockメソッドが呼び出されます。<br />
引数としてh（時）、m(分)、s(秒)を受け取れるので、その情報を元に時計を書き換えることになります。</p>
<pre><code>function updateClock(h:uint, m:uint, s:uint):void;</code></pre>
<p><strong>・updateDescription メソッド</strong><br />
テキストを表示するカスタムクラスの場合、テキストが書き換わったタイミングでupdateDescriptionメソッドが呼び出されます。<br />
引数としてmessage（テキストの内容)を受け取れるので、その情報を元にテキストを書き換えることになります。</p>
<pre><code>function updateDescription(message:String):void;</code></pre>
<p>　</p>
<p>以下、テキスト部分のカスタムクラスです。時計部分を3つのTextFieldに分けています。ソースコードは上記と合わせてsample\06に入っています。</p>
<pre><code>package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import org.libspark.eseclock.Eseclock;
    import org.libspark.eseclock.textfield.IEseclockTextField;

    public class CustomClockField extends Sprite implements IEseclockTextField {

        //ライブラリのCustomDescriptionFieldシンボルの中に配置してあるTextField
        public var hours:TextField;
        public var minutes:TextField;
        public var seconds:TextField;

        /**
         * objectWidth, objectHeightは時計全体のサイズを返す
         */
        public function get objectWidth():Number { return seconds.x + seconds.textWidth; }
        public function get objectHeight():Number { return hours.textHeight; }

        /**
         * コンストラクタ
         */
        public function CustomClockField():void
        {
            //それぞれのTextFieldのフォーマットを調整
            var fmt:TextFormat = hours.defaultTextFormat;
            fmt.letterSpacing = -3;
            hours.defaultTextFormat   = fmt;
            minutes.defaultTextFormat = fmt;
            seconds.defaultTextFormat = fmt;
        }

        /**
         * 色を設定する関数
         * @param color 16進数で表された色情報
         */
        public function setColor(color:uint):void
        {
            //それぞれのTextFieldの色を更新
            var fmt:TextFormat = hours.defaultTextFormat;
            fmt.color = color;
            hours.defaultTextFormat   = fmt;
            minutes.defaultTextFormat = fmt;
            seconds.defaultTextFormat = fmt;
        }

        /**
         * 時計表示を更新する関数
         * @param h 時
         * @param m 分
         * @param s 秒
         */
        public function updateClock(h:uint, m:uint, s:uint):void
        {
            //それぞれのTextFieldのtextを更新
            hours.text   = Eseclock.toDigitString(h);
            minutes.text = Eseclock.toDigitString(m);
            seconds.text = Eseclock.toDigitString(s);
        }

        /**
         * テキストを更新する関数
         * @param message 表示文字列
         */
        public function updateDescription(message:String):void
        {
            //CustomClockFieldは時計用クラスなので何も書かなくて良い
            //テキスト用のカスタムクラスを作るときは textField.text = message; などと書く
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample06.html" rel="shadowbox">Sample（上記サンプルと同じもの）</a></p>
<p>最後に、時計部分にTextFieldすら使用しないサンプルを置いておきます。基本方針は上述の、TextFieldを3つに増やすカスタマイズと同じです。ライブラリに空のシンボルを作り、CustomClockFieldクラスに関連付けておきます。ソースコードは上記と合わせてsample\07に入っています。<br />
&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample07.html" rel="shadowbox">Sample</a></p>
<p>Eseclockは時計の下にテキストが配置されるように、objectHeightを用いて自動でy座標を調整します。上記サンプルでは時計とテキストを常にEseclockの中心に配置したかったので、objectWidthとobjectHeightが0を返すようにしています。こうすることで座標調整はおこなわれず、両インスタンスの原点が常にEseclockの中心に揃うよう配置されるようになります。（インスタンスそれぞれの原点が、時計の中心もしくはTextFieldの中心に無ければなりませんが）。<br />
　</p>
<p><strong>終わりに</strong><br />
3回にわたって書いたEseclockのエントリですが、これで終わりにしたいと思います。いったいどれくらいの人が読んでくれているのかは分かりませんが（笑）、楽しいEseclockライフを送ってもらえればうれしいです。<br />
僕はEseclockばかり考えすぎて、ついUNIQLOで買い物をしてしまいました、1万円分（笑）</p>
<p>質問事項はコメント欄やメールでお気軽にどうぞー(o’c_,`人)・:*:・</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/14_152001/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>続・Eseclockを改造しました</title>
		<link>http://blog.alumican.net/2009/04/10_041347</link>
		<comments>http://blog.alumican.net/2009/04/10_041347#comments</comments>
		<pubDate>Thu, 09 Apr 2009 19:13:47 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Eseclock]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[UNIQLOCK]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=392</guid>
		<description><![CDATA[ESEQLOCK
前回のエントリに引き続き、今回もEseclockについてです。
テーマはずばり
『改造版Eseclockの使い方』
色々やり方はあると思いますが、ドキュメントクラスにEseclockを継承させる方法を紹 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/eseqlock/" rel="shadowbox"><img src="http://blog.alumican.net/wp-content/uploads/2009/04/eseclock2.png" alt="Eseclock" title="Eseclock" width="478" height="200" class="alignnone size-full wp-image-368" /></a><a href="http://lab.alumican.net/eseqlock/" rel="shadowbox">ESEQLOCK</a></p>
<p><a href="/2009/04/07_222813">前回のエントリ</a>に引き続き、今回も<a href="http://www.libspark.org/wiki/Eseclock">Eseclock</a>についてです。</p>
<p>テーマはずばり<br />
<strong>『改造版Eseclockの使い方』</strong><br />
色々やり方はあると思いますが、ドキュメントクラスにEseclockを継承させる方法を紹介します。誰も使わないかも知れない（ていうかむしろいつ使えるの？）なライブラリをこつこつ紹介するという、なんともストイックな企画です。</p>
<p><span id="more-392"></span><br />
　</p>
<p><strong>0．ライブラリをダウンロードする</strong><br />
SparkProjectはSubversion（以下SVN）というファイル管理ソフトによって全てのプロジェクトが管理されています。まず、このSVNから手元にライブラリをダウンロードする必要があります。詳しくはzyass_takさんの<a href="http://www.level-zyass.net/log/2008/05/spark-project.html">こちらの記事</a>がわかりやすいので参考にしてください。</p>
<p>さて、無事にライブラリを落とし終わって中身をのぞいてみると、いくつものフォルダがあると思います。とりあえず、http://www.libspark.org/svn/をチェックアウトしたものとして、as3\Eseclock\branches\alumican\srcフォルダの中にあるcaurina、org、jpフォルダをコピーして、自分のflaファイルのあるフォルダにペーストします。別階層にペーストする場合には、ライブラリフォルダまでのクラスパスを適宜通しておいてください（CS3の場合は[パブリッシュ設定]->ActionScriptのバージョンの隣の[設定]->クラスパス）。これで準備は完了です。おそらく.svnという隠しフォルダもペーストされたかと思いますが、これは削除していただいて構いません。なお、サンプルはソースコード含めCS3形式でas3\Eseclock\branches\alumican\samplesフォルダに入っています。<br />
　</p>
<p><strong>1．とりあえず動かしてみる</strong><br />
何はともあれ、ドキュメントクラスを作ります。今回はMain.asという名前のクラスを作りました。MainクラスにEseclockを継承させているだけです。サンプルのソースコードはsample\01に入っています。</p>
<pre><code>package {
    import org.libspark.eseclock.Eseclock;

    //Eseclockクラスを継承させる
    public class Main extends Eseclock {

        public function Main():void {
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample01.html" rel="shadowbox">Sample</a><br />
ドキュメントクラスとして設定するのを忘れずにパブリッシュすると、白黒の時計の合間に水玉が表示される何とも味気のないUNIQLOCKもどきができるかと思います。これがプレーンな状態ですが、この時点で時計部分の大きさを保ったまま自動でステージにフィットするようになっています。これを元に拡張していきます。<br />
　</p>
<p><strong>2．色を変えてみる</strong><br />
白黒だとつまらないので、ランダムな色のカラフルな時計にします。本家UNIQLOCKを真似して、白黒からランダム色と白色に変えます。Mainクラスのコンストラクタ内で、親クラス、つまりEseclockのコンストラクタを呼び出します。サンプルのソースコードはsample\02に入っています。</p>
<pre><code>package {
    import org.libspark.eseclock.Eseclock;

    public class Main extends Eseclock {

        public function Main():void {
            //1番目と2番目の引数で色を指定する
            super(uint(Math.random() * 0xffffff), 0xffffff);
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample02.html" rel="shadowbox">Sample</a><br />
最初の引数と2番目の引数で、テキストと背景の2色を指定できます。ここでは、最初の引数で0から0xffffffまでのランダムな数値を渡し、2番目の引数で固定の白色を渡しています。ちなみに、色はコンストラクタで指定できる他にも、後からcolor1、color2プロパティで変えることができます。<br />
ちょっと華やかなEseclockができました。<br />
　</p>
<p><strong>3．好きな動画を時計の合間に表示する</strong><br />
やはり、UNIQLOCKもどきなるもの、時計の合間には水玉ではなく好きなコンテンツを表示したいです。改造版Eseclockでは、_createContentメソッドをオーバーライドすることでこれを実現できます。_createContentメソッドはコンテンツが表示される直前に毎回呼ばれ、2つの引数wとhを受け取ってDisplayObjectを返します。要は、wとhのサイズ作ったビジュアルをreturnすれば次の瞬間それが表示されるというわけです。サンプルでは、FLVPlaybackコンポーネントを使って動画を再生してみます。動画を何本も用意するのは面倒なので、1本の動画をランダムにシークさせて再生するようにします。</p>
<p>手順は少し複雑です。まず、動画を読み込むまで時間がかかるので、Eseclockを停止しておきます。そして、動画の読み込みが終わった後に、Eseclockをスタートさせます。Eseclock実行中、_createContentが呼ばれる度に動画をランダムにシークして再生させます。そして動画から時計に戻る瞬間に、動画がバックグラウンドで再生され続けないようにFLVPlaybackを一時停止します。</p>
<p>ひとつずつ考えていきます。</p>
<p><span style="color: #339966;">&gt;Eseclockを停止しておきます。</span><br />
EseclockはデフォルトでaddChildされた瞬間にスタートしますが、コンストラクタの第6引数（autoPlay）をfalseに設定することで自動再生させないようにできます。この場合、任意のタイミングでstartメソッドを呼び出すことでEseclockをスタートさせられます。</p>
<p><span style="color: #339966;">&gt;Eseclock実行中、_createContentが呼ばれる度に動画をランダムにシークして再生させます。</span><br />
_createContentメソッド内で、FLVPlaybackをseekしてplayすればいいかと思います。</p>
<p>&gt;動画から時計に戻る瞬間に、動画がバックグラウンドで再生され続けられないように一時停止します。<br />
改造版Eseclockでは、_createContentメソッドの他にもいくつかオーバーライド可能なメソッドが定義されています。その一つが_removeContentで、このメソッドはコンテンツが完全に隠れる瞬間に呼び出されます。このメソッドをオーバーライドして、FLVPlaybackをpauseなどすれば良さそうです。</p>
<p>以上をふまえたサンプルはこちらです。swfファイルと同階層にmovie.flvを置いておいてください。flv含めソースコードはsample\03に入っています。</p>
<pre><code>package {
    import fl.video.FLVPlayback;
    import fl.video.VideoEvent;
    import fl.video.VideoScaleMode;
    import flash.display.DisplayObject;
    import flash.events.Event;
    import org.libspark.eseclock.Eseclock;

    public class Main extends Eseclock {

        //時計の合間に表示するFLVを再生させるFLVPlayback
        private var _flvp:FLVPlayback;

        public function Main():void {
            //自動スタートさせないように第6引数（autoPlay）をfalseにしておく。第3、第4、第5引数はとりあえずデフォルトのまま
            super(uint(Math.random() * 0xffffff), 0xffffff, 640, 320, true, false);

            addEventListener(Event.ADDED_TO_STAGE, _initialize);
        }

        //addChildされるのを待ってから初期化をおこなう
        private function _initialize(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, _initialize);

            //FLVの読み込み
            _flvp = new FLVPlayback();
            _flvp.autoPlay = false;
            _flvp.autoRewind = false;
            _flvp.scaleMode = VideoScaleMode.EXACT_FIT;
            _flvp.addEventListener(VideoEvent.READY, _flvpRedyHandler);
            _flvp.load("movie.flv");
        }

        //動画の再生準備完了時に呼び出されるイベントハンドラ
        private function _flvpRedyHandler(e:VideoEvent):void {
            _flvp.removeEventListener(VideoEvent.READY, _flvpRedyHandler);

            //Eseclockスタート
            start();
        }

        //コンテンツが表示される直前に呼び出されるメソッド
        override protected function _createContent(w:Number, h:Number):DisplayObject {
            //再生開始位置をランダムで選択(動画が途中で終わらないように, 6秒ほど余裕を持たせておく)
            var head:uint = uint(Math.random() * (_flvp.totalTime - 6));

            //EseclockのサイズにFLVPlaybackをフィットさせる
            _flvp.width  = w;
            _flvp.height = h;

            //FLVPlaybackを再生する
            _flvp.seek(head);
            _flvp.play();

            return _flvp;
        }

        //コンテンツが完全に隠れる直前に呼び出されるメソッド
        override protected function _removeContent(content:DisplayObject):void {
            //動画がが裏側で再生され続けないように一時停止処理をかけておく
            FLVPlayback(content).pause();
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample03.html" rel="shadowbox">Sample</a><br />
ちょっと長いですが、大半は動画の読み込み処理のコードです。大事なのはコンストラクタのautoPlay、startメソッド、_createContentメソッド、_removeContentメソッドです。ちなみに_removeContentでは引数として表示中のコンテンツを受け取れます。サンプルではこのcontent引数を使ってFLVPlaybackを停止させていますが、この例ではFLVPlaybackをインスタンス変数_flvpとして保持しているので、_flvp.pause();で全く問題ありません。<br />
だんだんそれっぽくなってきました。<br />
　</p>
<p><strong>4．ピッピッピッピッポーン音を付ける</strong><br />
よりそれらしくするために、時報の音（ピッ音とポーン音）を付けたいと思います。どうやらピッ音は秒数の一の位が0以外の時に鳴って、ポーン音は秒数の一の位が0の時になるようです。改造版Eseclockでは、こういった毎秒の処理を簡単におこなうために_tickメソッドをオーバーライドできるようになっています。_tickメソッドは毎秒呼び出され、引数として時分秒を表す3つの引数h、m、sを受け取ることができます。サンプルでは、リンケージされた2つのライブラリのサウンドオブジェクトSound1（ピッ音）とSound2（ポーン音）を使って時報の音を鳴らします。<br />
実際のコードはこちらです。サウンドデータ含めソースコードはsample\01に入っています。</p>
<pre><code>package {
    import fl.video.FLVPlayback;
    import fl.video.VideoEvent;
    import fl.video.VideoScaleMode;
    import flash.display.DisplayObject;
    import flash.events.Event;
    import org.libspark.eseclock.Eseclock;

    public class Main extends Eseclock {

        private var _flvp:FLVPlayback;

        private var _sound1:Sound1; //ピッ音
        private var _sound2:Sound2; //ポーン音

        public function Main():void {
            super(uint(Math.random() * 0xffffff), 0xffffff, 640, 320, true, false);
            addEventListener(Event.ADDED_TO_STAGE, _initialize);
        }

        private function _initialize(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, _initialize);
            _flvp = new FLVPlayback();
            _flvp.autoPlay = false;
            _flvp.autoRewind = false;
            _flvp.scaleMode = VideoScaleMode.EXACT_FIT;
            _flvp.addEventListener(VideoEvent.READY, _flvpRedyHandler);
            _flvp.load("movie.flv");

            //ライブラリのサウンドを割り当てる
            _sound1 = new Sound1();
            _sound2 = new Sound2();
        }

        private function _flvpRedyHandler(e:VideoEvent):void {
            _flvp.removeEventListener(VideoEvent.READY, _flvpRedyHandler);
            start();
        }

        override protected function _createContent(w:Number, h:Number):DisplayObject {
            var head:uint = uint(Math.random() * (_flvp.totalTime - 6));
            _flvp.width  = w;
            _flvp.height = h;
            _flvp.seek(head);
            _flvp.play();
            return _flvp;
        }

        override protected function _removeContent(content:DisplayObject):void {
            _flvp.pause();
        }

        //_tickメソッドは毎秒呼び出される
        override protected function _tick(h:uint, m:uint, s:uint):void {

            if (s % 10 == 0) {
                //秒数の一の位が0ならポーン音を鳴らす
                _sound2.play();

            } else {
                //それ以外ならポーン音を鳴らす
                _sound1.play();
            }
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample04.html" rel="shadowbox">Sample</a><br />
だいぶ良い感じに仕上がってきました。</p>
<p>さらに、コンテンツが表示されるときには音量がフェードインし、コンテンツが隠れるときには音量がフェードアウトする演出を、TweenerのSoundShortcutsを使って実装したサンプルを置いておきます。ソースコードはsample\05フォルダに入っています。<br />
&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample05.html" rel="shadowbox">Sample</a></p>
<p>今回は必要ないのですが、ついでに紹介しておくと、オーバーライド可能なメソッドはもう1つあります。それは、コンテンツを表示中にEseclockがリサイズされたときにだけ呼び出される_resizeContentメソッドです。このメソッドでは3つの引数content、w、hを受け取れて、それぞれ表示中のコンテンツ、リサイズ後のEsclockの幅、リサイズ後のEseclockの高さを表しています。_resizeContentメソッドはデフォルトで</p>
<pre><code>content.width  = w;
content.height = h;</code></pre>
<p>を実行するため、今回のようにFLVPlaybackを縦横比無視でEseclockのサイズにフィットさせるぶんには特にオーバーライドする必要がありません。しかし、コンテンツの縦横比を無視したくない場合などには適宜オーバーライドする必要があるかと思います。</p>
<p>今回はここまでです。</p>
<p><a href="http://blog.alumican.net/2009/04/14_152001">次回</a>は、時計表示部分と時計下のテキスト表示部分を好きなフォーマットに組み替える方法を紹介します。<br />
みんなでおもしろいEseclock作品を作ると楽しそうですね～(o’c_,`人)・:*:・</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/10_041347/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eseclockを改造しました</title>
		<link>http://blog.alumican.net/2009/04/07_222813</link>
		<comments>http://blog.alumican.net/2009/04/07_222813#comments</comments>
		<pubDate>Tue, 07 Apr 2009 13:28:13 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Eseclock]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[UNIQLOCK]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=345</guid>
		<description><![CDATA[ESEQLOCK
先日開催されたSpark project 勉強会 #08で、BeInteractive!のyossyさんが自身の発表時にライブコーディングされていたEseclockライブラリを拡張したのでご紹介します。 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/eseqlock/" rel="shadowbox"><img src="http://blog.alumican.net/wp-content/uploads/2009/04/eseclock.png" alt="Eseclock" title="Eseclock" width="478" height="200" class="alignnone size-full wp-image-368" /></a><a href="http://lab.alumican.net/eseqlock/" rel="shadowbox">ESEQLOCK</a></p>
<p>先日開催された<a href="http://wiki.libspark.org/wiki/SparkStudy/08">Spark project 勉強会 #08</a>で、<a href="http://www.be-interactive.org/">BeInteractive!</a>のyossyさんが自身の発表時にライブコーディングされていたEseclockライブラリを拡張したのでご紹介します。</p>
<p><a href="http://www.libspark.org/wiki/Eseclock/">http://www.libspark.org/wiki/Eseclock/</a></p>
<p>Eseclockライブラリとは、UNIQLOCKっぽい何かが作れるライブラリです。UNIQLOCKでいうダンス的な部分をユーザーが自由に変更しながら、UNIQLOCKっぽいビジュアルを簡単に作れちゃいます。</p>
<p><span id="more-345"></span></p>
<p><strong>オリジナルの使い方</strong></p>
<ol>
<li>Eseclockクラスを継承したクラス（ここではMyEseclockクラスとする）を作ります。</li>
<li>MyEseclockクラスでは、EseclockクラスのcreateContentメソッドをオーバーライドしておきます。ここで、createContentメソッドには時計の合間に表示するコンテンツを返り値とします。このcreateContentメソッドはコンテンツが表示される直前（秒の一の位が6のとき）に毎回呼び出されます。</li>
<li>addChild(MyEseclock(0xff9933, 0xffffff));<br />
引数で時計と背景色の色を指定します。</li>
<li>( ﾟДﾟ)ｳﾏｰ</li>
</ol>
<p><strong>今回僕が改造したオリジナルからの変更点はこちら</strong></p>
<ul>
<li>描画更新されるときの、色やコンテンツが切り替わるときのアニメーションを追加しました。</li>
<li>時計の下表示する文字列を追加および編集可能にしました。</li>
<li>リサイズに対応し、自動でステージにフィットさせるようにしました。また、固定サイズでの表示にも対応しました。</li>
<li>色を途中で変更できるようにしました。</li>
<li>addChildと同時にスタートさせないオプションを追加しました。それに伴い、任意のタイミングでスタートさせるためのメソッド（startメソッド）を追加しました。</li>
<li>コンテンツが表示される直前に呼び出されるメソッドの名前を変更しました。（createContent→_createContent）</li>
<li>コンテンツが表示されている間にEseclockがリサイズされた場合に呼び出されるメソッド（_resizeContentメソッド）を追加しました。</li>
<li>コンテンツが非表示にされる直前に呼び出されるメソッド（_removeContentメソッド）を追加しました。</li>
<li>毎秒必ず呼び出されるメソッド（_tickメソッド）を追加しました。</li>
<li>_createContent、_resizeContent、_removeContent、_tickを自由に定義するためには各メソッドをサブクラスでオーバーライドする必要がありますが、継承を用いない場合でもcreateContent、resizeContent、removeContent、tick変数に関数を代入することで同様の結果を得られるようにしました。</li>
<li>IEseclockTextFieldを実装したクラスなら何でも、時計表示および文字列表示部分に使えるようにしました。これにより、好きなフォントを埋め込んだテキストフィールドやライブラリに登録したシンボルを時計や文字列部分に使えるようになりました。</li>
</ul>
<p><a href="http://www.libspark.org/browser/as3/Eseclock/branches/alumican/src/org/libspark/eseclock">改造版のソースコード</a>（使うときはhttp://www.libspark.org/browser/as3/Eseclock/branches/alumican/src以下全部をごそっと持って行ってください）</p>
<p>こうして見ると結構拡張していますが、使い方は極力簡単にしました。<a href="http://www.trick7.com/blog/">trick7</a>のteraさんの言葉をお借りすると、ライブラリは必殺技ですから。「メラ」のたった二文字で火が出たら格好いいじゃあないですか。</p>
<p>まぁそもそもalumican.netは長い詠唱が必要なほど強大な魔法を唱えるにはMPが足りていないので、メラヒャドギラバギで行かせていただきます。でも、その気になればオプション的に自由に拡張していける仕様にはしているつもりなので、次回よりその辺もふまえて段階的に説明していきます。</p>
<p><strong>最後に、一番簡単な使い方</strong></p>
<p><img src="http://blog.alumican.net/wp-content/uploads/2009/04/eseclock_doc.png" alt="Eseclock DocumentClass" title="Eseclock DocumentClass" width="478" height="82" class="alignnone size-full wp-image-367" /><br />
これだけです。0行でおわり<br />
&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample01.html" rel="shadowbox">Sample</a></p>
<p>まさかの<a href="/2009/04/10_041347">次回</a>へ続く(o’c_,`人)・:*:・</p>
<p>　<br />
<strong>追記 09.04.08</strong><br />
<a href="http://twitter.com/bao_bao">Shunsuke Ohba</a>さんが改造版Eseclockを使って<a href="http://reinit.info/blog/?p=496">Air版Eseclock</a>を作られました。Eseclockにドロップしたテキストファイルや画像ファイルがランダムに表示されます。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/07_222813/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
