Posts tagged: actionscript3

WiiFlash(mac) で BalanceBoard をさっそくつなげていじってみた

By admin | 2009年2月11日

id:yuma_flughafen に11日が祝日だと言われて気づいたので土日まで待てずにいじってみました。
ちなみに これw
で、つなげるまでの方法をまたも忘れていたのでそれとできることを少し書いときます。

できること

  • バランスボードの4点の圧力がとれる
  • 圧力の中心の座標がとれる
  • 体重がとれる

ライブラリの使い方は基本的に wii リモコンと同じ。
コネクトエラーとかの処理を省き、ただ動作させるだけなら flash 側はこれだけで動作します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.wiiflash.Wiimote;
import org.wiiflash.events.WiimoteEvent;
import flash.events.Event;
 
var wiimote:Wiimote = new Wiimote();
myWiimote.connect ();
myWiimote.addEventListener( WiimoteEvent.UPDATE, onUpdated );
 
function onUpdated ( e:WiimoteEvent ):void {
        //全体の圧力(体重はこれ)
	total:Number = e.target.balanceBoard.totalKg;
 
        //4点の圧力
	topLeft:Number = e.target.balanceBoard.topLeftKg;
	topRight:Number = e.target.balanceBoard.topRightKg;
	bottomLeft:Number = e.target.balanceBoard.bottomLeftKg;
	bottomRight:Number = e.target.balanceBoard.bottomRightKg;
 
        //中心の圧力の座標
        center:Point = e.target.balanceBoard.centerOfGravity;
}

WiimoteEvent.UPDATE で登録したメソッドで処理するだけですね。

BalanceBoard の繋げ方

で、地味にはなまったのがこっち。
認識しないことがよくあって困った。

  • WiiFlashServerJ を起動。
  • Bluetooth で BalanceBoard を接続。

これで接続がうまくいった際は WiiFlashServerJ の画面にアイコンが表示されます。
うまくいかない時は WiiFlashServerJ を再起動したり BalanceBoard を
つなげなおしたりをひたすらしてればいつかつながりますwwww


BalaceBoard のつなげかたは以前書いた日記を参考にしてもらえれば大丈夫かと。
WiiFlashを使ってflashでwiiリモコンを使ってみる(1)

ちなみにつながった画面はこんな感じ。

付属のサンプル
BalanceBoard 認識した画面

BalanceBoard で iphone のアプリの入力デバイスにできたらおもしろそうだと思った。
ちょっとがんばってみるかな。

Flex3.2 の reference (日本語) を Hyper Estraier で全文検索できるようにした

By admin | 2009年1月21日

[Flex][AIR] Adobe Flex 3 リファレンスガイドがダウンロード出来るようになりました。
を発見したのでさっそく以前に設置したものを最新のに変更してみた。
ちなみに前回は英語のリファレンスだったため、凄い便利になった。
最新のリファレンス探したりするだけでもめんどかったってのもあるけど。

新規に設置

LiveDocs をローカルに置くに詳細がのってるんでそのままやれば大丈夫。
以前もここを参考にして設置しました。感謝感謝。

既存の index をはりなおす

あってるかどうかは不明だけど、とりあえずこの順番でできた。
することは前の index を削除して最適化して新しく張り直す感じです。
メモも兼ねて細かいめで書いてます。環境は人によって違うのでパス系は気をつけてください。

[階層]
.  <= /var/www/flex-doc
|-- langref
|-- flex3jp_documentation.zip (<- ここを DL するところから書いてる)
|-- flex3jp_documentation
       |--  langref
 
/var/www/hyperestraier/flex3langref に hyperestraier の index がある。
/var/www/flex-doc/langref に referece の html がある。
estseek.*(config, cgi とか)  は /var/www/flex-doc/langref/ 以下にある。
#documentの取得
$wget http://livedocs.adobe.com/flex/3_jp/flex3jp_documentation.zip
 
#解凍
$unzip flex3jp_documentation.zip
$cd flex3jp_documentation/langref
 
#estseek の設定ファイルのコピー
$cp -r /var/www/flex-doc/langref/estseek.* .
 
#昔のファイルを削除(いる場合や不安な場合はどっかにバックアップとっといて下さい)
$rm -rf /var/www/fles-doc/langref
 
#index の削除
$ estcmd purge -cl /var/www/hyperestraier/flex3langref
 
#index の最適化
$estcmd optimize /var/www/hyperestraier/flex3langref
 
