[Processing]PVectorサンプル(1.0リリース記念)

Processing 1.0リリース記念として、いくつか新しい機能のサンプルコードを書いてみました。

まずはPVectorクラス。リファレンスには英語で主な使い方は書いてあるものの、実際のソースコードはありませんでした。

リファレンスに従い、position(位置)、velocitiy(速度)、acceleration(加速度)をPVectorクラスで表した実用的なサンプルを書いてみたので、PVectorクラスの1つの使い方として参考にしてみてください。

[p5code]
PFont font;
PVector position, velocity, acceleration;
final int WIDTH = 250, HEIGHT = 250;
final int STATUS_HEIGHT = 50;

void setup() {
// 画面の初期化
size(WIDTH, HEIGHT + STATUS_HEIGHT);

noStroke();
colorMode(RGB, 256);
background(255, 255, 255);

// フォントの初期化
font = loadFont(“ArialNarrow-14.vlw”);
textFont(font);

// 自機の初期化
position = new PVector(WIDTH / 2, HEIGHT / 2, 0);
velocity = new PVector(3, 4, 0);
acceleration = new PVector(0.01, 0.01, 0);
}

void draw() {
// 背景消去
fill(255, 255, 255, 30);
rect(0, 0, WIDTH, HEIGHT);
fill(255, 255, 255);
rect(0, HEIGHT, WIDTH, STATUS_HEIGHT);

// 自機描画
fill(255, 0, 0);
ellipse(position.x, position.y, 10, 10);

// 速度表示
fill(0, 0, 0);
text(“Position: ” + position, 0, height – STATUS_HEIGHT + 14);
text(“Velocity: ” + velocity.mag(), 0, height – STATUS_HEIGHT + 14 * 2);
text(“Acceleration: ” + acceleration.mag(), 0, height – STATUS_HEIGHT + 14 * 3);

// 場所の更新
position.add(velocity);
if (position.x <= 0 || position.x >= WIDTH) {
velocity.x *= -1;
acceleration.x *= -1;
position.x += velocity.x;
}
if (position.y <= 0 || position.y >= HEIGHT) {
velocity.y *= -1;
acceleration.y *= -1;
position.y += velocity.y;
}
velocity.add(acceleration);
}

[/p5code]

実行画面(クリックで拡大)

サンプルコードのダウンロード:PVectorSample.zip

About: uechoco