これは RuntimeRevolution 1.1.1 のヘルプにある文書を邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。
Help -> Revolution Documantation -> Development Guide -> Developing with Revolution -> About... Revolution for SuperCard developers
About Revolution for SuperCard developers
SuperCard 開発者のための Revolution
==============
参照:
--------------
Getting Started Tutorial, altID property
この文書は、SuperCard や SuperTalk の経験があり、その知識や既存のプロジェクトを Revolution で活用したいと思っている人に向けて書かれたものである。
コンバータプログラムを使って、SuperCard のプロジェクトを Revolution スタックにコンバートすることが出来る。あなたは既存のプロジェクトのコンバートしたり、そこに Revolution の新しい機能を取り込んでプロジェクトを拡張することが出来る。
このトピックを充分に理解するためには、SuperCard でのスタック作成とスクリプトの書き方を知っている必要がある。もしあなたが標準的なレベルの SuperCard 開発者なら、このトピックを理解することが出来るだろう。
Contents:
From SuperCard to Revolution
Converting SuperCard Projects
Tips and Gotchas
From SuperCard to Revolution
SuperCard から Revolution へ
SuperCard の経験のある開発者なら、Revolution への移行は単純かつ容易である。今まで使ってきた SuperCard と同じように、スタックウィンドウ(複数のカードを持てる)にオブジェクトを作ることが出来る。ハンドラを書くための Transcript 言語は、SuperTalk にとても良く似ている。
Revolution は SuperCard の持つ全てのオブジェクトタイプをサポートしているだけでなく、ボタン、フィールド、イメージ(中にペイントしたり、ファイルを表示したり出来る)、ドローグラフィック、QuickTime プレーヤ、そしてスクロールバーを備えている。組み込みの player オブジェクトは QuickTime と QuickTime VR ムービーを表示出来、ほかのオブジェクトと全く同じように扱うことが出来る。オブジェクトのプロパティパレットを使って、これらのオブジェクトの外観や動作を変更したり、スクリプトを編集することが出来る。
ただし、いくつかのコンセプトの違いが存在する。
Stacks, projects, and windows
スタック、プロジェクト、そしてウィンドウ
SuperCard では、ウィンドウはひとつのオブジェクトであり、プロジェクトの中に含まれていた。 Revolution でもウィンドウは(「スタック」と呼ぶ)ひとつのオブジェクトであるが、これはプロジェクトファイルの中にあるわけではない。各スタックファイルは1つ以上のスタックを含んでおり、そのうちのひとつはメインスタック、他のスタックはサブスタックと呼ばれる。プロジェクトと同じように、メインスタックはサブスタックの全オブジェクトのメッセージパスにある。しかしプロジェクトと違って、メインスタックはそれ自身のウィンドウをひとつ持っている。
スタックファイルをオープンすると、デフォルトではメインスタックが開かれる。多くの Revolution アプリケーションでは、このメインスタックをスプラッシュスクリーンや、アプリケーションのコントロールウィンドウとして使っている。
ティップス: Geometry Manager を使えば、ユーザーがウィンドウをリサイズした時に、自動的にスタック内のオブジェクトの再配置やリサイズを行わせるようにすることが出来る。
Backgrounds and groups
バックグラウンドとグループ
SuperCard では、バックグラウンドレイヤーにオブジェクトを置くことが出来た。そしてそのオブジェクトは各カードのオブジェクトよりも後ろにあった。
Revolution では Group メニュー(や group コマンド)を使って、任意のオブジェクトをグループにすることが出来る。 SuperCard のバックグラウンドと違って、グループはスタック上の任意のカードに置くことが出来、グループの中に他のグループを入れることも出来る。(そして SuperCard のグラフィックグループと違い、Revolution のグループにはどんなオブジェクトでも入れることが出来、グループオブジェクトはスクリプトを持つことが出来る) グループは、グループ化されていないオブジェクトよりも前に置くことも出来るし、他のオブジェクトの間に挟むことも出来る。
グループは非常に柔軟性に富んでいる。あなたはグループを選択して移動することが出来るし、show/hide をコントロールしたり、スクロールバーを配したり、任意のカード上に置いたり、取り除いたりすることが出来る。バックグラウンドと同じように、グループはスクリプトを持つことが出来る。他のグループを含んだグループを作ることも出来る。
新しいカードを作った時、そのカードに自動的にグループを置くように設定することが出来る。これは SuperCard で新しいカードを作った時に、そのカードが現在のバックグラウンドに置かれるのと似ている。しかしグループはバックグラウンドではないことを忘れてはならない。 SuperCard では全てのカードはバックグラウンドの上にある。しかし Revolution のカードはグループと無関係に存在する。そして SuperCard とは逆に、グループはカードの上にある。
Menus
メニュー
Revolution では(メニューバーのメニューも含めて)全てのメニューはボタンとして実装されている。
メニューバーを作るには、まず各メニューのボタンを作り、ボタンの menuMode プロパティを 'pulldown' にする。そしてこれらのメニューをグループにまとめて、スタックウィンドウの上部( Unix と Windows システムでのメニューバーの定位置)に置く。
スタックの menubar プロパティにこのグループの名前をセットすると、Revolution はこのグループのメニューを Mac OS 標準のメニューバーとして表示し、ウィンドウサイズを変更してこれらのボタンを隠す。これはメニューバーが各プラットホームに合わせて表示されることを意味する。各プラットフォームのインターフェースに従い、Mac OS と OS X ではスクリーン上部に、Unix と Windows システムではスタックウィンドウ上部にメニューバーが現れる。
ティップス: Menu Manager を使えば、メニューバーのボタンを自動的に作って配置することが出来る。メニューの外観やメニュー項目のキーボードショートカットなどは、それぞれのプラットホームに最適化される。
The development environment
開発環境
Revolution の開発環境は SuperCard に良く似ている。メッセージボックス( Revolution では複数行に渡る条件文などもうまく実行できる)があり、オブジェクトを操作するためのツールパレットがある。
SuperCard の Project Editor(プロジェクトエディタ)では、スクリプトを書いたあとにデザインモードからランモードに切り替える必要があった。 Revolution の開発環境はモードレスである:スクリプトを書いた直後にそれをテストすることが出来、開発環境上で、そのままスタックを使用することが出来る。 Revolution のメニューやパレットのない「クリーンな」環境でスタックをテストしたい場合は、Development メニューの 'Suspend Revolution UI' を実行する。 Development メニューの 'Suppress Messages' を利用すれば、スタック開発中に普通のメッセージが送られて来るのを防ぐことも出来る。
メニュー、パレット、ダイアログボックスなどの開発環境は、全て Revolution で作られている。これは単に Revolution エンジンのパワーを誇示しているのではなく、必要ならばこれらを調べ、カスタマイズすることも出来るということである。
Converting SuperCard Projects
SuperCard プロジェクトのコンバート
<http://www.runrev.com/revolution/sctorev/sctorev.sit> から、SuperCard プロジェクトのコンバータを入手することが出来る。コンバータは SuperCard プロジェクトと Revolution スタックで構成されている。ドキュメントはコンバータに含まれている。
作業手順はこのようになる:
1. SuperCard で 'SuperCard -> SIF Exporter' を開き、プロジェクトを書き出す。 Exporter はテキストファイルとイメージファイルのセットを作る。
2. Revolution で 'SIF to Rev importer.rev' スタックを開き、書き出しておいたファイルを読み込む。 Importer はテキストファイルとイメージファイルのセットから、Revolution のファイルを作り上げる。
SuperCard プロジェクトの各ウィンドウは、Revolution スタックファイル内のスタックになる。プロジェクトのバックグランドは Revolution のグループに変換される。名前などの全オブジェクトプロパティは保持される。
プロジェクトのスクリプトは 'Directory of project name' と呼ばれるサブスタックのスクリプトに置かれる。このスクリプトをメッセージパスに置くには、これをメインスタックのスクリプトにペーストする必要がある。
プロジェクトにある全てのメニューは、それぞれ別のスタックに置かれる。もしこれを Unix や Windows 用にビルドすると、このアプリケーションはメニューバーを別ウィンドウに表示するだろう。この分離されたメニューバーが役に立つか、それともスタックウィンドウ内に統合した方が良いかは、あなたが決めなければならない。
ほとんどのプロジェクトは問題なくコンバート出来るだろう。作業をスムーズに行うためのガイドラインをここに揚げる:
Convert on a Mac
マック上で作業する
次のバージョンの 'SIF to Rev importer.rev' スタックは、Revolution がサポートする全てのプラットホームで使えるようになる。しかしもしプロジェクトがアクセント付きの文字(訳注:多バイト言語の文字)を含んでいるなら、Mac OS で作業することを推奨する。
Use a project file
プロジェクトファイルを使う
コンバータは SuperCard の作ったスタンドアローンアプリケーションを変換できない。これらの作業はオリジナルのプロジェクトファイルを使って行う必要がある。
Remove quotes from object names
オブジェクト名からクォートを取り除く
オブジェクト名にダブルクォート文字( " )があるなら、コンバートする前にそれを取り除いておく。
Un-nest nested groups
ネストしたグループを解除する
コンバータはネストした(入れ子になった)グラフィックオブジェクトを扱うことが出来ない。もしプロジェクトにグループを含むグループがあるなら、コンバートする前にそれを1レベルのグループに作り替えておきなさい。 Revolution 上ではグループをネストすることが出来るので、コンバートが済んでからそれを再度ネストさせれば良い。
Replace incompatible terminology in scripts
専用のスクリプト用語を置き換える
Transcript と SuperTalk では、いくつかの用語の違いが存在する。(詳しくは、後で述べる 'Terminology Changes' を参照) コンバータはスクリプトを書き換えないので、これらの用語はコンバート後に置き換える必要がある。
Tips and Gotchas
ティップスと解決策
Revolution は SuperCard と高度な互換性を持っており、あなたの知識で容易に移植することが出来るだろう。しかしいくつかの非互換な部分が存在し、Revolution が異なる手段を提供している場合もある。ここでは一般的な解決法と、便利なティップスを紹介する:
Custom properties instead of user properties
ユーザープロパティではなく、カスタムプロパティ
Revoluton のカスタムプロパティは、任意のデータを任意の場所に置くことが出来る。スタックと共に保存することが出来、任意のオブジェクトに結びつけられ、ハンドラから普通のプロパティと同じように扱うことが出来る。 SuperCard のユーザープロパティと違って、カスタムプロパティは使う前に定義しておく必要が無い。カスタムプロパティを作るのは簡単である。また Revolution は、各オブジェクトにいろいろなカスタムプロパティをセットする。それを変更したり、読み出したりすることも可能である。
Overriding built-in commands and functions
組み込みコマンドや関数のオーバーライド
SuperCard ではコマンドや関数はメッセージパスを通る。これは同じ名前のハンドラを使って、組み込みコマンドや関数のオーバーライドが出来ることを意味する。
Revolution では、組み込みコマンドと関数は、メッセージパスを通らず直接実行される。メッセージパスの中に組み込みコマンドや関数と同じ名前のハンドラを入れても、それらが実行されることはない。
Explicit save
終了時の保存
SuperCard は自動的に変更をセーブする。 Revolution では、ユーザーが作業を終了する時に変更を保存するという、より一般的な方法を提供する。( closeCard ハンドラを利用すれば、カード移動時に自動的にカレントスタックを保存するようにすることも出来る)
Everything in memory
全てはメモリの中
Revolution でスタックファイルを開くと、スタック内の全てはメモリに読み込まれ、purge するまで留まり続ける。( destroyStack プロパティを使えば、スタックを閉じる時に自動的にメモリから削除することも出来る) 予めメモリに読み込むことで、より速いアクセスを実現している。 Revolution はカード移動時にディスクにアクセスすることはない。
これは、用意されたメモリ以上のスタックを扱えないことを意味する。もしスタックに大きなデータを入れる場合は、複数のスタックファイルに分けるか、ピクチャーやビデオやサウンドデータを別ファイルから参照するようにしなさい。(ファイルを参照するコントロールは、そのコントロールのあるカードが開かれた時だけメモリに読み込まれる)
Dates, times, and the start of the eon
日付、時間、そして時間の始まり
Mac OS (と SuperCard )では "時間の始まり" を 1904年1月1日の真夜中としている。 seconds 関数はここからカウントされている。 Revolution はクロスプラットホームであるため、Mac OS 特有の日付ではなく、1970年1月1日GMT の真夜中を時間の始まりとして用いる。 seconds 関数を使っているスタックはこの影響を受ける。
Transcript の ticks 関数はシステム起動時からの時間ではなく、time と同じ日付からの時間をカウントする。
date 関数と time 関数は常に U.S. フォーマットにコンバートされる。
Using send instead of idle handlers
idle ハンドラの代わりに send を利用する
時に、周期的にコマンドを実行したいことがある。 SuperCard では このような時 idle ハンドラを使うのが一般的である。 Revolution では代わりに send コマンドを使って、指定時間後にメッセージを送ることが出来る。つまりハンドラの最後に、そのハンドラを実行するディレイ付きの send コマンドを置く。このサンプルは、1秒おきに beep を鳴らすものである:
on annoyUser beep send "annoyUser" to me in 1 second end annoyUserこのアプローチは非常に有効である。 idle ハンドラでは毎回時間を調べて、そのスクリプトの実行を続けるかを決めなければならないが、Revolution ではそれが不要である。
on enterInField select empty -- フィールドを閉じる end enterInFieldWindow appearance properties