Obracanie dziala do celownika myszy

0

Cześć, pisze grę platformowąi chce zrobić tak by można celować myszką. Innymi słowy, pocisk ma lecieć wskazane przez mysz. na rysunku to wygląda tak:

user image

Rysunek duzo uproszczony, ale grunt to skumac o co mi chodzi :P Chce by dzialo obracalo się w kierunku wskazanym przez mysz czyli celownika. Wiec musze obliczyc kat no nie, obliczylem tak ze

                        int x_c=(int)celownik.getX(); //wspolrzedne celownika (myszki)
			int y_c=(int)celownik.getY();
			int x_b=(int)dzialo.getX(); //wspolrzedne dziala
			int y_b=(int)dzialo.getY();
			
			
			int x_n=x_c-x_b; //przyprostokatna x
			int y_n=y_c-y_b; //przyprostokatna y
			
			double dot = Math.sqrt((x_n*x_n)+(y_n*y_n)); /przeciwprostokatna d
			
			double a_c = x_n/dot; //obliczam cosinusa kata alfa
			double a_s = y_n/dot;

			double kat = Math.acos(a_c)*180/3.14; //tu powinienem uzyskac kat alfa w stopniach
			
			if(a_s<0) kat=-kat;

No i gdy zrobiłem te obliczenia dzialo za grzyba nie chce mi wskazywac na celownik i teraz nie wiem gdzie mam bład. Zwykle jak zrobie maly ruch to ono sie obraca wokół własnej osi jak oszalałe.. a nie powinno..

0

Obliczenia wygladaja w porzadku. Sprawdz, jakie pozycje maja celownik i dzialo. Przypuszczalnie tutaj lezy problem. Poza tym, uzywajac API kod bedzie czytelniejszy, np.:

    double dx = -(centerPointPosition.getX()-cursorPosition.getX());
    double dy = centerPointPosition.getY()-cursorPosition.getY();
    double hypotenuse = Point2D.distance(cursorPosition.getX(), cursorPosition.getY(), centerPointPosition.getX(), centerPointPosition.getY());
    double angle = Math.acos(dx/hypotenuse);
    int degrees = (int)Math.toDegrees(angle)
0

Od strony matematycznej jest dobrze. Sprawdź czy celownik i działo przyjmują prawidłowe współrzędne.

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