東京てら子Vol.18『夏休みの自由研究発表会』に行ってきた

暑い日が続きますね。あまりに暑いときは、近所のサーティワンアイスクリームを愛用しています。地元には店舗がなかったので、上京して初めて食べたときの感動は忘れられません。個人的には、チョップドチョコレートがオススメです。

さて、今月も東京てら子に行ってきました。今回は発表もしてきましたので、その内容をブログでも公開します。

20110830.jpg

AIRでマウスアクセサリを作ってみた夏の日の2011

私が発表したのは、デスクトップ用のAIRアプリ(Windows版)についてです。お遊び用のアクセサリとして、マウスポインタにキャラクターがくっついてくるものがありますが、あれをAIRで作ってみました。

さっそく技術的な壁にぶつかる

いきなりですが、壁にぶつかります。SWFはステージ外にあるマウス座標を取れないのです。下に表示しているのはAIRアプリではなくて普通のSWFですが、マウス座標に関する制限は同じです。

つまり、マウスポインタの座標に沿って何かを表示するということが、技術的に不可能!
 ↓
オワタ\(^o^)/

そこでNativeProcess

というわけで今回紹介したのが、AIR 2からサポートされている「NativeProcess」という機能です。どういう機能か簡単に説明すると、OSネイティブなプロセスと通信ができる機能です。つまり、C言語などで実装されたプロセスで取得した値をAIRアプリに渡す、というようなことが可能になります。

       ヽ|/ 
     / ̄ ̄ ̄`ヽ、 
    /         ヽ 
   /  \,, ,,/    | 
   | (●) (●)|||  | 
   |  / ̄⌒ ̄ヽ U.|   ・・・・・・・・あなたが神か 
   |  | .l~ ̄~ヽ |   | 
   |U ヽ  ̄~ ̄ ノ   | 
   |    ̄ ̄ ̄    | 

今回のAIRアプリでは、Windowsでマウス座標が取得できればよいので、先日勉強を始めたC#で実装をしてみました。最終的にはコンソールアプリケーションとしてビルドします。

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Ceroan.Karaage {
	class Program {
		private int oldMouseX;
		private int oldMouseY;

		static void Main(string[] args) {
			new Program().Run();
		}

		public void Run() {
			Timer timer = new Timer();
			timer.Tick += new EventHandler(CheckMousePosition);
			timer.Interval = 16;
			timer.Enabled = true;
			Application.Run();
		}

		public void CheckMousePosition(object sender, EventArgs e) {
			int mouseX = Control.MousePosition.X;
			int mouseY = Control.MousePosition.Y;
			int mouseXY = mouseX + mouseY;
			if ((oldMouseX != mouseX) || (oldMouseY != mouseY)) {
				Console.WriteLine("mouseX=" + mouseX.ToString() + "&mouseY=" + mouseY.ToString() + "&mouseXY=" + mouseXY.ToString());
				oldMouseX = mouseX;
				oldMouseY = mouseY;
			}
			GC.Collect();
		}
	}
}

見慣れない方には何やら難しそうですが、やっていることはシンプルです。約60fpsでマウス座標を取得して、前の座標と比較して変更されていれば、その値を画面に出力しています。こんな感じで動きます。

20110830b.png

これならば、デスクトップ上のどこであろうともマウスポインタの座標を取得できます。あとは、AIRアプリでこの値を受け取れるように実装すればOKです。ActionScript 3での実装方法はググってください(えー

必要な呪文がある

ただ、これだけではNativeProcessは動作しません。AIRアプリのapplication.xmlに以下の値を加える必要があります。

extendDesktop

また、インストーラーも通常の「.air」形式ではなく、各OSのネイティブインストーラーとして作成しなければいけません。この2点には、要注意です。後日、時間ができたらこのあたりの詳しい手順も書いてみたいと思います。

teraco - 東京てら子Vol.18 『夏休みの自由研究発表会』
http://teraco.jp/2011/08/17-130614.php

東京てら子Vol.18 『夏休みの自由研究発表会』 on Zusaar
http://www.zusaar.com/event/agZ6dXNhYXJyDQsSBUV2ZW50GPGfBQw

よろしければコメントをどうぞ!

匿名希望のコメントはこちらへ

Comment Form

Trackbacks:0

TrackBack URL for this entry
https://448.jp/cgi-bin/mt/bnq48cke.cgi/1417
Listed below are links to weblogs that reference
東京てら子Vol.18『夏休みの自由研究発表会』に行ってきた from 448.jp blog

この記事はいかがでしたか?

ぜひ共有してみてください。あなたのフィードバックが、私のモチベーションにつながります。

×