【Processing】オブジェクトをマウスカーソルに追従させる方法

Processingでマウスカーソルに追従させる方法 Processing

Processingでゲームを作る際に、オブジェクトをマウスカーソルに追従させたい時があると思います。

オブジェクトがカーソルにぴったりついてくるのではなく、少し遅れてついてくるイメージです。


やり方を紹介します。

完成形

Aniというライブラリをインストールさせて、次のプログラムを実行させると、オブジェクトがカーソルに追従するサンプルプログラムが見られます。

import de.looksgood.ani.*;
import de.looksgood.ani.easing.*;

int x = 0;
int y = 0;

void setup(){
  size(600, 400);
  Ani.init(this);  //初めに、必ずAniクラスをこれで初期化。
}

void draw(){
  background(255,255,255);
  ellipse(x, y, 30, 30);
}

void mouseMoved() {
  Ani.to(this, 2, "x", mouseX);  //xの値を3秒後に200に変更する
  Ani.to(this, 2, "y", mouseY);  //yの値を3秒後に200に変更する
}

オブジェクトをマウスカーソルに追従させるまでの手順

オブジェクトをマウスカーソルに追従させるために重要なところを解説していきます。

1. Aniライブラリをインストールする

特定の時間かけてオブジェクトの場所を変更する、ということを実現するためにAniというライブラリを使います。

「スケッチ > ライブラリをインポート… > ライブラリを追加…」のように選択してください。

左上のFilterと書かれた検索欄に「Ani」と入れて検索します。

「A lightweight library for creating animations and …」と書かれたライブラリを選択して、Installボタンをクリックします。

2. import文を書く

次のようなimport文を書くことで、ライブラリを使用できるようにします。

import de.looksgood.ani.*;
import de.looksgood.ani.easing.*;

3. オブジェクトの位置を決める変数を定義する

import de.looksgood.ani.*;
import de.looksgood.ani.easing.*;

int x = 0;
int y = 0;

4. Aniクラスを初期化する

setup関数の中でAniクラスを初期化します。

import de.looksgood.ani.*;
import de.looksgood.ani.easing.*;

int x = 0;
int y = 0;

void setup(){
  size(600, 400);
  Ani.init(this);  //初めに、必ずAniクラスをこれで初期化。
}

5. オブジェクトを描画する

マウスカーソルに追従させたいオブジェクトを描画できるようにします。

import de.looksgood.ani.*;
import de.looksgood.ani.easing.*;

int x = 0;
int y = 0;

void setup(){
  size(600, 400);
  Ani.init(this);  //初めに、必ずAniクラスをこれで初期化。
}

void draw(){
  background(255,255,255);
  ellipse(x, y, 30, 30);
}

6. カーソルを動く度に遅れて追従させる

Aniライブラリでは、次のようにすると、特定の秒数かけて値を変更するということができます。

Ani.to(this, 値の変更にかける秒数, 値を変更する変数名, 変更後の値)

mouseMoved関数の中にこれを書くと、カーソルが移動する度に、カーソルに向かってオブジェクトが移動するようになります。

import de.looksgood.ani.*;
import de.looksgood.ani.easing.*;

int x = 0;
int y = 0;

void setup(){
  size(600, 400);
  Ani.init(this);  //初めに、必ずAniクラスをこれで初期化。
}

void draw(){
  background(255,255,255);
  ellipse(x, y, 30, 30);
}

void mouseMoved() {
  Ani.to(this, 2, "x", mouseX);  //xの値を3秒後に200に変更する
  Ani.to(this, 2, "y", mouseY);  //yの値を3秒後に200に変更する
}

コメント

タイトルとURLをコピーしました