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

2 回答 2

0

这是可以帮助您解决问题的链接

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

于 2010-10-28T11:34:31.427 回答
0

从您收集的数据中,无法判断发生了什么。基本上除了 [start position + time] 和 [end position + time] 之外没有其他数据

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

每次鼠标按下时(并在鼠标抬起后销毁)以 50 毫秒的间隔创建一个定时事件(只是猜测,你需要玩这个)

每次计时器触发并且鼠标按下时记录位置(如果速度很重要,则记录时间)

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

祝你好运

于 2010-10-28T17:40:59.567 回答