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

収集しているデータから、何が起こっているかを知る方法はありません。基本的に[開始位置+時間]と[終了位置+時間]以外のデータはありません

ジェスチャ全体でマウスの位置を収集する必要があります。

50ms の間隔で、マウスが押されるたびに時限イベントを作成します (そして、マウスを上げた後に破棄します) (推測ですが、これで遊ぶ必要があります)。

タイマーが起動してマウスがダウンするたびに、位置を記録します(速度が重要な場合は時間も記録します)

次に、マウスアップで配列内のデータを分析します。x と y のデータの導関数を実行して、方向に変化があったかどうかを確認することもできます。

幸運を

于 2010-10-28T17:40:59.567 に答える