Blog

2010.12.24

Androidで走るProcessingアプリケーション

Yu Nejigane

Engineer

今日は24 Season8 を徹夜で見ます。祢次金です。

前回、CinderでiPadアプリケーションを書きましたが、今回はJavaベースのProcessingを使ってAndroidアプリケーションを書いてみます。


環境構築

まだベータ版という位置づけですが、Android向けアプリケーションをつくることができるPDE(Processing Development Environment)が既に公開されており、こちらからダウンロードできます。
勿論Android SDKもインストールしておく必要があります。上記リンク先のInstructionに従い、必要なAPI Levelのコンポーネントを入れておきましょう。

PDEを起動するとおなじみのスケッチ画面が現れます。
メニューの「Android」から「Android Mode」を選択し、スケッチのモードを切り替えておきます。
あとはスケッチにコードを書き込んで「Run」でエミュレータ、「Present」で実機にアプリケーションをデプロイできます。ラクチンです。

サンプル実装

Processingの書き方については詳しくはここでは触れません。本家サイトをご参照ください。いきなりアプリケーションの実装に入りたいと思います。
しつこいようですが、またタッチ位置にパーティクルを発生させるサンプルアプリケーションを書いてみます。まずはメインのコード。下記コードをスケッチに書きます。setupがはじめに一度呼ばれ、後はdrawが繰り返し呼ばれます。Cinderとは違い、updateはありません。Particleというクラスについては別に定義します。

List<Particle> particles;

void setup() {
  particles = new LinkedList<Particle>();
  ellipseMode(CENTER);
}

void draw() {
  background(255);
  fill(0, 180, 180);
  stroke(0, 180, 180);

  if (mousePressed)
    particles.add(new Particle(new PVector(mouseX, mouseY)));

  for (int i = 0; i < particles.size();) {
    Particle particle = particles.get(i);
    particle.draw();
    particle.update();
    if (particle.isDead())
      particles.remove(i);
    else
      i++;
  }
}

書き方に多少の違いはありますが、これまでのサンプルと同じく、タッチ位置にパーティクルを発生させるだけです。毎フレーム、背景をクリアし、描画色を設定。各パーティクルを描いた後、その状態を更新し死活判定をしています。タッチについては、mousePressedをチェックすることで有無を判定し、mouseX、mouseYでその位置がとれます。このような名前になっているのはデスクトップアプリ向けに書いたものをそのまま転用しやすくするためと思われます。マルチタッチにはまだ対応していないようです。

続いて、Particleクラス。新しいタブをつくり、Particleと名前をつけて以下のコードを書き込みます。こちらも、これまでのサンプルと大きくは変わりません。PVectorはProcessingで用意されているベクトルクラスです。

class Particle {
  private PVector location;
  private PVector velocity;
  private float diameter;
  private int life;

  Particle(PVector _location) {
    location = _location;
    velocity = new PVector(random(-4, 4), random(-4, 4));
    diameter = random(16);
    life = int(random(50, 250));
  }

  public void update() {
    location.add(velocity);
    life--;
  }

  public void draw() {
    ellipse(location.x, location.y, diameter, diameter);
  }

  public boolean isDead() {
    return life <= 0;
  }
}

これで完了です。

実機での実行

実機で実行してみた結果が以下になります。(エミュレータでも実行してみましたが、私の環境では重すぎて使い物になりませんでした…)

おわりに

Androidで動くProcessingアプリケーションを書いてみました。現状ではマルチタッチに未対応だったり、1スケッチがAndroidの1Activityとなるため他アプリケーションへの埋め込みが難しかったりと、まだ色々課題はあるようですが、Processingの活躍の場が広がって楽しくなりそうです。

それでは皆さん、良いクリスマスイブを!!!

  • Twitter
  • Facebook