JPanel - mouseDragged - czyli predkosc poruszania sie myszki

JPanel - mouseDragged - czyli predkosc poruszania sie myszki
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
0

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

edytowany 1x, ostatnio: cCc
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 2 godziny
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ąć?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • 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:około 20 lat
  • Ostatnio:około 2 godziny
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ść.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
R9
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 11 lat
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:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • 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.