Open pentamania opened 6 years ago
タッチパネル端末で、指を離すと同時にタップを行うとタッチ開始判定が二重になってしまうバグがありました。
// Sceneクラス update: (app) { app.pointers.forEach(function(p) { if (p.getPointingStart()) { // ここの処理が2フレームに渡って実行され、結果二重判定になる } }); },
調べてみるとTouchList.updateで、離れたtouchに対してspliceで配列操作をしてしまっているため、ループがうまく回らずtouchstartした方のtouchオブジェクトが更新されないのが原因のようです。
https://github.com/phinajs/phina.js/blob/4cc88515d4dfbedefd6a812f2829458819db265c/src/input/touch.js#L153-L174
色々解決法はあると思いますが、とりあえずforEachではなく、ネガティブforループにすることで解決できましたのでご参考までに。
update: function() { if (this.touches.length > 0) { for (var i = this.touches.length - 1; i >= 0; i--) { var touch = this.touches[i]; if (!touch.released) { touch.update(); if (touch.flags === 0) { touch.released = true; } } else { touch.released = false; this.removeTouch(touch); } } } },
(自分でPRを出すかもしれませんが、一応issueとして上げときます。)
タッチパネル端末で、指を離すと同時にタップを行うとタッチ開始判定が二重になってしまうバグがありました。
調べてみるとTouchList.updateで、離れたtouchに対してspliceで配列操作をしてしまっているため、ループがうまく回らずtouchstartした方のtouchオブジェクトが更新されないのが原因のようです。
https://github.com/phinajs/phina.js/blob/4cc88515d4dfbedefd6a812f2829458819db265c/src/input/touch.js#L153-L174
色々解決法はあると思いますが、とりあえずforEachではなく、ネガティブforループにすることで解決できましたのでご参考までに。
(自分でPRを出すかもしれませんが、一応issueとして上げときます。)