レッスン20「Lua Nspiredドキュメントの作成ガイドライン(その2)」和訳

出典:http://compasstech.com.au/TNS_Authoring/Scripting/script_tut20.html

レッスン20「Lua Nspiredドキュメントの作成ガイドライン(その2)」

複数のプラットフォームで動作するドキュメント(Create Once Play Everywhere)

 2. 操作について:環境にかかわらず操作を楽にする

我々の作成するディジタル・コンテンツは、見栄えを良くする必要があるのはもちろんですが、どのようなプラットフォームで実行する場合でも操作方法が直感的にわかって満足のゆく経験のできるものでもなければなりません。

コンピューター・ユーザーの大半にとって、ディジタル・コンテンツはマウスで操作するのが最も自然です。クリックしてドラッグする操作は、手っ取り早くてスムーズなうえ、操作説明はほとんど不要です。

しかしハンドヘルドでは、マウスやカーソルの操作は大幅に改善されてはいるものの、高速性、満足度については、コンピューター上での操作にまったく及びません。ハンドヘルドで何かをつかんでドラッグするのは、いまだに大変な操作です。したがってハンドヘルドのキーボードを効果的に使用すれば、我々の作成するドキュメントのユーザビリティーを上げるうえで大きな効果が発揮できます。

そしてこれは氷山の一角に過ぎません。作成したコンテンツがハンドヘルドやコンピューター・ソフトウェアだけでなく、Player、PublishVewなど、どのような環境でも効果的に実行されるようにするためには、設計に関して具体的かつ徹底的に検討する必要があります。この点については、明確な原則をいくつか適用することで、高い信頼が約束されます。

基本的に、この点での成功の鍵は、マウスおよびキーボードに必要なすべての機能を複製することです。そうすればユーザーは、プラットフォームや好みに応じて、どちらかの操作方法が容易に選べるようになります。

 

2.1 マウスでの操作とマウス・クラス

ポイント→クリック→ドラッグという操作方法は、ハンドヘルド上でマウスを効果的に使用するうえで比較的小さな障害物であるにもかかわらず、どのプラットフォームにも共通して用いられていますので、ユーザー操作の設計および立案を行う場合はどれよりも優先しなければなりません。

マウスによる操作をプログラムする最も効率の良い方法は、設定するのが少し難しいように思えるかもしれませんが、クリック可能なオブジェクトはすべてクラスを使って定義することです。そうすれば、パワフルな“contains”函数が使用できますし、簡単に制御できる多くのパラメータも利用できるようになります。

これまでTI-Nspireハンドヘルドでマウスやカーソルを操作する場合につきものの問題の1つは、マウスが自動的に非表示になることであり、再表示されるまでに数秒かかることである。この現象はLuaドキュメントのほうが顕著でした。ですから、自分でスクリプトを作成する場合は、以下の函数に最初からshow()コマンドを含めるようにしてください。

functionactivate()

cursor.show()

end

スクリプトの実行中は常にカーソルが表示されるようにするためには、このコマンドをたとえばmouseMove函数内などに再記述しておくのが良いでしょう。

 

2.2 ボタンとキーパッド

コンテンツをPlayerで実行する可能性がある場合に重要なことは、必要なすべての操作がマウスで実行できること、およびクリック可能なボタンで必要な機能すべてにアクセスできることです。Playerでは、キーボードから入力することも、メニューから選ぶこともできません。

今回のレッスンに用意したサンプル・ファイルには、キーパッド・テンプレートが含まれていますが、このようなテンプレートを使えば、比較的容易にPlayer用の機能が実装できます。

 

2.3 キーボードでオブジェクトの選択と制御を行う

ユーザビリティーに関する問題の中心にあるのはハンドヘルド環境です。ハンドヘルド環境では、マウスは確かに使用できますが、オブジェクトを選択してドラッグする方法としては必ずしも一番速い方法ではありません。キーボードを用いれば、特定のポイントに移動してつかむという方法がほとんどの場合回避されるので、もっと効率よく使用できます。サンプル・ファイルmouse_dragging_v1.2.tnsは、ここで紹介したお勧めの方法を実現した単純な例です。

