Początkujący programista tutaj. Napisałem taką linijkę kodu ballDirX = (ballPosX - playerX - 40)/60; pierwsza zmienna jest typu double, druga i trzecia to integer, nie wiem dlaczego przy wykonywaniu rzutuje wynik do inta, ballDirX = (((double)ballPosX - (double)playerX - 40)/60; nie pomaga, dopiero zmiana 2. i 3. zmiennej na double, ale to trochę rozwiązanie na okrętkę.
@glonstar: działa @rzezol: chciałem zrobić ponga gdzie piłka będzie się odbijała pod różnym kątem w zależności w które miejsce pada trafi, widzę że będę musiał jeszcze to trochę przeorać( ͡°͜ʖ͡°)
@Fraktalz: Najogólniej - w takich sytuacjach jak układy współrzędnych, położenia elementów, wektory (a to co tutaj robisz podpada pod to wszystko ( ͡°͜ʖ͡°)) najlepiej trzymać się liczb zmiennoprzecinkowych. I nie mieszać ich z intami jeśli nie ma takiej potrzeby. Więc moim zdaniem zamiast tego rozwiązania z mnożeniem double i intów prawidłowym jest przejście na double.
@rzezol: Brzmi dobrze, ale rodzi to taką komplikację, że korzystam potem wielokrotnie z obiektu Rectangle(int,int,int,int) do wykrywania kolizji. W tych metodach powinienem wtedy rzutować? Będzie to zgodne ze "sztuką"?
@Fraktalz: Tak, tak wydaje się to być logiczne - obliczać w zmiennoprzecinkowych, rysować w zrzutowanych do całkowitych (skoro biblioteka nie daje innej możliwości). Oczywiście musisz pamiętać, że tracisz wtedy dokładność tych liczb.
@glonstar: OP nie rozumie podstaw arytmetyki w języku a ty mu jako rozwiązanie dajesz mikrooptymalizację komplikującą kod, która przyspieszy jego kod o ile? 0.0001%?
@glonstar: Przedwczesna mikrooptymalizaja to nie jest dobra praktyka. Jak chciałeś go nauczyć dobrych praktyk to pierwsza rzecz jaka powinna przyjść Ci do głowy to unikanie magic numbers...
@63274682374: Niby dlaczego? Po co pisać kijowy kod, a potem go poprawiać, narażając się przy tym na powstanie nowych błędów? Lepiej od razu pisać dobrze. Nie mówiąc o tym, że formuła wykopu nie bardzo pozwala na śledzenie postępów uczącego się i przypominanie mu, że ma coś zoptymalizować. Jedno pytanie, jedna odpowiedź, i powinna być od razu dobra.
@glonstar: Problem jest taki, że to nie jest kijowy kod. Jest to standardowe podejście w miażdżącej większości zastosowań. Po prostu szkoda czasu programisty na mikrooptymalizację rzędu kilku ns. Komplikujesz kod a nie ma z tego żadnego realnego zysku. Dodatkowe błędy, mogą się pojawić właśnie w twojej mikrooptymalizacji, gdy trafi na nią ktoś, kto ma mniejszą wiedzę niż Ty a będzie musiał coś w tym kodzie zmienić.
Początkujący programista tutaj. Napisałem taką linijkę kodu
ballDirX = (ballPosX - playerX - 40)/60;
pierwsza zmienna jest typu double, druga i trzecia to integer, nie wiem dlaczego przy wykonywaniu rzutuje wynik do inta,
ballDirX = (((double)ballPosX - (double)playerX - 40)/60;
nie pomaga, dopiero zmiana 2. i 3. zmiennej na double, ale to trochę rozwiązanie na okrętkę.
Pomożecie?
Komentarz usunięty przez autora
@rzezol: chciałem zrobić ponga gdzie piłka będzie się odbijała pod różnym kątem w zależności w które miejsce pada trafi, widzę że będę musiał jeszcze to trochę przeorać( ͡° ͜ʖ ͡°)
Więc moim zdaniem zamiast tego rozwiązania z mnożeniem double i intów prawidłowym jest przejście na double.
Komentarz usunięty przez autora
ballDirX = (ballPosX - playerX - 40)/60.0;Problem jest taki, że to nie jest kijowy kod. Jest to standardowe podejście w miażdżącej większości zastosowań. Po prostu szkoda czasu programisty na mikrooptymalizację rzędu kilku ns. Komplikujesz kod a nie ma z tego żadnego realnego zysku. Dodatkowe błędy, mogą się pojawić właśnie w twojej mikrooptymalizacji, gdy trafi na nią ktoś, kto ma mniejszą wiedzę niż Ty a będzie musiał coś w tym kodzie zmienić.
Czas poświęcony na klepanie dodatkowego