SpriteKitでのhiddenとTouchイベント

タイトルの件ですが、
iOS8とiOS9で少し挙動が異なっていて意図しない動きとなってしまう事がありました。

SKNodeをレイヤー代わりに使用していたのですが、
iOS9では上記レイヤーをhidden:trueにする事で
上に乗っている全てのNodeも含め、タッチイベントの対象外となっていたのですが、
iOS8では普通にイベントを拾ってしまい意図している動作と異なってしまいました。

簡単な例

Scene
→レイヤーA(SKNode):zPosition->1
 →画像1(SKSpriteNode):zPosition->2
→レイヤーB(SKNode):zPosition->3
 →画像2(SKSpriteNode):zPosition->4

上記構造でかつ、画像はそれぞれ描画位置が同じとした場合に

iOS9の場合
レイヤーBをhidden
→ 画像1が描画され、画像をタッチすると画像1を取得

iOS8の場合
レイヤーBをhidden
→ 画像1が描画され、画像をタッチすると画像2を取得してしまう


隠しただけなのでイベントを取得してしまうというのも納得は出来ますが、
iOS9の挙動からすると隠す=ないものとして扱う方向になったんでしょうかね?

ちなみに自分が行った対応ですが、
レイヤーBの上のNodeは全て描画のみに使用するものを乗せていたので
レイヤーBをSKNodeからSKShapeNodeに変更する事で対応出来ました。

当たり前ですが、対応OSに含める以上はしっかりとそのバージョンで動作確認をしないと駄目ですね!
今後は気をつけなくては。
スポンサーリンク

この記事へのコメント


この記事へのトラックバック