Blocco-deli にも同じ記事を書いてます。
9/22 に行われました「お月見Flash」にでの講演内容と解説です。
Wii リモコンと Adobe Flash の連携方法を紹介します。
[講演動画]
[youtube=http://www.youtube.com/watch?v=qn4Z7SwnBLI]
[ポイント]
基本的には1台のマシンの中で動作します。
WiiリモコンはBluetoothでコンピュータに接続できます。
RubyでWiiリモコンのデータを受信し、XML_Socket通信を用いてFlashと繋がります。
RubyからFlashへの一方通行な通信です。
[システム概要図]
まず、今回の開発・動作環境について。
[OS]
- Mac OSX 10.4.10
- Flash CS3(ActionScript2.0)
- ruby 1.8.2 (2004-12-25) [universal-darwin8.0]
- WiiRemote Framework
- RubyCococa 0.12.0
- perl 5.8.6 または Java (こちらはソケットサーバになります)
$ svn co http://svn.macosforge.org/repository/bridgesupport/trunk BridgeSupport $ cd BridgeSupport $ make $ sudo make installexceptions/ 以下にそれぞれのフレームワーク名の xml ファイルが生成されている。 これを /Library/BridgeSupport/ 以下に設置。 # /Library/BridgeSupport/ は mkdir で事前に生成しておく必要があります。 WiiRemote.Framework の ブリッジを作成
$ ruby gen_bridge_metadata.rb -f WiiRemote -F exceptions > exceptions/WiiRemote.xmlWiiRemote.xml も同様に /Library/BridgeSupport/ 以下に設置します。 [Ruby] urekatのスカンク日記3 RubyとWiiリモコンをつなぐ を参考にWiiリモコンとの接続部分を作成(wii.rb)し、XML_Socket通信部分を実装しました。
require "socket" # Socket通信ライブラリ require "wii.rb" # RubyとWiiリモコンをつなぐ server = "localhost" port = 16000 SOCKET = TCPSocket.open(server, port) def send_socket(msg) SOCKET.write(msg + "¥0") p SOCKET.recv(100) # 確認のため表示 SOCKET.flush endXML_Socket通信
<wii_socket x="-13" ... x方向の傾き値 y="9" ... y方向の傾き値 z="2" ... z方向の傾き値 />XM_LSocketで送受信されるXMLの内容 [ActionScript]
mySocket = new XMLSocket(); mySocket.onXML = wii_rotate; mySocket.connect("localhost","16000"); ---- function wii_rotate(wii_socket){ _root.frog_mc.hit_a._y = _root.frog_mc.hit_b._y + wii_socket.firstChild.attributes.y * 10; if (wii_socket.firstChild.attributes.y > 9){ trace(_root.frog_mc.splashCount += 1); }else{ _root.frog_mc.splashCount = 0; } if (_root.frog_mc.splashCount > 100) { _root.frog_mc.splashCount = 0; _root.randomgrow(); // ある一定時間傾き続けると、ビアサーバからひまわりが咲きます。 } }XML_Socket受信ハンドラ