Phaser3 タイマーイベント@scene.time.addEventで少しハマった

Phaser3では

 

scene.time.addEvent({

    delay: ミリ秒,

    callback: コールバック関数,

    callbackScope: コールバック関数がthisにとる対象

})

 

ってな感じでタイマー処理を書ける。

 

sceneと操作キャラのクラスを分けて作っていて、操作キャラクラスで上記を記述していた。

 

callbackに設定する関数は操作キャラのクラスに書いてたが、callbackScopeにsceneのインスタンスを入れてたせいでcallback関数内でthisがsceneを呼んでしまい、操作キャラのメンバにアクセスできずにハマったった。

 

ぐえぐえ

Phaser3 gamepadについて

scene.input.gamepadがundefinedしか返してくれなくてハマった。

gameにセットするconfig.input.gamepad = trueをセットしたら取れるようになった。

 

const config = {

    type: Phaser.AUTO,

    width: 800,

    height: 600,

    // とか書くとこに下を追加

    input: {

       gamepad: true,

    },

}

babel-plugin-rewire の使い方がよくわかんなかった時の話

webpack のプロジェクトで jest を使ってテストを書こうとした時に、rewireを使ってexportしていない関数をテストしようとしたらなんか使えなかったぽい時にbabel-plugin-rewireを使おうとした時の話。

 

やったこと

 

npm install --save-dev babel-plugin-rewire

 

.babelrcに以下を追加

 

"env": { "test": { "plugins": [ "babel-plugin-rewire" ] } }

 

テストでこんな感じに書く

 

import { __RewireAPI__ as テストするモジュール_RewireAPI } from 'テストするモジュールのパス'

 

// export してない関数とか取り出すとき

const exportしてない関数 = テストするモジュール_RewireAPI.__get__('exportしてない関数')

 

exportしてない関数()

 

// exportしてない変数に値入れたりする時

テストするモジュール_RewireAPI.__set__({ exportしてない変数: 'unco' })

 

こんな感じでできましたとさ。

テストのためだけにexportするのは気持ち悪いので、これを使って気持ちよくなれました。