マウスでオブジェクトをクリックしてからドラッグすれば、そのオブジェクトが簡単に選択できてコピーもされますが、以下のようにすればキーボードでも同じ操作ができます。

  • tabKey(またはshift-tab)を押して各オブジェクトを順番に選択する。
  • arrowKeysを使って、選択したオブジェクトをまずコピーしてから、コピーされたオブジェクトを画面上で高速かつ簡単に動かします。
  • tabKeyを使ってオブジェクトを選択してからマウスを動かすと、選択したオブジェクトがマウスの位置へジャンプします。
  • 選択したオブジェクトをリリースするときは、escapeKeyを押します。
  • リセットするときは、指定のボタンをクリックするか、enterを押すか、"r"(または"R")を押すかします。

注:最も効果的にオブジェクトを操作する方法はおそらく、キーボードとマウスとを組み合わせて用いることでしょう。tabKeyを使って素早く簡単に選択してからマウスを少し動かすと、ただちに目的のオブジェクトがその位置へ移動します。

操作するオブジェクトが2個や3個でなく、もっと多い場合はどうなるでしょうか。たくさんのオブジェクトをtabキーで巡回するのは、あまり使い勝手がよくありません。

サンプル・ファイル「Algebra Tiles」は、本稿で述べた原理・原則をすべて高度にまとめ上げたドキュメントです。6つの異なるオブジェクトを選択する方法として、キーボードから文字を打ち込むという方法を採用しました。"x"と入力すると、xタイルが選択され、マウスの移動先にそのタイルが移動します。同じように、x^2タイルの場合は"s"を入力し、ユニット・タイルの場合は"u"を入力します。負数の場合は、"n"を入力してから、必要な文字を入力します。この方法は、一般にマウスを使用した場合と少なくとも効率は同じであり、ハンドヘルドではかなり効率の高い方法です。

このドキュメントのその他の機能についても確かめてみましょう。"?"または"a"を押すと、詳しい説明の書かれた"About"画面(複数ページ)が現れます。数字を入力するとxの値が変化します。"+"、"-"を押すと、0.1刻みでxの値が変化します。このドキュメントは、本ガイドラインで確立した主な原理・原則を具体化するのに役立ちます。コードの必要な部分を自由にコピー・アンド・ペーストして、個々のニーズに応じて変更してください。

f:id:ti-nspire:20141203114907j:plain

f:id:ti-nspire:20141203114911j:plain

 

2.4 矢印キーによる操作

ハンドヘルドでオブジェクトをつかんでドラッグするという操作は、いらいらの原因になりかねないことはすでに述べました。わたくしが初めてLuaに興味を持った要因の1つは、目的のオブジェクトがLuaウィンドウ内にあろうと、TI-Nspireの世界の外にあろうと、そのオブジェクトを動かす操作子を矢印キーに簡単に割り当てられることでした。これまでのセクションでそれとなく述べてきたことですが、もう一度言います。

「ポイントを移動する操作は、可能な限り、マウスでつかんでドラッグするという操作だけでなく、矢印キーでも操作できるようにドキュメントをデザインすべきである」

 

これは、特にドライバー・ポイントが1つしかない場合は、arrowKey函数を使って簡単に実現できます。ポイントが複数ある場合は、効率的な選択方法を十分検討する必要があります。これもやはり、クラスを使えば比較的簡単に実現できますが、クラスを使わなくても同じことが可能です。下に示したサンプル・ドキュメント(今回はダニエル・イレイラにお世話になりました)には、a、b、cという3つのドライバー・ポイントがあります。各ポイントは、Graphsアプリケーション固有のポイントですので、クラスは利用できません。ポイントからポイントへ移動するのにはtabKeyを使います(座標はLuaテーブル/リストに格納されていますので、tabを使ってこのテーブルを巡回するだけです)。どのポイントが選択されているのかが見てわかるようにするため、赤い線を表示します。

f:id:ti-nspire:20141203115022j:plain

  • この方法で設計したドキュメントなら、ページを開くやすぐに操作が始められます。特定のポイントまでページ上を大きく移動する必要もなく、目的のポイントをつかんでドラッグする必要もありません。このことは、コンピューター・ユーザーにとっては些細なことかもしれませんが、ハンドヘルドの場合は決して些細なことではありません。この方法を使えば、高機能で使いやすいドキュメントが設計できます。

 

以降の各レッスンではOS3.2を利用します。チュートリアルもこれで終盤に入ります。非常にシンプルですが非常に重要なことを行うための方法を紹介します。まず、ユーザーからのテキスト入力を取り込む方法を紹介し、次いで物理エンジンを紹介します。