Wpis z mikrobloga

#programowanie #gamedev #java

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?
  • 29
@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.
@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ć.

Czas poświęcony na klepanie dodatkowego