« Per-Monitor DPI | メイン | Android 対応必要項目と工数見積もり »

2014年03月08日

吉里吉里Z 開発:: Android 対応検討

    

現在の仕様を維持して Android 対応する方法もあるが、その場合は無理が出たり、不自然になるところが出てくる。
また開発効率も落ちる。
そのため仕様変更も含めた修正を行うことを検討している。
羽々斬では互換システムということで、仕様維持して実装したが、失敗だった面もある。

以下、羽々斬の開発、吉里吉里Zの開発、ある程度 NDK によるビルドを行い事前調査した結果を元に検討した結果。
実際の Android 対応に関する工数見積もりなどについては後日。


マルチプラットフォーム化への前準備

1. クラス間の結合度を下げる
Extension で書いた機能を使って、既存クラスを疎結合にし、クラスをビルド時に取捨選択可能にする。
最小限必要なクラス + その他クラスを分ける。
移植時最小限必要なクラスを実装した後、順次他のクラス対応していくことでマルチプラットフォーム化しやすくなる。
また、ツール用に使いやすくなる。
スマートフォンなどで不必要なものを取り除くことで、コアのバイナリサイズを減らせる。
この対応とともにクラスや依存関係が分かりやすいフォルダ構成に変更する。
また、Git では全てを一つのリポジトリに入れると扱いづらいことがわかったので、現在のコア以外も全て入れている状態から、コアはコアのみのリポジトリにして、他は別リポジトリになるように構成を変更していく。

2. Screen クラスの追加
スマートフォンなどでは基本的にアプリは全画面で起動され、複数のWindowは使われない(もしくは使えない)。
その対応のために Window クラスに近いが複数作れない Screen クラスを追加する。
Android 環境では Window クラスは削除される。
Windows 環境では、単一 Window 前提で Screen クラスを使い作るか、TJS2 によって互換をとる。
Window クラスと Screen クラスはだいたい同じメンバーを持つ(環境依存なメンバーは Screen クラスからは排除される)。
レイヤーを使う場合は、Layer Tree Owner 基準で作ることになると思うので、スクリプトレベルで互換をとることはそこまで難しくはないはず。
KAG レベルであれば互換性について心配することはほぼない (Android等は制限の多い環境であることは意識する必要はあり)。

3. DrawDevice の機種依存部分を変更
一部 Windows 依存しているメソッドがあるので変更する。
ただ、Windows では DirectX 、Android では OpenGL ES 2.0 となるので、DrawDevice は機種依存するため互換性があっても意味がない面もある。
また、根本的な部分で互換性が取れなくなり、大きくインターフェイスを変更する可能性もある。

4. Bitmap が逆順に格納されているのを正順に変更
Bitmap が逆順になっているのを正順に変更する。
Scanline や Pitch など取得して処理している場合、この変更の影響は受けないが、Height が正の値の時は逆順として処理する形になっていると修正が必要となる。

5. パスデリミタとケースセンシティブ
パスデリミタ は、Windows では¥だが、他環境では / 。
Windows では、パスは大文字小文字区別せず、吉里吉里2/Z では内部的に全て小文字として扱われるが、他環境では大文字小文字は区別され、小文字に変換してしまうと、元のファイルにアクセスできない。
羽々斬では、大文字小文字を保持した元のファイル名を別に記憶し、必要時にそのファイル名でアクセスするという周りくどい実装になっている(もしかしたら記憶違いがあるかもしれない)。
パスデリミタについては、環境に合わせた変換が行われるようにする。
現在のケースインセンシティブな仕様は、ケースセンシティブなものへ変更。
ケースインセンシティブでの検索はオプション化(互換性のため。有効にするとAndroidでは確実に問題が出る)。

6. クリック、ダブルクリック
Window クラスではそのまま残すが、Screen クラスでは削除するイベント。
環境によって発生順序が異なり、問題の元。
Down/Up で処理する方が好ましい。

7.その他
その他 Android 対応時に Windows 依存が強い部分の仕様は変更される可能性がある。
実装時や調査時、思い出した時に追記する。



投稿者 Takenori : 2014年03月08日 23:04




comments powered by Disqus
Total : Today : Yesterday : なかのひと