iPhoneをアンドロイドに移植する際の注意点をまとめてます。
5)タッチイベントが遅い。
「ここでキスして」はゲームをクリアすると次の動画に進めるというスタイルなのですが、そのゲームがタイミングゲームになってます。音に合わせて、画面にタッチ、オフするタイミングを合わせるとハートが膨らんでいくゲームです。その際にどのくらいをタイミング内としてマージンを持たせるかで、ゲームの難易度を決めてます。
IPHONEでは、タイマーを2つ走らせていて、メインのBPMと、マージンを図るためのBPMのタイマーです。
しかし同じ仕様でアンドロイドで組んだところ、全くタイミングがずれます。
限りなく処理を軽くするために画像の軽量化はもとより、本来アニメーションで組んでいたハートの動きもパラパラアニメに変更、タイマーも最小限のタイマーのみなどに変更。
もう完全に設計変更です。
で、BPMが遅いうちはタイミングがある程度合う。しかし早くなるとちょいと後乗りでタップしないと合わない。原因として、タッチイベントが遅く、処理が10msレベルの遅延が発生していることが判明。
これは、自分の実機の可能性もありますし、ひょっとして回すプログラムをもう少し軽量化することで回避できるかもしれませんが、それを探すよりも、必要以上のマージンを持たすほうがよいと判断。
で、アンドロイド版はIPHONE版に比べて相当簡単になってます。
具体的にいうと、IPHONE版はマージンが20%までOKにしてますが、アンドロイドは、40%くらいまでずれても正常と判断するようにしてます。あまり、ゲームの難易度を上げて次に進めないのも微妙ですし、機種依存で簡単な端末と難しい端末が出るのも好ましくないのでそのようにしました。遅れのタイミングもおそらく機種によって違うと思います。
しかし、「太鼓の達人」みたいなゲームもあると思うので、その辺がクレームも少なくやっているかと思うのでその辺にヒントはあるのでしょう。それくらいシビアなゲームを作る際にはもう少し検証する必要があると思います。
6)メーカーごと、いや機種ごとに仕様が違います。
これですが、今回有料版でお客さんにも協力いただいて判明したものです。
具体的にはSDカードのアドレスが違います。有料版の「ここでキスして」は動画の容量が80Mを超えるので、一部の動画をゲーム初めに別でSDカードにダウンロードするようにしてます。しかし、ふたを開けてみるとSDカードのアドレスが結構ばらばら。
Environment.getExternalStorageDirectory()
で、アドレスを取得しちゃだめです。90%以上の参考資料ではこれで書いてますが、
System.getenv("EXTERNAL_STORAGE2")
または、
System.getenv("EXTERNAL_STORAGE")
が正解。気になる詳細ですがここはじらすこと次回。
↑ここを激しくクリック!
↑もっと強くクリック!