Je crée une animation interactive d'un chat, vous pouvez caresser, frotter, pousser, etc.geste Actionscript 3.0 suivi
J'ai mis en œuvre certaines fonctions de base pour tenter de reconnaître les différents gestes, je me sers de la souris vers le bas et souris des événements pour suivre la durée et la distance du clic. Mon problème avec ceci est que la 'distance' est mesurée à partir du point de départ et du point final du clic, donc si elle se termine près de là où elle a commencé, vous ne serez pas capable de dire combien de fois le clic a ' frotté 'd'avant en arrière.
Est-il possible de suivre la distance en fonction du chemin complet du clic? Mon code est ci-dessous, est-ce que quelqu'un a des suggestions?
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, pressed);
this.stage.addEventListener(MouseEvent.MOUSE_UP, released);
var firsttime:Number;
var lasttime:Number;
var firstx:Number;
var lastx:Number;
var firsty:Number;
var lasty:Number;
var duration:Number;
var distance:Number;
function pressed(e:MouseEvent):void {
firsttime = new Date().getTime();
firstx = mouseX;
firsty = mouseY;
trace("mouse down");
}
function released(e:MouseEvent):void {
lasttime = new Date().getTime();
lastx = mouseX;
lasty = mouseY;
duration = lasttime - firsttime;
distance = pythagoras((firstx-lastx), (firsty-lasty));
trace("mouse up");
trace(duration);
trace(distance);
trace(gesture(duration, distance));
}
function pythagoras(xlen:Number, ylen:Number):Number {
return Math.sqrt((xlen*xlen) + (ylen*ylen));
}
function gesture(duration:Number, distance:Number):String {
if (distance < 1){
if (duration < 200){
return "Sharp Poke";
}
return "Slow Poke";
}
if (duration < 500) {
return "Stroke";
}
return "Rub";
}
J'ai vu toutes ces classes de gestes pour l'alphabet, etc. Ce n'est pas ce que je suis après. Je suis après quelque chose de beaucoup plus simple, j'ai juste besoin de savoir si la direction de la «traînée» a changé. – Rumpleteaser
Je ne veux pas alourdir l'animation avec du code supplémentaire inutile. Il sera très lourd et doit pouvoir rester en place pendant une journée entière sans s'écraser. – Rumpleteaser