この文書は Runtime社のホームページにある、http://www.runrev.com/revolution/developers/articles/tipoftheweek/3.html を勝手に邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。

Developers> Articles> Tip of the Week!


Tip of the Week! 3
古いスクリプトテクニックと、Transcript への最適化

 Transcript は非常に多くの機能を持っている。それは HyperCard や SuperCard との高い互換性を提供するだけではなく、おびただしい数の、全く新しい機能を含んでいる。そのため、同じ目的を達成するのに、複数の異なった方法が存在する。

 だからと言って、他のツールと同じテクニックを、盲目的に使い続けてはならない。 Transcript 開発者はより良い選択肢を持っており、またその方法を選択すべきである。時に Transcript は他のツールと全く違う手段を提供するが、心配には及ばない。 Revolution は他のツールで使えるテクニックをサポートするし、それを使い続けることによる弊害は、単なる効率の低下だけである。ただいくつかのケースはうまく機能しないし、将来的に切り捨てられる可能性もある。その一因はOSアーキテクチャの違いにある。(例えばいくつかのテクニックは MacOS 上では可能でも、Windows と UNIX では使うことが出来ない。同様に、MacOS 上で可能でも、OS X では使えないものもある)

 古いテクニックを Transcript で置き換えるためのポイントをここに提示する。

 第1に排除すべきは、CPU タイムを無駄に消費するスクリプトである。代表格の idle 命令は、"send" 命令に置き換えることが出来る。( 詳細は tip of the week の "send in" を参照のこと) また "wait until <event>" や "repeat until <event>" のような制御構造も、メッセージを活用することによって、パフォーマンスとレスポンスを改善することが出来る。

 第2に排除すべきは、マウスやキーの状態を調べるスクリプトである。適切なメッセージを利用すれば、これらの値はメッセージから得られる。

 実例を挙げよう。あなたはドラッグ可能なオブジェクトを作りたいと考えた。まず思いつくのは "grab" 命令である。しかしあなたはこれに満足出来ずにより良い方法を探すだろう。そしてこんなスクリプトを考える:
on mouseDown
  repeat until the mouse is up
    Set the loc of me to the mouseLoc
  end repeat
end mouseDown
 このスクリプトは mouseMove メッセージを利用せずに、"repeat until <event>" によってマウス情報を読み続けている。これは悪いテクニックである。代わりに下のようなスクリプトを使用しなさい。このスクリプトはメッセージを活用し、そのパラメータから必要な値を取り出している。全く同じ結果を得られるにも関わらず、速く、そしてスムーズである。
local lMouseDown

on mouseDown
  put true into lMouseDown
end mouseDown

on mouseMove x,y
  if lMouseDown then set the loc of me to x,y
end mouseMove

on mouseUp
  put false into lMouseDown
end mouseUp

on mouseRelease
  mouseUp
end mouseRelease
 もし Transcript の最適化について質問があるなら、use-revolution メーリングリストに投稿することを勧める。


邦訳/文責:UDI
2002.09.04
2002.10.27

inserted by FC2 system