グラフィックス:
グラフィックスウィンドウとオブジェクトの概説

イントロダクション

Max には、カラーグラフィックスやアニメーションのためのオブジェクトがあります。これらのオブジェクトは、音楽の処理を行なうオブジェクトと同じ原則を採用しているため、1つのパッチャーの中で、ユーザインターフェイス、音楽、グラフィックス機能を結合させることができます。これにより、サウンドとイメージ(画像、アニメーション)の結合や同期を行なう様々な方法を実験してみることができます。

Max でグラフィックスを提示する手段には、パッチャーウィンドウ、QuickTime ムービーウィンドウ、専用のグラフィックウィンドウの3つがあります。ほとんどのグラフィックスオブジェクトは、グラフィックスオブジェクトと関連づけられた専用のグラフィックスウィンドウに描画を行ないます。それぞれのグラフィックスオブジェクトには名前が与えられ、何らかの描画を行なうオブジェクトはアーギュメントとしてグラフィックスウィンドウの名前を持っていなければなりません。

Max がオーバードライブモードで動作している場合、グラフィックスを描画するオブジェクトは優先されません。そのため、音楽演奏とグラフィックスの表示の両方を行なう処理がどのような速さでも実行でき、音楽演奏は表示のスピードから影響を受けることはありません。例えば、アニメーションが音楽よりも遅れがちになる場合、アニメーションはスピードを保つために自動的にフレームをスキップします。(また、slider オブジェクトのようなユーザインターフェイスオブジェクトも、このような動作を行ないます)

グラフィックスの描画を行なうオブジェクトは、すべてエクスターナルオブジェクトです。C言語のプログラマは、新しいグラフィックスオブジェクトを書くことができます。グラフィックスウィンドウに描画するオブジェクトは、それぞれ特定のウィンドウに関連づけられたスプライトです。スプライトは、オブジェクトがプライオリティ・ナンバー(優先ナンバー)によってお互いの前面、あるいは背面を使用することができるようにします。大きいナンバーをつけられたスプライトは、小さいナンバーのスプライトより前面に描画されます。グラフィックスオブジェクトのプライオリティ・ナンバーは priorty メッセージを使って変更することができます。

グラフィックスウィンドウの中のグラフィックス

グラフィックスウィンドウを開くためには、パッチの中に graphic オブジェクトを置く必要があります。graphic オブジェクトを含むパッチを作成した場合、1つ以上の描画オブジェクトが必要になります。グラフィックスウィンドウに描画を行なうために、Max には3つの基本的なオブジェクトが存在します。ovalファミリのメンバ(ovalrectringframe)はシェイプを描画し、pict は PICT ファイルを表示します。描画オブジェクトの最初のアーギュメントは graphic オブジェクトの名前で、このオブジェクトのウィンドウが描画に使用されます。描画オブジェクトが作られるときに graphic オブジェクトが存在していなければならないわけではありませんが、描画オブジェクトのアーギュメントと同じ名前を指定された有効な(そして表示された)グラフィックスウィンドウが存在しなければ、何も実行できません。

次の例は、ユーザが button をクリックすると、Display というタイトルのグラフィックウィンドウの中の 50, 50, 100, 100,という矩形のピクセル領域に黒い円を描く簡単なパッチです。

oval には6個のインレットがあり、それぞれ、左、上、右、下のスクリーン位置、描画モード、色(グラフィックスウィンドウのパレットへのインデックス)の指定に使用されます。oval オブジェクトに4つの数字によるリストを送信すると、そのリストの値で指定されたピクセル座標の中に描画を行ないます。リストの値はそれぞれ、描画領域の左、上、右、下を表します。

Display というタイトルのグラフィックスウィンドウは、graphicオブジェクトが作られたときに現れます。次の図は、このパッチで buttonをクリックしたときの結果を示しています。

異なった座標で oval が再描画されると、それまでの oval は自動的に消されます。これは、ovalが位置(そしてサイズ)を変更するスプライトとして動作するためです。

オブジェクトを移動させる方法

oval のようなスプライトに基づくオブジェクトをスクリーン上で移動させる場合に、linemousestate という2つのオブジェクトが役立ちます。line は、軌道に沿って滑らかにスプライトを移動させることができます。それに対して、mousestate は、マウスの後を追うようにスプライトを移動させることができます。

次の例は、line を使ってoval をウィンドウの端からもう片方の端へ移動させるプログラムです。左と右を指定する座標だけが line オブジェクトの出力によって変化している点に注意して下さい。

次の例では、mousestate を使って、マウスの後を追尾させています。mousestate は、poll graphic オブジェクトの名前をアーギュメントとしてつけ加えたメッセージを受信すると、関連づけられたグラフィックスウィンドウがアクティブになった場合に、マウスのポーリングを開始します(Options メニューの All Windows Active によってすべてのウィンドウが使用可能になった場合には、常にポーリングを行ないます)

