FrocessingではじめるActionScriptドローイング

第1回じめてのFrocessing

私がプログラミングの学習をはじめたころ、入門本を片手にサンプルコードをタイプしてコンパイルすることを繰り返していましたが、ただ書き写しているだけという感覚しか持てないでいました。しかし、ディスプレイ上に表示されるグラフィックを描くプログラムになると、同じ書き写しであるのに楽しいのです。

フラクタルであったり図1⁠、マウスで線を描画するような簡単なプログラムでしたが、表示された絵を視覚することを通して、ソースコードと実行結果が繋がっているように思え、プログラミングという行為を実感できたからだと思います。

ディスプレイに結果が現れるプログラムは楽しいし興味が持てる。これは一般的な感覚と異なるかもしれませんが、私にとってはプログラミングを行う主要な動機です。この連載では、Flashによるグラフィック描画のプログラミングについて解説していきます。その楽しさを感じていただければ幸いです。

図1 シェルピンスキーギャスケット
図1 シェルピンスキーギャスケット

Flashによるグラフィク描画

グラフィック描画の基本

はじめに、Flashでグラフィックを描画するプログラムの基本を確認しておきましょう。

以下のプログラムをご覧くださいリスト1⁠。実行すると線が赤、塗りが白の矩形が描画されます図2⁠。

リスト1 矩形描画のプログラム
graphics.lineStyle( 0, 0xff0000 );
graphics.beginFill( 0xffffff );
graphics.drawRect( 50, 50, 200, 100 );
graphics.endFill();
図2 リスト1の実行結果
図2 リスト1の実行結果

プログラム中の「graphics」はグラフィックを描画するときに利用するクラス(flash.display.Graphics)のインスタンスです。Flashにはラスタ画像データ(flash.display.BitmapData)に直接ピクセルを描画するAPIもありますが、大抵はこのGraphicsクラスを使います。例で使用されているGraphicsクラスのAPIを紹介します[1]⁠。

線の指定(lineStyle)

描画する線の色、透明度、幅などを指定できます。線をグラデーションで描画することもできます。

塗りの指定(beginFill,endFill)

描画する塗りの色、透明度を指定できます。beginFill()からendFill()の間に記述されたシェイプ、またはパスに指定した塗りが適用されます。単色のほか、グラデーションや画像データで塗るAPIも提供されています。

シェイプ(drawRect)

シンプルな四角形を描画する関数です。このほかに楕円を描画する関数などが提供されています。

パス

例には含まれませんが、形状の頂点を個別に指定し、直線や曲線(2次ベジェ曲線)を組み合わせることで自由な形を描画できます。シェイプ(矩形や楕円)はパスで再現することができ、これが形状の汎用的な記述方法となりますリスト2⁠。

リスト2 パスによる矩形描画
graphics.moveTo(  50,  50 );
graphics.lineTo( 250,  50 );
graphics.lineTo( 250, 150 );
graphics.lineTo(  50, 150 );
graphics.lineTo(  50,  50 );

まとめると「線と塗りを指定してパスで形状を記述する」ことが描画の基本だと考えていただいて結構です。

ライブラリの活用

Graphicsクラスで提供されている描画APIは前述のようにシンプルなものです。複雑なグラフィックの描画はそれらの描画APIを組み合わせることになります。この場合、同じ処理を何度も記述する、手続きが多いなど冗長なプログラムになりがちです。

そのため、グラフィック描画をプログラムする場合にはライブラリを利用することが多々あります。例えば、3Dのライブラリとして有名な「Papervision3D」を利用すれば、3次元グラフィック描画の複雑な処理を記述する必要がありません。

本連載で利用するFrocessingは、そんな描画系ライブラリのひとつです。

Frocessingについて

Frocessingとは

"Frocessingとは何か?"その説明をする前にProcessingについて簡単に紹介したいと思います。Processingとはグラフィック制作向けのプログラムを行う開発環境(ソフトウェア)です。独自の描画APIとシンプルな開発ツールによって、手軽に、直感的にプログラミングできるよう工夫されています。

Frocessingは、そのProcessingのような描画APIをActionScript3で利用できるようにしたライブラリです。Processingのように手早くプログラミングできることを目的としています。

Graphicsとの違い

次のプログラムリスト3はリスト1のプログラムをFrocessingを利用して記述したものです。

