スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 次はiOS版の開発だが | トップページ | OpenGLのバージョンは? »

当然、言語はObjective-C

昨日から、iOS版Nostalgic UFO Battlerの開発を始めたのだが、iOS用アプリ開発は初めてなので判らないことだらけだ。もっとも、OS X版Nostalgic UFO Battlerは開発済みなので、iOSアプリの基本構造を構築できれば、何とかなる筈ではある。

で、表題にした様に、言語には、Swiftではなく、Objective-Cを使う。

これは何故なのか、というと、OS X版Nostalgic UFO Battlerは去年の4月頃に開発したのだが、その当時、Swiftの言語仕様は変更される可能性が高かったため、そんなモノを使うと、バージョンアップ開発時に痛い目を見る、と、いう事で、OS X版はObjective-Cで記述したからだ。

もっとも、Swiftの仕様が安定したとしても、少なくともNostalgic UFO Battlerについては、Objective-Cが使える限り、Objective-Cとの親和性の方が高いので、Swiftを使うのはデメリットにしかならない。

これは何故なのか、というと、Nostalgic UFO Battlerは、基本的には、C++で記述してあるからだ。

基本的には、と、書いているのはAndroid版はJavaで記述してあるからなのだが、作者的には、多重継承やテンプレート等のC++機能は使っていないので、C++とJavaの違いは殆ど無い訳だ。

実際の所としては、そもそも、Nostalgic UFO BattlerはAndroid用に開発を始めたモノなので、PC / Mac用にはC++を使ったモノの、最初から、Javaに移植する事を想定したコードにしてある訳だ。

それなら、何故、PC / Mac用もJavaで記述しなかったのか、というと、Nostalgic UFO Battlerでは、OpenGLを使っているのだが、Mac用のオラクル製Java7/8では、OpenGLが、普通には、使えないからだ。

普通には、と、書いているのは、Apple製のJava6では、比較的簡単に利用可能なのだが、同じ手法はオラクル製Javaでは使用できないので、かなり大規模な外部モジュールでも作成しない限り、OpenGL描画は行えない、と、考えられるからだ。

つまり、同様にOpenGLを使っていたOS X用のMirror-DTCについても、元々はJavaで記述してあったのだが、前述の問題があったので、作者的には、将来性を鑑みて、Objective-Cで記述し直した訳なので、OS X版を鑑みれば、Nostalgic UFO Battlerについても、Javaは使えなかった訳だ。

と、いう事で、  Nostalgic UFO Battlerの、少なくともゲーム処理クラスは、C++で記述してある訳なのだが、Objective-Cでは、普通にコード内でC++クラスを作成したり、呼び出したりも出来るので、Objective-Cで記述しておけば、C++のコードはそのまま流用出来る。

これに対して、Swiftでコードを記述すると、C++のコードを使いたければ、Objective-Cのオブジェクトを作成し、それを経由してアクセスする必要がある、みたいだ。

みたいだ、と、書いているのは、実際にはSwiftを使ってそんな事はやった事が無いからなのだが、何れにしても、Swiftを使っても、C++のコードを使いたければ、Objective-Cも、使う必要がある。

なので、C++メインのプログラムでSwiftを使うのは馬鹿げた行為になる感じなので、当然、iOS用のNostalgic UFO Battlerでは、言語にはObjective-Cを使う事にしている訳だ。

ちなみに、このブログの過去の記事に書いてあるのだが、Objective-Cという言語は、記述し辛いし、読むのも大変だし、動作も遅い。

このため、Apple的には、その代替としてSwiftを推奨しつつあるのだが、よりグローバルな視点に立つと、前述の様に、C++との親和性が高いObjectie-Cの方が、Swiftよりも実用性は高い。

つまり、OSとのインタフェース処理については、SwiftかObjective-Cを使う必要があるのだが、マルチプラットフォーム対応のアプリを構築しようとする場合には、メイン処理をSwiftやObjective-Cで記述する、なんて事は、まず、有りえない。

なので、少々、記述し辛かったり、読みにくかったり、処理が遅かったりしても、ソフト全体に占めるコードの割合は少なくなる筈なので、それらの問題は、実際には、大した問題にはならない訳だ。

と、いう事なので、C++でメインコードを記述しているNostalgic UFO Battlerについては、iOS版はObjective-Cで記述するのだが、既に、Objective-Cで記述したOS X版は存在している。

なので、iOSとOS Xで同じライブラリが使えるのであれば、OS依存のコードについても、OS X版のコードを持ってこれるので、開発はより楽になる筈なのだが、今日の時点では、iOSとOS Xのライブラリの違いだとかについては、不明の状況だ。

= この記事に関連する公開中ソフト =

ノスタルジックUFOバトラー

UfoBattler.jpg

(2016/10/25追記)

« 次はiOS版の開発だが | トップページ | OpenGLのバージョンは? »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/63665598

この記事へのトラックバック一覧です: 当然、言語はObjective-C:

« 次はiOS版の開発だが | トップページ | OpenGLのバージョンは? »

2017年8月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google