2017年1月9日月曜日

iOS版のLaiNESを作成

先日Androidで作成したLaiNESをiOSにも移植してみました。
https://github.com/suzukiplan/LaiNES-iOS

前の記事で書いているように、最初Android版と同様OpenGLを使う方向で作っていたのですが、如何せんパフォーマンスが悪いと感じたので、CoreAnimationLayerで映像バッファをダイレクトに書き込む方式(VGSと同じ方式)で実装するように作り直していたら丸1日掛かってしまった...(その間、デレステのイベントが走れずランキングが500位台から2000位のボーダーギリギリまで落ちてしまった)

結果的に、パフォーマンスはOpenGLよりも良くなりました。
知っていたことですが、やはりGPUレンダリングはピクセルバッファの描画に弱い。
CPUレンダリング最高です。
(※レンダリングにはピクセルバッファしか使わない勢限定ですが)

Android版と若干異なる点として、バーチャルパッドのデザインを変えました。

Android版のバーチャルパッドは、「普通に考えればこうなるよね」という形。
エミュレータだけでテストしていると、こういうダメなデザインになります。

一方、iOS版はこんな感じ。
一見すると野暮ったい。
ですが、実機で動かしてみると明らかにコチラの方が操作し易い筈です。

Android版のデザインのダメなところは、まず、左右のカーソルキーとA/Bボタンを同じ平行線上に並べている点ですね。
これだと、右カーソルキーを入れながらA/Bボタンを押すのがツライ。
具体的には、左親指が邪魔でA/Bが押し難くなる形になります。
この「右カーソルキーを入れながらA/Bボタンを押す」という操作は、例えば、横スクロールのアクションゲーム(スーパーマリオとか)で頻繁に使います。

そして、A/Bを横並びにしているのもマズイ。
Bを押そうとしてAを押してしまう頻度が高くなってしまうので。
この状態だと、例えば、スーパーマリオでBダッシュで助走をつけてジャンプといった操作で頻繁に誤操作が発生することになります。
縦並びにしてみたところ、誤操作はほぼ発生しなくなりました。
(ただし、スーパーファミコンのように4ボタンだと悩ましい)