リスト3 矩形描画のプログラム
stroke( 255, 0, 0 );
fill( 255 );
rect( 50, 50, 200, 100 );

同じ処理が手早く書けることが分かっていただけると思います。これだけを見ると大きな違いはないように思えますが、いろいろな描画プログラムを試す場合など、小さな違いの積み重ねがプログラミングのスピードや快適さに与える影響は少なくないと思います。

Frocessingの準備

プログラミングをはじめる前に、プログラム環境とFrocessingライブラリを準備します。後述するWonderflを利用する場合、この準備は必要ありません。ローカル環境で制作する際の参考にしてください。

プログラム環境の準備

この連載ではActionScript3のプログラミングを行います。ActionScript3で書かれたプログラムをコンパイルするには、Flash CS3以降か、FlexSDKを用いるとよいでしょう。FlexSDKは無料で利用できる開発環境ですので、ActionScriptによるプログラムを試したい方にお勧めです。FlexSDKのセットアップ、使用方法、ActionScriptの基本についてはプログラマのためのFlash遊び方をご覧ください。

Frocessingのダウンロード

Frocessingライブラリは、日本最大のFlash・ActionScriptのオープンソースコミュニティであるSpark Projectで公開されています。

Frocessingのプロジェクトページ図3を開くと「Source Code」のブロックにライブラリのデータについて情報が記載されています。最新のソースファイルはSVNリポジトリから閲覧・ダウンロードが可能ですが、今回はZIP形式のデータをダウンロードして使用します。現在の最新版である「frocessing-0.5.7.zip」をダウンロードしてください。

図3 Frocessingのプロジェクトページ
図3 Frocessingのプロジェクトページ

ライブラリの設置

ダウンロードしたZIPを解凍すると「frocessing」というディレクトリが含まれています。このディレクトリがライブラリの本体です。既にライブラリを置く場所が決まっている場合は「frocessing」ディレクトリを所定の場所へコピーすれば利用が可能となります。今回は説明のために「C:\test\」にコピーしたものとします。

Frocessingのサンプルコード

まずは、以下のFlashをご覧ください。

図4 Frocessingのサンプル

これはFrocessingを利用してプログラミングされた簡単なグラフィック描画のサンプルです。時間経過とともにランダムな曲線が描画され、マウスクリックで描画内容がクリアされます。このプログラムのソースは以下のようになります。

リスト4 FrocessingSample.asソースのダウンロード
package {
  import frocessing.display.*;
  [SWF(width="465", height="465", frameRate="60")]
  public class FrocessingSample extends F5MovieClip2DBmp{
    private var stage_width:Number  = 465;
    private var stage_height:Number = 465;
    private var n:int = 5;
    private var t:Number = 0;
    
    public function FrocessingSample() {
      super();
    }
    
    public function setup():void {
      size( stage_width, stage_height );
      background( 0 );
      noFill();
      stroke( 255, 0.1 );
    }
    
    public function draw():void {
      if ( isMousePressed )
        background( 0, 1 );
      
      translate( 0, stage_height / 2 );
      beginShape();
      curveVertex( -100, 0 );
      for ( var i:int=0; i <= n; i++ ){
        var xx:Number = i * stage_width / n;
        var yy:Number = noise( i * 0.25, t ) * 300 - 150;
        curveVertex( xx, yy );
      }
      curveVertex( stage_width+100, 0 );
      endShape();
      t+=0.01;
    }
  }
}

このプログラムを書き写すか、ファイルを保存して、先ほどのライブラリと同じディレクトリに置いてください。

次にサンプルコードをコンパイルして動作させるためのいくつかの方法をご紹介します。

FlexSDKでコンパイルする

サンプルコードのファイルを作成するとディレクトリが図5のような状態になっていると思います。

図5 ライブラリとサンプルコード
図5 ライブラリとサンプルコード

FlexSDKを利用する場合は、コマンドラインツールでコンパイルを行うので、まずはプログラムのあるディレクトリに移動します。

cd C:\test\

ここで以下のコマンドを実行します。

mxmlc FrocessingSample.as

問題なければサンプルコードがコンパイルされ「FrocessingSample.swf」が生成されます。このSWFファイルをブラウザにドラッグ&ドロップすることで実行結果を確認できます。

FlashCS4(CS3)でコンパイルする

サンプルコードのパブリッシュ

