2010-10-28 74 views
0

我创建一个猫的互动式动画可以抚摩,揉搓,戳等ActionScript 3.0中手势跟踪

我都在试图识别不同的手势来实现一些基本的功能,我使用的鼠标向下并向上拖动事件以跟踪点击的持续时间和距离。

我的问题是,'距离'是从点击的起点和终点开始测量的,所以如果它在开始点附近结束,您将无法判断点击有多少次'摩擦“来回。

无论如何根据点击的完整路径来跟踪距离吗?我的代码如下,有没有人有一些建议?

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"; 
} 

回答

0

从你收集没有告诉正在发生的事情的方式,数据的链接。 基本上除[开始位置+时间]和[结束位置+时间]以外没有任何数据。

您需要在整个手势中收集鼠标的位置。

创建一个定时事件的每个鼠标的停机时间(和鼠标后向上的销毁)在50毫秒的时间间隔(只是猜测,你需要玩这个)

每次计时器火灾鼠标向下记录位置(以及时间,如果速度很重要)

然后在鼠标上分析数组中的数据。你甚至可以对x和y的数据进行派生,看看方向是否有变化。

祝你好运

0

这里,可以帮助您解决问题

http://www.bytearray.org/?p=91

+0

我已经看到所有这些手势类的字母表等它不是我以后。我追求更简单的东西,我只需要知道'拖'的方向是否已经改变。 – Rumpleteaser 2010-10-28 11:48:54

+0

我不想用额外的不必要的代码来衡量动画。这将是非常沉重的,因此需要能够整天坐着跑步而不会崩溃。 – Rumpleteaser 2010-10-28 11:49:46