スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 今週中には完成? | トップページ | 遊べる様にはなった »

iOSのマルチタッチAPI

今は、iOS版Nostalgic UFO Battlerの開発中で、描画系は大体動いたので、今日は操作系の実装をしていたのだが、操作は画面最下部の3個のボタンによるモノと、その他領域へのタッチ時に行うポーズ操作のみだ。しかし、マルチタッチ操作が必須なので、少し実装は面倒だ。

Nostalgic UFO Battlerでは、ピンチによる画面の拡大縮小だとか、二本指タップによる右クリックの代用だとか、スクロールなんて機能は不用なので実装していない。

にも関わらず、マルチタッチ操作が必須なのは、コントローラの左右ボタンを押しながら、Fireボタンも押せないと、マイシップを移動しつつの攻撃が出来ないので、ゲームとしては不自然になるからだ。

もっとも、前述の様に、マルチタッチ処理が必要ではあるものの、ジェスチャーに対応する必要はないので、Android版については、実装は面倒でもなかった。

しかし、iOS版については、iOSのAPIがAndroidのAPIほど使いやすくは無いので、AndroidのAPI相当にする為に、自前で追加処理を記述する必要があった。

具体的には、Androidの場合、マルチタッチの各タッチにはPointerIDというものが付加されるので、指の移動だとか、指が離れたイベントは、そのPointerIDによって最初のタッチイベントと関連付ける事が出来る。

これに対して、iOSの場合には、基本的には、タッチと指の移動と指を離すイベント間には明確な関連付けが行われていない訳だ。

だからどうした? と、思っている人もいる筈なのだが、これは、PointerIDの必要性は、タッチ操作をどういう格好で使うかによるからだ。

つまり、タッチ操作を指が触れた瞬間に行うだけのアプリだとか、指が離れた瞬間に行うだけのアプリだとか、指の移動で処理を行うだけのアプリの場合、一連のイベントが関連付けられている必要は無いので、PointerIDなど意味はない、と、いう事になる。

しかし、実際の所、各イベントが関連付けられていないと、タッチされた指が離された事を認識する、という、至極、真っ当な単純処理すら、記述できない訳だ。

にも関わらず、ネットを検索してみると、iOSのマルチタッチ処理について記述したブログなんかは色々とあったものの、そういう問題に対する対処方法が記述されたモノは無かった訳だ。

と、いう事で、まあ、今時のブログというのは、広告を張ってお小遣い稼ぎする為のモノ、という感じもしないではないので、実際にはプログラミング経験が皆無の人が、プログラミングネタでページを作成している場合も多いかもしれない。

そして、そういう人達に限って、SEO対策は万全なので、Googleで検索すると、そういうページがヒットしやすい訳なのだが、海外の事情は異なる。

つまり、技術ネタを検索するなら、日本語ではなく、英語で検索した方が、有益な情報がヒットしやすい訳なのだが、前述のマルチタッチ対応についても、英語のサイトに方法が記されていた。

もっとも、APIの仕様をみていると、最悪、そういう格好で対処できるのは、作者的にも判っていた。しかし、iOS初心者の作者としては、もっと良い方法があるのか無いのかが判らなかった訳なのだが、iOSでのプログラミング熟練者にしてみても、iOSの場合、良い方法は無い、という事の様だった訳だ。

なので、前述の様に、作者的には、自前でPointerID相当のIDを得られる処理ルーチンを追加した訳なのだが、偶に、上手く検出できない状況があるみたいだ。

まあ、Nostalgic UFO Battlerの場合、誤操作が偶に発生しても、致命的でもないので、このまま行こうか、と、思っているのだが。

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

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

UfoBattler.jpg

(2016/10/25追記)

« 今週中には完成? | トップページ | 遊べる様にはなった »

トラックバック

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

この記事へのトラックバック一覧です: iOSのマルチタッチAPI:

« 今週中には完成? | トップページ | 遊べる様にはなった »

2017年10月
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