blocco blog

blocco blog

ブロッコ・デリの種々雑多な調子。

お月見Flash おさらい1 「カエルじょうろ」

2007-10-01(Mon) 20:23

投稿者: yosshi

9/22 に行われました「お月見Flash」にでの講演内容と解説です。
Wii リモコンと Adobe Flash の連携方法を紹介します。

[講演動画]

[ポイント]

基本的には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 (こちらはソケットサーバになります)

Ruby から RubyCocoa を呼び出し、WiiRemote Framework を使用します。
ソケットサーバは前回の「空中タロット」でも出てきているので省略します。
# webや書籍に載っている受信したメッセージを全クライアントに返すサーバです。

[準備段階]
Xcode を事前にインストールしておきましょう。

Ruby は Mac OSX に始めから入ってるものを使う場合はそのまま使用できます。
しかし、MacPorts や自分で make する場合は注意が必要で “–enable-shared” オプションをつけて make する必要があります。

DarwiinRemote から WiiRemoteFramework をダウンロードします。
http://sourceforge.net/projects/darwiin-remote/

WiiRemoteFramework を Xcode で Build します。
build/Release/WiiRemote.Frameworks を /Library/Frameworks/ 以下に置く。

RubyCocoa をインストールします。
http://rubycocoa.sourceforge.net/HomePage

BridgeSupport のインストール
http://trac.macosforge.org/projects/BridgeSupport
これは、各フレームワークと RubyCocoa の架け橋になります。

$ svn co http://svn.macosforge.org/repository/bridgesupport/
trunk BridgeSupport
$ cd BridgeSupport
$ make
$ sudo make install

exceptions/ 以下にそれぞれのフレームワーク名の xml ファイルが生成されている。
これを /Library/BridgeSupport/ 以下に設置。
# /Library/BridgeSupport/ は mkdir で事前に生成しておく必要があります。

WiiRemote.Framework の ブリッジを作成

$ ruby gen_bridge_metadata.rb  -f WiiRemote -F exceptions
                              > exceptions/WiiRemote.xml

WiiRemote.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
end

XML_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受信ハンドラ

trackback URL:
http://www.blocco-deli.co.jp/blog/2007/10/01/wii-kaeru/trackback/

画面トップへ