2010-10-28 72 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