Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
0
Members

[Bug] Exception sur iOS (TouchEvents)

A topic by DaZD created Mar 10, 2016 Views: 326 Replies: 3
Viewing posts 1 to 3

Bonjour,

tout d'abord je tiens à vous féliciter pour ce fabuleux projet, je fais quelques experimentation avec depuis une semaine et je suis conquis.

Aujourd'hui j'ai fais quelques tests de navigation à la souris mais quand j'ai voulu coder la partie mobile je suis tombé sur un bug. Au départ je pensais que ca venait de mon code mais en debugguant je me suis rendu compte que le bug était lié à la facon dont ios gère les identifiants de Touch.

Le problème se situe dans les fonctions onTouchStart, onTouchMove et onTouchEnd de SupEngine.js (l 38139).

L'instruction qui plante est :

_this.touches[touch.identifier].position

En effet la valeur de touch.identifier dans le cadre de mon test était 144562006, hors le tableau _this.touch à seulement 10 éléments (10 touches prisent en compte).

Il semblerait que iOS attribue les identifiers de Touch différement des autres systèmes.

J'ai testé avec Firefox, Chrome et Safari sur 3 appareils iOS différents (ipad et iphones) avec le même résultat.

Avec Android par contre pas de soucis, il n'y a pas d'exception dans SupEngine.js et mon code pour tourner autour d'objets 3D au doigt fonctionne comme prévu.

En espérant que celà pourra vous aider à corriger le problème.


Bonne journée!


D

EDIT :

En fait je viens de me rendre compte que sur mon terminal Android c'est le code de la souris qui est interprété, pas besoin du touchEvent dans ce cas du coup apparement.

normalement, rien qu'avec la souris, pas besoin de touch.

La souris est remplacé directement par le touch sur des systemes compatible.

Bonjour merci pour votre réponse.

Je confirme qu'avec la souris il n'y a pas besoin de touch sur Android mais celà ne fonctionne pas sur iOS. J'ai vérifié à l'instant sur mes 3 terminaux avec un code minimal, ca marche sur Android mais pas sur les 3 terminaux iOS.

Peut être que j'oublie quelque chose, mon code est le suivant (2 versions) :

version 1 ( avec Sup.Input.getMousePosition() ):

let lastMousePos:Sup.Math.Vector2;
class CameraBehavior extends Sup.Behavior {
update() {
if (!idle.isAway) {
if (Sup.Input.isMouseButtonDown(0)){
let dx; let dy;
let { x, y } = Sup.Input.getMousePosition();
if (lastMousePos){
dx = x - lastMousePos.x ;
dy = y - lastMousePos.y ;
this.actor.rotateLocalEulerAngles(new Sup.Math.Vector3(dy,dx,0));
}
lastMousePos = new Sup.Math.Vector2(x, y);
}
}
}


}
Sup.registerBehavior(CameraBehavior);

----------------

version 2 (avec Sup.Input.getMouseDelta) :

class CameraBehavior extends Sup.Behavior {

update() {
if (!idle.isAway) {
if (Sup.Input.isMouseButtonDown(0)){
let { x, y } = Sup.Input.getMouseDelta();
this.actor.rotateLocalEulerAngles(new Sup.Math.Vector3(y,x,0));
}}}}
Sup.registerBehavior(CameraBehavior);


Et il y a bien des exceptions dans SupEngine.js sur iOS aux lignes indiquées dans mon post original.


Merci


Bon Weekend