HyperCard2.4レポート03

Japanese only

 先日懐かしい(?)バグに遭遇したので、その対処法を書いておきます。これは英語版2.4.xに限った症状ではなく、製品版HyperCard全てで起こり得るバグです。

 製品版HyperCardには "Audio Help" と言うスタックが付属しています。このスタックはマックの内蔵音声入力装置を使って、音声を録音したり、簡単な編集をするものです。(最新のマックやシステムでは正常に動作しない可能性があります) 日本語版では「スタック」フォルダ、英語版では「HyperCard Stacks」フォルダの中にあります。

 HyperCardは、起動時にこのスタックを探して、自動的にusingします。つまりどんなスタックを開いている時でも、そのスタックで消化されなかったメッセージは全て "Audio Help" スタック(のスタックスクリプト)にも流れるわけです。このスタックには on closeCard ハンドラがあり、その中に lock screen があります。ユーザーのスタックでカード移動が行われるたびに、このスタックは lock screen を実行していることになります。

 困ったことにこのハンドラは lock するだけで unlock してくれません。ユーザーのスタックがカード移動前に lock、移動後に unlock しても、"Audio Help"が lock した分だけ unlock が足りません。( lock した回数だけ unlock しないと画面は更新されません) そのため、カード移動時のエフェクトが無視されたり、極端な場合は画面が全く更新されなくなります。

 この症状が起きるのはカード移動時に lock screen を使い、カード移動後もスクリプトが動作し続ける場合だけです。カード移動後にスクリプトが終了して idle 状態になるスタックでは、その時点で全ての lock が解除されるので影響を受けません。例えばカード移動後に(スクリプトを終了せずに)そのまま会話ルーチンに入るようなRPGゲームなどでは、カード移動そのものがユーザーから見えなくなる可能性があります。

 スタック側の対処法は、"Audio Help"に closeCard メッセージを渡さないようにすることです。つまりスタックスクリプトに on closeCard/end closeCard のダミーハンドラを置いて、closeCardメッセージが流れ出すのを止めます。スタックを作るときはこれを心がけると良いでしょう。

 また製品版HyperCardを持っている人はこのスタック(日本語版では「スタック」フォルダ、英語版では「HyperCard Stacks」フォルダの中にある "Audio Help" スタック)の名前を変えて、HyperCardがusing出来ないようにしてしまうことをお奨めします。スタックが見つからなければHyperCardはusingすることをあっさり諦めますから、実害はありません。削除してしまってもいいのですが、まぁせっかく付いているものだし・・・。


2005.01.10. UDI


Prev




UDI's HomePage
inserted by FC2 system