JPanel - mouseDragged - czyli predkosc poruszania sie myszki

JPanel - mouseDragged - czyli predkosc poruszania sie myszki
CC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0

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

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
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ąć?

CC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
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.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
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ść.

R9
  • Rejestracja: dni
  • Ostatnio: dni
1

Co sekundę:

init:

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

event mousePressed:

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

event drag:

Kopiuj
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:

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

event mousePressed:

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

event drag:

Kopiuj
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);
CC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0

Wielkie dzieki, dokladnie o to mi chodzilo!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.