#reference の移動
$mv /var/www/flex-doc/flex3jp_documentation/langref /var/www/flex-doc/langref
 
#index 作成
$estcmd gather -cl -il ja -bc -sd -cm /var/www/hyperestraier/flex3langref /var/www/flex-doc/langref

ちなみに同じところに置いたのは conf のパスをかえたりするのがめんどくさかっただけという理由w
flex3 => flex3.2 だし別にいっかなとw

estseek.cgi にアクセスすると無事に検索することができました。
めでたしめでたし。
ちなみにこんな感じで検索することができます。
AutoPagerize に対応してくれているのが便利です。
demo

rascut で外部ファイル(img, xml) を読み込む時は要注意

By admin | 2009年1月18日

階層

.
|-- data.xml
|-- Test.as

Test.as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package {
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class Test extends Sprite {
        private var XML_URL:String = "http://example.com/data.xml";
        public var loader:URLLoader = null;
 
        public function Test() {
            loader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, onXMLLoaded);
            loader.load(new URLRequest(XML_URL));
        }
 
        private function onXMLLoaded(e:Event):void {
            trace(loader.data);
        }
    }
}

実行コマンド

rascut -s Test.as

これで http://localhost:3001/ にアクセスすると XML を読み込む swf が表示される。
で、ここからが問題。
URLLoader を使って外部リソースの読み込みを行う際に XML_URL を相対パスで指定すると
loader.data の中身が SWF を埋めこんでる HTML になります。

