phina.jsでSpriteの輪郭を強調
自機や敵やアイテムが視認しづらいめう!
PhinaShooterでは全体をドット調で表現していこうと思っている。
で、そのためにCanvasを480x320という小さなサイズで描いた上で拡大するという方法をとっている。
ただ、当然画面が粗くなって各スプライトの視認性が悪くなってしまった。
そこで上の動画のようにスプライトの輪郭を点滅させて強調表示することにした。
輪郭を強調するめう!
方法としては原始的で、
- 画像アセットのロード後に輪郭のみ抽出した画像を作成する
- AssetManagerに作成した画像を登録する
- スプライトに輪郭のみの画像を重ねて表示する
こんな感じでやってみた。
まず、輪郭抽出の方法だが、元画像からピクセルデータを取り出し、
- アルファ値が0より大きく
- 上下左右にアルファ値が0のピクセルがある
…という条件を満たすピクセルだけを白く塗りつぶした新しい画像を作成する。
|
|
こうして作った画像をAssetManagerに登録する。
|
|
アセット名はもとの名前に後ろに”Outline”をつけてみた。
で、こいつを利用するスプライトだが、通常のSpriteクラスを拡張して作る。
|
|
輪郭スプライトを元スプライトの子要素として追加しておく。
さらにupdateメソッド内でframeIndexが親スプライトと同期するようにする。
また、輪郭スプライトのアルファ値は外部から設定できるようにしておき、MainSceneなどのupdateで更新する。
オブジェクトの種類に応じて色を変えるめう!
これで視認性が良くなったと思うので、さらに自機は青、アイテムは緑、敵は赤といった具合にオブジェクトの種類に応じて輪郭色を変えてみた。
これで粗い画面でも最低限の識別ができるようになったと思う。