JPanel - mouseDragged - czyli predkosc poruszania sie myszki

0

macie Panowie pomysl na jakis algorytm, aby zaiplementowac licznik dla myszki, ktory pokazuje jej predkosc przy przeciaganiu?

0

Hm, trzymać kolejkę pozycji myszki z ostatniej sekundy, tzn przy mouseDragged najpierw wywalamy stare ruchy, potem dodajemy nowe, a potem liczymy całkowitą drogę kursora. Zamiast liczenia od nowa można trzymać długość drogi kursora w osobnej zmiennej, zmniejszać ją przy wywalaniu starych ruchów i zwiększać przy dodawaniu nowych. Jest to jakoś związane z tym co chcesz osiągnąć?

0

A moglbys to rozpisac, nawet pseudokodem? Nie chce, zeby po przebyciu okreslonego systansu pokzywalo srednia predkosc, tylko cos jak w liczniku samochodowym,- wszystko na biezaco.

0

No ale wtedy miałbyś kosmiczne skoki prędkości, raz myszka skoczy o 10 pikseli, raz o 5 px, raz 20 px i już kiszka wychodzi. Buforowanie ruchów z ostatniej sekundy wygładzi ten licznik, ale i tak przecież będzie bardzo dynamiczny - prawie, że tak samo dynamiczny, ale dużo łatwiej będzie odczytać prędkość. Natomiast jeśli bardzo chcesz mieć natychmiastowo prędkość to zamiast kolejki zapisuj ostatnie położenie kursora wraz z czasem pomiaru (np System.getCurrentTimeMIllis()), a z tego już możesz prosto wyliczyć prędkość.

1

Co sekundę:

init:

long dystansX=0, dystansY;
long czas=System.getCurrentTimeMIllis();
float predkosc=0;
int posX, posY;

event mousePressed:

posX=e.getX();
posY=e.getY();

event drag:

dystansX+=Math.abs(e.getX()-posX);
dystansY+=Math.abs(e.getY()-posY);
posX=e.getX();
posY=e.getY();
if(System.getCurrentTimeMIllis()-czas>1000){
  czas=System.getCurrentTimeMIllis();
  predkosc=Math.sqrt(dystansX*dystansX + dystansY*dystansY);
  dystansX=0;
  dystansY=0;
}

Przy czym e to obiekt eventu.

Na bieŻąco (Boże, widzisz takie błędy i nie grzmisz):

init:

long dystansX=0, dystansY;
float predkosc=0;
int posX, posY;

event mousePressed:

posX=e.getX();
posY=e.getY();

event drag:

dystansX=Math.abs(e.getX()-posX);
dystansY=Math.abs(e.getY()-posY);
posX=e.getX();
posY=e.getY();
predkosc=Math.sqrt(dystansX*dystansX + dystansY*dystansY);
0

Wielkie dzieki, dokladnie o to mi chodzilo!

1 użytkowników online, w tym zalogowanych: 0, gości: 1