<html>
    <head>
      <title>Rascut</title>
      <style>
      * {
          margin:0;
          padding:0;
      }
      #content {
          text-align:center;
      }
      </style>
      <script type="text/javascript" src="/js/swfobject.js"></script>
          <script type="text/javascript">
    var Rascut = new Object;
 
    Rascut.xhr = (function() {
      if (typeof XMLHttpRequest != 'undefined') {
        return new XMLHttpRequest();
      } else {
        try {
          return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
          return new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
    })();
 
    Rascut.reloadObserver = function() {
        var x = Rascut.xhr;
        x.open('GET', '/reload?' + (new Date()).getTime(), true);
        x.onreadystatechange = function() {
          try {
            if (x.readyState == 4) {
              if (x.status == 200 && Number(x.responseText) == 1) {
                // thanks os0x!
                so.attributes.swf = so.attributes.swf + '+';
                so.write('content');
                Rascut.reloadObserver();
              } else {
                setTimeout(Rascut.reloadObserver, 5000);
              }
            }
          } catch(e) {
            setTimeout(Rascut.reloadObserver, 5000);
          }
        }
        x.send(null);
    }
 
    Rascut.swf = function() {
       return document.getElementById('idswf');
    }
 
    Rascut.reloadObserver();
    </script>
 
    </head>
    <body>
      <div id="content"></div>
 
      <script type="text/javascript">
       var so = new SWFObject("/swf/Test.swf?" + (new Date()).getTime(), "idswf", "100%", "100%", '9', '');;
       window.onload = function() {
 
         so.addVariable('rascut', 'true');
         so.write("content");
       }
      </script>
    </body>
</html>

原因は簡単で、相対パスで指定すると HTTP ベースなので
http://localhost:3001/data.xml を取得しにいきます。
直接アドレスバーで叩くとわかりますけど http://localhost:3001 に
アクセスした時の HTML が返ってきます。

で、考えた対策
(1). XML_URL を file://〜 で指定
(2). localhost に apache(web server) をたててそこにアクセス(レンタルサーバとかでもおk)
(3). グローバルセキュリティの設定を許可(*)して data.xml にアクセスできるようにし flash player で起動
の3通り。

それぞれ試した結果
(1) はセキュリティサンドボックスのエラーが出て厳しそう。
  (追うのがめんどくさくなったw おそらく securityLevel 周りをいじればいけそう)
(2) これはすぐにできた。一番、無難そう。
  ただ別ドメインに置く場合は crossdomain.xml をドキュメントルートに
  置いておかないとロードすることができないので注意。
  (ちなみに flash player 10 で 9 の時と変わってたので、
  少し結構はまりました。crossdomain については後々まとめるつもり。)
(3) てっとり早いけど、rascut の恩恵が少なくなる。
  確認のために毎回起動するってめんどくさい。

というわけで、(2) と (3) を満たすように変更してみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package {
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.display.Sprite;
    import flash.events.Event;
    import org.libspark.utils.Dumper;
 
    public class Test extends Sprite {
+        private var XML_URL:String = "data.xml";
        public var loader:URLLoader = null;
 
        public function Test() {
            loader = new URLLoader();
+            var host:String = '';
+            if (this.root.loaderInfo.parameters.rascut)
+                host = 'http://example.com/';
 
            loader.addEventListener(Event.COMPLETE, onXMLLoaded);
+            loader.load(new URLRequest(host + XML_URL));
        }
 
        private function onXMLLoaded(e:Event):void {
            trace(loader.data);
        }
    }
}

変更した場所は + をつけてます。
これで少しは快適に読み込みできるようになったかな。
3001 ポートでそのままリソースにアクセスできればベストなんだけどな〜
そのうちコード見てみることにする。

ちなみに設置した crossdomain.xml はこんな感じ。

<?xml version="1.0"?>
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="all"/>
  <allow-access-from domain="*"/>
</cross-domain-policy>

site-control を追加しないと flash player 10 だと下記のようなエラーがでて読み込めないので注意

警告 : ドメイン cdn.slideshare.net にはメタポリシーが指定されていません。デフォルトのメタポリシー 'master-only' を適用しますが、この設定は推奨されていません。こ
の問題の解決方法については、http://www.adobe.com/go/strict_policy_files_jp を参照してください。

(*)グローバルセキュリティの設定でセキュリティを緩和したいファイル or ディレクトリを追加すれば OK

trace をファイル出力するための mm.cfg 設定の注意点(mac)

By admin |

HDD 入れ替えで /Library とかをいれなおしたために trace 出力や flashswitcher が
動かなくなってることに気づいた。
このくそ忙しい中に環境作りなおすはめに。
覚えてないんで無駄にハマった。。。orz
もぉはまりたくないので memo を残しとくことに。

ちなみに環境は Mac OS 10.5 です。
mm.cfg に設定を書いて trace がファイル出力されるようになる。
設置場所は /Library/Application\ Support/Macromedia/,
/Users/[username]/ のどちらでも確認はとれた。

mm.cfg の内容

1
2
ErrorReportingEnable=1
TraceOutputFileEnable=1
1
2
PolicyFileLog=1
PolicyFileLogAppend=1

これをいれてしまうと動かない。
それでダダはまり。

flashswitcher は前記事を参照<mac で flashswitcher を使う時の注意点>

HDD いれかえた後にシステムいれなおしたのがあだとなった。
あと mac だと Flex Builder のプロファイラが動かないっぽい。
プロファイラがないとパフォチュで凄い不便すぎる。
何か良いのないかなぁ〜

参考資料

MacでFlashPlayer9のTraceが出力されない問題解決 その2
Flash Player 9,0,115,0 で mm.cfg の位置が変わってますよー (Mac)
デバッガ版の Flash Player の構成

ASDebugger リリースしました

By admin | 2008年12月18日

ASDebugger という debug ツールを作ってます。
で、ある程度まとまった (正確には機能を削ったw) ので spark にあげました。
ほんとならあーしたかったとかあるけど、そのうち反映させます。
以前作った Dumper を組み込んだデバッグするためのライブラリって感じです。

簡単にいうと plugin 形式でバシバシ機能拡張でき、出力先をオレ様ロガーをならってプラガブルに設定できるといったものです。
そして誰でも簡単に Debugger(出力先) や Plugin を追加することができます。
今のところ Debugger は SimpleLogger(予定), Trace, Firebug, Thunderbolt には対応しています。
(※id:borealkissさんには確認してもらってるとこです。)
これって何がいいかって言うと何も考えずに plugin 書くだけで
出力先のことは気にせずに 作れば作るほど便利になっていきます。
Dumper はすでに書き直して組み込んでます。
後は忘れがちな FlashPlayer のバージョンや使用メモリやら security やらのメソッドもはやしてます。

これだけだとわかりにくいんで サンプルは spark の方にあるんでそっちを見てください。
なんだかんだで、ある程度は形になったってレベルなんで、もっと使いやすいようにせねば。そのうちよします。
特に nobu さんや yossy さんとかとか。つっこみ歓迎です。
むしろ勝手になおしちゃってもいいんでw
あと ASReflect に依存しているので 使用の際は気をつけてください。

追記 2008/12/28 11:17:20
ASDebuger は間違いで ASDebugger でしたw
すでに修正したのをコミットしてます。
随時ドキュメントに関しては変更していきます。

WordPress Themes