🐦

[phina.js]Physicalクラスでオブジェクトを動かす

2022/07/10に公開

はじめに

phina.jsにはPhysicalという物理運動に似せた動きをオブジェクトに簡単に適用できるクラスが用意されています。今回は、このPhysicalについて簡単に説明したいと思います。

Physicalクラスの使い方

Physicalクラスは、Accessoryというクラスを継承しています。
使用する際には、Shapeなどのオブジェクトにアタッチ(取り付け)する必要があります。

以下は、CircleShapeにアタッチする例です。

var circle = CircleShape().addChildTo(this);
var physical = Physical().attachTo(circle);

もしくは、以下のようにオブジェクトのプロパティとして明示的にphysicalを設定すると、バックグラウンドでアタッチされます。

var circle = CircleShape().addChildTo(this);
circle.physical.gravity.set(0, 0.5);

上記の場合、オブジェクト変数名.physicalでプロパティにアクセスできるようになります。特段の理由がない限りは、手軽なこちらのアタッチ方法をお薦めします。

Physicalクラスのメンバ

Physicalクラスのメンバは、以下のとおりとなっています。

velocity

  • velocity.x ・・・ x方向の速さ
  • velocity.y ・・・ y方向の速さ

xとyそれぞれ個別、velocity.set(x, y)による一括指定、force(x, y)メソッドによる指定ができます。addForce(x, y)で加速させることもできます。

physical.velocity.x = 4;
physical.velocity.set(4, 8);
physical.force(0, 4);
physical.addForce(0.5, 0);

gravity

  • gravity.x ・・・ x方向の重力
  • gravity.y ・・・ y方向の重力

xとyそれぞれ個別、gravity.set(x, y)による一括指定ができます。

physical.gravity.y = 4;
physical.gravity.set(4, 8);

friction

  • friction ・・・ 摩擦度

デフォルト値は1.0です。0に近づくほど摩擦が強くなりますので、設定の際は注意してください。xとy方向、双方に適用されます。

physical.friction = 0.98;

まとめ

最後にPhysialクラスを使ったサンプルを紹介します。
本来の正確な物理運動ではありませんが、それらしい動きになっているのがお分かりになるかと思います。

physical-sample.gif

サンプルコード(runstant)

Discussion