/Applications/Adobe Flash Builder 4.5/sdks/4.5.1_AIR3
また、パスが通るように .bash_profile に環境変数を記述する。export PATH=$PATH:/Applications/Adobe\ Flash\ Builder\ 4.5/sdks/4.5.1_AIR3/bin
ADTの使い方は、コマンドラインツールを使用した AIR アプリケーションの作成 にドキュメントがあります。 ane 化するにはコマンドが面倒なので、何かツールを作るのがいいかもしれない。 その前に、どんなオプションがあるか知る必要がありますが・・・。AdobeAIRSDK/include/FlashRuntimeExtensions.h
のインポートが必要 - include/FlashRuntimeExtensions.h をインポート - FREObject、FRENamedFunction等のクラスがある(ドキュメント不明)
<extensions>
<extensionID>com.yoo-s.ane.HelloWorldANE</extensionID>
</extensions>
ざっとした概要ですが、ちょっとサンプルアプリ作りたくなってきました。
再生できない!(爆)
ずっと前に、FLVPlayer を利用した記憶があったが、Flash コンポーネントには、MediaController と MediaDisplay と MediaPlayBack がある。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="300" height="70">
<param name="movie" value="sound_player.swf" >
<param name="quality" value="high">
<param name="FlashVars" value="sound_file_name=19.mp3" >
<EMBED src="sound_player.swf" FlashVars="sound_file_name=19.mp3" width="300" height="70" type="application/x-shockwave-flash"></object>
引数は、FlashVars で渡してやります。
(例の場合、sound_file_name=19.mp3) 2009年に発表されてたって知らなかったorz
いやぁ、作るアプリによっては Flex 4 でのスマフォ開発はありかも知れない。 という事で、家にあった 「Sony PaSoRi」カードリーダー(Windows用)を Mac で試してみる事に。 しかも Air アプリです!Amazon の API にActionScript がない!
って、ことでSWCライブラリを作ったそうです。 認証部分が面倒らしく、そこら辺をFlex仕様でまとめてます。 基本インスタンスを作成して、プロパティを設定するだけ。 これ見て、「あぁやっぱAmazonのサーバ使おうかな?」と思ったりw
function wlby_calc_timeout(c) {
var timeout = (new Date).getTime();
while (c) {
timeout += parseFloat(getComputedStyle(c)['-webkit-animation-duration']) * 1000;
c.timeout = Math.round(timeout);
c = c.nextElementSibling;
}
}
var wlby_hide_children = function(self) {
var c = self.firstElementChild;
while (c) {
c.style.display = 'none';
c = c.nextElementSibling;
}
}
var wlby_activate_sibling = function(evt, self) {
if (evt.srcElement != self)
return;
if (self.style.display == 'none')
return;
if (!self.timeout)
wlby_calc_timeout(self);
self.style.display = 'none';
var sibling = self.nextElementSibling;
if (!sibling)
return;
while ((sibling.timeout < evt.timeStamp)&&sibling.nextElementSibling)
sibling = sibling.nextElementSibling;
// $('.wlby_fs', sibling).css('display', 'none');
// var n = new Number((sibling.timeout - (new Date).getTime()) / 1000);
// sibling.style.webkitAnimationDuration = n.toString() + 's';
sibling.style.display = 'block';
};
var wlby_activate_children = function(evt, self) {
if (evt.srcElement != self)
return;
wlby_hide_children(self);
var c = self.firstElementChild;
if(!c)
return;
// $('.wlby_fs', c).css('display', 'none');
wlby_calc_timeout(c);
c.style.display = 'block';
c.style.webkitAnimationDelay = '';
}
var wlby_loop_children = function(evt, self) {
if (evt.srcElement != self)
return;
wlby_activate_children(evt, self);
var c = self.firstElementChild;
if (!c)
return;
c.style.webkitAnimationDelay = '0s';
}
$(document).ready(function() {
$('.wlby_sprite').each(function()
{ this.addEventListener('webkitAnimationIteration', function(evt) { wlby_loop_children(evt, this); return false; }, false, false) });
$('.wlby_sprite, .wlby_graphic').each(function()
{ this.addEventListener('webkitAnimationStart', function(evt) { wlby_activate_children(evt, this); return false; }, false, false) });
$('.wlby_fs').each(function()
{ this.addEventListener('webkitAnimationEnd', function(evt) { wlby_activate_sibling(evt, this); return false; }, false, false) });
});
■CSSの一部抜粋
・@-webkit-keyframe の opacity でフェイドイン・フェイドアウトを実現している
[css]
@-webkit-keyframes wlby_frameset-animation {
from { }
to { }
}
.wlby_fs, .wlby_graphic
{
-webkit-animation-name: wlby_frameset-animation;
}
.wlby_graphic
{
-webkit-animation-duration: 1s;
}
.wlby_masked
{
height: inherit;
position: inherit;
width: inherit;
}
.wlby_sprite
{
-webkit-animation-name: wlby_frameset-animation;
-webkit-animation-iteration-count: infinite;
}
@-webkit-keyframes wlby_KF_3 {
from, 4.49% {
-webkit-transform: matrix(1, 0, 0, 1, -0.452, -5.589) skew(-69.891deg,27.062deg) scale(1.0112, 0.2792);
opacity: 0.200259;
}
5.61%, 8.98% {
-webkit-transform: matrix(1, 0, 0, 1, -0.452, -5.589) skew(-69.891deg,27.062deg) scale(1.0112, 0.2792);
opacity: 0.168419;
}
10.11%, 14.6% {
-webkit-transform: matrix(1, 0, 0, 1, -0.452, -5.589) skew(-69.891deg,27.062deg) scale(1.0112, 0.2792);
opacity: 0.200259;
}
....
.wlby_4
{
-webkit-animation-duration: 2.90323s;
-webkit-transform: matrix(1, 0, 0, 1, -25.05, -29);
-webkit-transform-origin: 20px 106.95px;
}
.wlby_47
{
-webkit-animation-duration: 0.0322581s;
display: none;
position: absolute;
-webkit-transform: matrix(1, 0, 0, 1, -13.95, -28.55);
}
.wlby_48
{
-webkit-animation-duration: 0.0322581s;
display: none;
position: absolute;
-webkit-transform: matrix(1, 0, 0, 1, -13.65, -28.25);
}
[/css]
<android>
<manifestAdditions><![CDATA[
<manifest>
<!-- See the Adobe AIR documentation for more information about setting Google Android permissions -->
<uses-permission android:name="android.permission.INTERNET">
</manifest>
]]></manifestAdditions>
</android>
続きはあとで