ゲームライブラリSFMLを制作環境に選んだ理由のひとつが、Androidでも動く(ようになる)ことでした。
しかし、まだAndroidでの動作はテスト版のため情報不足で、今までどうにも動作させられずにいました。
最近、再び挑戦し、ようやく実機でサンプルプロジェクトを動作させることに成功しました。
今までと同じ箇所で詰まったのですが、サンプルのソースコードから、効果音を再生する部分を除外したら正常に起動しました。
どうも、一部の機種でサウンド関連でクラッシュすることがあるようで、今後の修正に期待します。
これに気を良くして、制作中の落ち物パズルもAndroidで動かしてみました。
これも苦戦しましたが、どうにか達成できました。
スクリーンショットは、ノートパソコンとAndroidで同時に起動してみたところです。
対戦モードや、シナリオモードも動きます。
特に処理落ちもしていなくて、Windowsと同じような印象でプレイできます。
ただ、マウスと比べて、ボールをタップしにくいですね。
------
動かすためのポイントは色々あります。
サンプルプロジェクトの時同様、サウンド関連の記述は全て除外しないといけません。
「SFML_SYSTEM_WINDOWS」というdefineで分岐し、Windowsで動作している場合のみ、サウンド関連の処理を行うようにします。
fopen_sやsprintf_sなどの、Visual Studio専用の関数は使えません。
これらを多用していたので、かなり書き換える必要がありました。
ソースファイルの文字コードをUTF-8に変更しないと、Androidでは描画した全角テキストが文字化けします。
マウス用の入力クラスは反応せず、「sf::Touch」というタッチ操作用のクラスを使う必要があります。
assetsフォルダに入れられるファイルには容量制限があるらしいので、制限オーバーするであろう日本語フォントファイルは、サブセット化(縮小)しておきました。
あと、私だから詰まったところとして、assetsフォルダにあるファイルをfopenなどで読み込むことはできないようです。
私は素材ファイルを独自のアーカイブ化でまとめていましたが、Android版ではアーカイブファイルを読めないので、元の画像のままassetsに入れる必要がありました。
他にも細かい修正点が諸々。
-----
これらを乗り越え、どうにか動かすことができました。
Androidで動くのを見ると、嬉しいものですね。
まだサウンドの再生ができないので、このままではゲームが完成してもAndroid版の配布はできません。
対応策や修正がないか、公式フォーラムをチェックしておきたいと思います。