撫でたり、こすったり、突いたりできる猫のインタラクティブなアニメーションを作成しています。
さまざまなジェスチャを認識しようとして、いくつかの基本的な機能を実装しました。マウス ダウン イベントとマウス アップ イベントを使用して、クリックの持続時間と距離を追跡しています。
これに関する私の問題は、「距離」がクリックの開始点と終了点から測定されるため、クリックが開始した場所の近くで終了する場合、クリックが「こすり」返された回数を知ることができず、前方へ。
クリックのフルパスに基づいて距離を追跡する方法はありますか? 私のコードは以下のとおりです。何か提案はありますか?
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";
}