FlashCS4(CS3)でコンパイルする場合には、新しくflaファイルを作成します図6⁠。

図6 flaファイルの作成
図6 flaファイルの作成

次にflaファイルのドキュメントクラスにサンプルコードを指定します。このときステージサイズやフレームレートも設定しておきます図7⁠。

図7 ドキュメントクラスと各種設定
図7 ドキュメントクラスと各種設定

ここでメニューから「制御→ムービープレビュー(Ctrl+Enter⁠⁠」を選択するとSWFファイルが生成され、同時に実行結果を見ることができます。

フレームスクリプトに書く

FlashCS4(CS3)で制作する場合には、フレームスクリプトに直接プログラムを書くこともできます。今回のサンプルコードを例に手順をみていきましょう。

新しくflaファイルを作成し、ドキュメントクラスに「frocessing.display.F5MovieClip2DBmp」を指定します。これはサンプルコードで記述したクラス(FrocessingSample)のスーパークラスにあたります。ステージサイズやフレームレートも設定しておきます図8⁠。

図8 ドキュメントクラスと各種設定
図8 ドキュメントクラスと各種設定

次に先頭のフレームを右クリックし「アクション」を選択して「アクション-フレーム」ウインドウを開きます。このウインドウに記述されるプログラムをフレームスクリプトといいます。フレームスクリプトではクラスの定義などを行わずに、変数や関数だけを書くことになります。サンプルをフレームスクリプトで記述すると以下のようになります。

リスト5 フレームスクリプトサンプル
var stage_width:Number;
var stage_height:Number;
var n:int;
var t:Number;

function setup():void {
  stage_width = 465;
  stage_height = 465;
  n = 5;
  t = 0;
  size( stage_width, stage_height );
  background( 0 );
  noFill();
  stroke( 255, 0.1 );
}

function draw():void {
  if ( isMousePressed )
    background( 0, 1 );
  
  translate( 0, stage_height / 2 );
  beginShape();
  curveVertex( -100, 0 );
  for ( var i:int=0; i <= n; i++ ){
    var xx:Number = i * stage_width / n;
    var yy:Number = noise( i * 0.25, t ) * 300 - 150;
    curveVertex( xx, yy );
  }
  curveVertex( stage_width+100, 0 );
  endShape();
  t+=0.01;
}

ここでムービープレビュー(Ctrl+Enter)を実行すれば、SWFが生成され実行結果を見ることができます。この方法であれば別途クラスファイルを作成する必要がなく、より手軽にグラフィック描画のプログラムを試すことができます。

Wonderflを利用する

Wonderflとは

最後にWonderflの利用を紹介します。Wonderflはブラウザ上でActionScriptをコンパイルしFlashを制作することができるWebサービスです。面白法人KAYACが無料で提供しています。本連載で利用するFrocessingもサポートされています。

Wonderflの概要や利用方法についてはブラウザだけでできる!wonderflではじめるFlash制作をご覧ください。

Wonderflでサンプルコードを実行する

実際にWonderfl上で動作するFlashを見てみましょう。再生ボタンをクリックするとFlashが開始させます。

図9 FrocessingSample - wonderfl build flash online

タイトル「FrocessingSample - wonderfl build flash online」のリンクからWonderflを表示すればFlashとプログラムを合わせて見ることができます(プログラムは今回のサンプルと同じものです⁠⁠。

Wonderflでforkする

Wonderflの特長としてforkと呼ばれる機能があります。投稿されたプログラムを元に新しくプログラムを作成する別名保存のような機能です。試しにサンプルコードをforkして、線に色を付けたFlashを制作してみました。

図10 forked from: FrocessingSample - wonderfl build flash online

グラフィック描画のプログラムはパラメータを変化させることでいろいろな表情の結果が現れることもたのしさの一つですので、forkを積極的に活用してはいかがでしょうか。

まとめ

初回はFrocessingの概要とプログラム環境について説明しました。グラフィック描画のプログラミングを楽しむには手軽に試せることが大切ですので、自分にあった制作環境を選んでください。次回からはFrocessingの描画APIの説明をはじめたいと思います。

なお、本連載で掲載するサンプルはWonderflで公開していく予定です。まだWonderflのIDをお持ちでない方はこの機会に登録してみてはいかがでしょうか。

おすすめ記事

記事・ニュース一覧