processing の color 型

09.03.16 Mon 18:08
Category: processing

processing の color 型は、コンパイル時に int 型に変換されてるようです。
なので processing で

color c = #000000;

と書いていたものを Eclipse(Java)で書く場合は

int c = 0xff000000;

になります。32ビットカラーなのも注意。

processing の IDE が pde ファイルを Java に変換するのは、PdePreprocessor.java というクラスでおこなっているようです。color に関してコメントも書かれていました。

color c = #cc0080; should unpack to 0xffcc0080
(the ff at the top is so that the color is opaque),
which is just an int.

ちなみに PApplet クラスのソースコードは PApplet.java のようです。actionscript で使いたいときには、これを元に移植すればいいですね。

マイク入力とセキュリティ

09.03.16 Mon 01:30
Category: actionscript

UNAGI BALL をマイク入力に対応させました。マイクを接続している方は、ぜひ試してみてください。音量によってモジャモジャ変化します。


以下、マイク入力はセキュリティ・ダイアログでやっかいだったので整理しておきます。
まず、FLASH がマイクを使おうとすると下記のようなダイアログが出ます。

privacy1

この場合の「録音」の意味って「入力」ってことなんだろうけど、なんだかよくわかならい人は拒否を押したくなるダイアログですね。。。

具体的には、setLoopBack(true) でマイクの音をスピーカーに送るタイミングでダイアログが出ます。

var mic:Microphone = Microphone.getMicrophone();
if(mic != null)
{
	mic.setLoopBack(true); //このタイミングでダイアログが出る
}

ただこれが setLoopBack を実行するたびに毎回出るわけではなくて、マイクに接続しようとした最初の一回だけです。二回目からは最初に選択した状態が保持されます。なので最初に拒否されてしまったら、二回目からは設定を変更しない限りマイクに接続されません。

設定を変更するには下記二つの方法でセキュリティダイアログを開いて変更します。

  • 右クリック > 設定
  • Security.showSettings(SecurityPanel.PRIVACY);

ただしこれは最初のダイアログと違います。

privacy2

最初のダイアログでさえ拒否を押しそうですが、この画面はまず拒否か閉じるを押しますよね。。。

なので今回はマイク接続を拒否された場合は、リロードボタンを設置することにしました。リロードすれば設定はリセットされるので、最初のダイアログになります。「このコンテンツはマイク接続の許可が必要です」的なテキストを入れて、「セキュリティパネルを開く」と「リロード」のボタン二つを置くというのも手ですね。

ちなみに UNAGI BALL は、リーロードボタンの画面で「右クリック > 設定」で許可した場合は、コンテンツがスタートするようにしてあります。

MouseEvent の target

09.03.12 Thu 17:04
Category: actionscript

忘れそうなのでメモ。

container という空の Sprite に circle という Sprite を配置して、container の MouseEvent を取得すると、ターゲットの値が circle になってしまう。

MouseEvent - ActionScript 3.0 コンポーネントリファレンスガイド:

ネストされたノードが関係する場合、マウスイベントは、表示リストで確認できる最も深くネストされたノードをターゲットにします。

このターゲットを container にするには、container の mouseChildren プロパティを fasle に設定すればよい。

mouseChildrenプロパティ

var container:Sprite = new Sprite();
container.name = "container";
addChild(container);

var circle:Sprite = new Sprite();
circle.name = "circle";
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(40, 40, 40);

container.addChild(circle);

container.mouseChildren = false;

container.addEventListener(MouseEvent.CLICK, clicked);

function clicked(event:MouseEvent):void
{
	trace(event.target.name); // container
}

container.mouseChildren = false; の行があるかないかで変わってくる。

©2012 l00oo.oo00l blog | powered by WordPress with Barecity