当たり判定の調整(Phaser3)

この記事は約4分で読めます。
スポンサーリンク

やりたいこと

Phaser3で物理エンジン(Arcade)の当たり判定を設定します。

例としてPhaser 3チュートリアルのPart10を参考に行います。

コードのダウンロードやコメントなどは以下のページに記載しましたのでご参照ください。

スポンサーリンク

準備

まずは以下のページを参照して当たり判定を表示します。

スポンサーリンク

当たり判定の設定

矩形を設定

Phaser.Physics.Arcade.Components.Sizeを継承しているオブジェクトに対して(spriteなど)

setSize()およびsetOffset()を呼びます。

setSize(width, height, [center])

SetSizeの引数は以下の通りです。

Width:当たり判定の幅

Height:当たり判定の高さ

center:trueを渡す指定したサイズをオブジェクトの中心に設定します。falseを渡すと指定したサイズをオブジェクトの左上に設定します。デフォルトtrue

setOffset(x, [y])

setOffsetの引数は以下の通りです。(オブジェクトの中心指定の場合は不要です。)

x:左上からのxオフセット

y:左上からのyオフセット

setBodySize()もありますが、同じようにオブジェクトを作成しても呼べないときがありました。

円形を設定

Phaser.Physics.Arcade.Components.Sizeを継承しているオブジェクトに対して(spriteなど)

setCircle()を呼びます。

setCircle(radius, [offsetX], [offsetY])

setCircleの引数は以下の通りです。(オブジェクトの中心指定の場合は不要です。)

radius:設定する円の半径

offsetX:左上からのxオフセット

offsetY:左上からのyオフセット

スポンサーリンク

Phaser3 Turtorialで使用してみる

チュートリアルでは以下のキャプチャのようにPlayerの頭側に当たり判定が広く、違和感があります。

矩形で設定

以下のようにplayerを作成後にsetSize(32, 24).setOffset(0, 24)を呼びます。

    // The player and its settings
    player = this.physics.add.sprite(100, 450, 'dude');
    player.setSize(32, 24).setOffset(0, 24);    ///追加

当たり判定が左上からx=0、y=24移動(setOffsetで指定)したところから始まる32×24(setSizeで指定)の矩形になります。

円形で設定

以下のようにplayerを作成後にsetCircle(16, 0,16)を呼びます。

    // The player and its settings
    player = this.physics.add.sprite(100, 450, 'dude');
    player.setCircle(16, 0,16);

当たり判定が左上からx=0、y=16移動(第2、第3引数で指定)したところから始まる半径16(第1引数で指定)の矩形になります。

直径ではなく半径で指定なので注意。

今回は画像幅32pxに合わせた円を設定するために32/2の16を設定しています。

スポンサーリンク

結果

当たり判定を設定することができました。

スポンサーリンク

参考にさせていただいたサイト

Phaser3 Arcade物理エンジンの基礎
Phaser.Physics.Arcade.Components.Size - Phaser 3 API Documentation

コメント

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