訳注:ポーリングとは、接続されている機器などに定期的に問い合わせを行ない、それに対する応答を監視することを言います。ここでは、マウスポインタの位置を絶えず監視し、その座標を出力しています。

グラフィックスウィンドウ内におけるマウスのローカル座標は、mousestate の第2アウトレット(水平方向)および第3アウトレット(垂直方向)から出力されます。このパッチでは、 oval はマウスが移動するたびに色を変えながら、マウス位置を中心として描画されます。

pict オブジェクトを使って、保存されている任意の PICTファイルをグラフィックウィンドウに表示することができます。PICT ファイルはグラフィックウィンドウにフルサイズで表示され、pict オブジェクトの第2、および第3インレットで受信した数値によって、画像の左上の座標位置が決定されます(ほとんどの場合、PICT の領域に、画像の表示にちょうど良い大きさを持たせ、余計な余白が生じないようにしたいと思うでしょう)。ウィンドウ上でのPICT の配置や、スプライトの優先順位は、上記のような幾何学的なシェイプと同様にコントロールすることができます。

QuickTimeムービー

コンピュータに QuickTime がインストール済みであれば、movieimovieというオブジェクトを使って、Max の中でQuickTime ムービーを再生することができます。この2つのオブジェクトは非常に良く似た機能を持っています。movie オブジェクトは、独自のウィンドウでムービーを表示します。そして、imovie は、パッチャーウィンドウ内のボックスでムービーを表示するユーザインターフェイスオブジェクトです。標準の QuickTime コントロールは、playbar という別のユーザインターフェイスオブジェクトとして利用でき、このアウトレットをmovie または imovie オブジェクトのインレットに接続します。movieimovie は、 startstopと いったようなメッセージで直接コントロールすることも可能です。rate メッセージによって再生スピードを変えたり、ムービーの中の位置を指定して直ちに任意のフレームにジャンプすることもできます。また、prevnext メッセージによって前後に往復させることも可能です。

  ピッチベンドホイールを使って、ムービーを前後に往復させます。   hslider を使って、ムービーの再生速度をコントロールします

パッチャーウィンドウ内のグラフィックス

パッチャーウィンドウのグラフィックな外観を設計する方法がいくつかあります。他のアプリケーションから PICT フォーマットの画像をコピーして、Max の Edit メニューから Paste Picture コマンドを選ぶと、その画像をパッチャーに配置することができます。また、fpic オブジェクトを使って、別に保存されている PICT ファイルをパッチにロードすることもできます。ubutton という透過ボタンオブジェクトと画像を組み合わせて使用したり、提供されている様々なユーザインターフェイスオブジェクトを使用することによって、望むような外観のユーザインターフェイスを作成することができます。Max の実行中に bpatcher オブジェクトに offset メッセージを送信し、埋め込まれたパッチの様々な部分を表示させることによって、パッチャーの外観を自動的に変更することさえ可能です。

imovie および lcd オブジェクトはパッチャーウィンドウ内でアニメーションや描画を作成することを可能にしてくれます。lcd オブジェクトは、movotolinetopaintovalpaintrect frameovalframerect、などのような基本的な QuickDraw コマンドと同様なメッセージを理解することができます。そのため、パッチャーウィンドウ自体の中に、直接、自動的に描画を行なうパッチを作成することができます。メッセージ movetomove はカーソル位置を指定するために使われ、メッセージ colorpenmode はピクセルがどのようにペイントされるかをコントロールします。そして、他のコマンドは直線、シェイプ、文字を ldc オブジェクトの中に描画します。


lcd の中に、ピッチベンドホールを使って描画します

lcd オブジェクトもまた、カラーのペイントソフトウェアと同じような方法で、マウスの動きに応答します。lcd オブジェクトの中でユーザがクリック、あるいはドラッグを行なうと、 lcd は(いちばん最後に受信した color メッセージに基づいて)選択された色を使って描画を行ない、lcd の左上隅を基準として、相対的なマウス座標を報告し、オブジェクトのアウトレットから出力します。次の例で示すように、これを使って描画の動きを音楽の生成に使うことができます。


lcd の中でマウスによる描画を行なうことによって、ノートを演奏します

imovie オブジェクトを使って、QuickTime ムービーを直接パッチャーに埋め込むことができます。imoviemovie オブジェクトと同じ方法でムービーを表示します(上記の 「QuickTime ムービー」を参照して下さい)。さらに、オブジェクトの内側でマウスがクリックされると、その座標位置を出力します。

参照

graphic グラフィックスウィンドウを開きます
imovie パッチャーウィンドウの中でQuickTime ムービーを再生します
lcd パッチャーウィンドウの中で、QuickDraw グラフィックスを描画します
mousestate マウスの状態と位置を報告します
movie ウィンドウの中でQuickTime ムービーを再生します
oval グラフィックスウィンドウに塗りつぶされた楕円を描画します
pict グラフィックウィンドウにPICTファイルを表示します
チュートリアル42 グラフィックス
チュートリアル43 パッチャーの中のグラフィックス