Nobody Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 Siemka :) Robię Arkanoida w C++ działając z biblioteką SDL. Prawdopodobnie robię to niewydajnie, ale na razie to jedyny znany mi sposób. Zrobiłem sobie funkcję lengthdix i lengthdiry, a piłka ma ustaloną prędkość i kierunek. Niestety piłka leci zbyt wolno, a gdy dam jej za dużą prędkość "skacze". Tu pojawia się moje pytanie. Czy da się jakoś "upłynnić" tą piłkę? Jeżeli będzie potrzeba trochę kodu pisać, wkleję go tu. Pozdrawiam i z góry dziękuję za pomoc :)
Kofel Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 A może zobacz czy poprostu przez jeden cykl piłka nie przeskakuje o więcej niż 1-2 piksele? To przez to pewnie.
Nobody Opublikowano 7 Czerwca 2008 Autor Opublikowano 7 Czerwca 2008 No tak, inaczej piłka leciałaby strasznie powoli. Dlatego chcę jakoś tak zrobić, żeby to wszystko szło trochę szybciej :P
adam014 Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 Musisz napisać malutką fizykę piłki.Moge ci to zrobić ale niestety nie w C++ :((
Kofel Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 @adam A co fizyka ma do tematu? Nie spamuj, ok? @nobody To już raczej zależy ile będziesz miał cykli na sekundę, nie wiem jak to rozwiązać, ale raczej na cykl piłka nie może więcej się przemieszczać niż 1-2 piksele bo będzie skakać chyba że jakiś sposób na rysowanie piłki żeby była "płynna".
Konrad-GM Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 SDL obsługuje współrzędne X,Y jako "int" musisz stworzyć klasę piłce która będzie przechowywała dane o piłce takie jak pozycja jako float'y, funkcja do ruchu i rysowania, przy rysowaniu zamieniaj float'y na int'y, powinno przy ok 1.3/0.2px szybkości piłki działać poprawnie :)
kryniak Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 Może spróbuj zmierzyć ile to ma FPSów, może to być źródłem problemu.
Nobody Opublikowano 7 Czerwca 2008 Autor Opublikowano 7 Czerwca 2008 musisz stworzyć klasę piłce która będzie przechowywała dane o piłce takie jak pozycja jako float'y, funkcja do ruchu i rysowania, przy rysowaniu zamieniaj float'y na int'y Wszystko to zrobiłem :P SDL obsługuje współrzędne X,Y jako "int" Tj. już są tu wbudowane zmienne X i Y? Ja zrobiłem osobne jako float.
Nobody Opublikowano 7 Czerwca 2008 Autor Opublikowano 7 Czerwca 2008 @UP: Przeczytałbyś może o co mi chodzi... Nie chcę, żeby piłka mi skakała a nie, żeby chodziła jednym tempem...
Will Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 A jak myslisz co jest przyczyną skakania.. --.-- P.S Temat: Płynne działanie gry -> Ty: "Nie chcę, żeby piłka mi skakała a nie, żeby chodziła jednym tempem..." zastanawiające...
Nobody Opublikowano 7 Czerwca 2008 Autor Opublikowano 7 Czerwca 2008 Skakanie nie w stylu, że raz wolniej raz szybciej, tylko piłka zamiast lecieć to się tak jakby 'teleportuje' z miejsca na miejsce... Wiem co jest tego przyczyną (zbyt duże wartości dodawane do pozycji), ale nie wiem jak to poprawić, żeby piłka leciała tą samą prędkością, z tym że płynnie.
Will Opublikowano 7 Czerwca 2008 Opublikowano 7 Czerwca 2008 Podwójnie buforowanie włączone? interpolować? dodawać po pikselu co określony czas bez względu na fps? Operowanie na liczbach zmiennoprzecinkowych, oparte na podanym wcześniej wzorze , następnie konwersja do integer?
kubasz Opublikowano 28 Grudnia 2008 Opublikowano 28 Grudnia 2008 Ja odrazu daje kod, pozmieniaj tylko nazwy obiektów :P int velx,vely; // prędkość pilki (velx = ile pikseli na jedna klatka w osi X, vel y tak samo tylko oś Y // Poniżej: to co ma sie wykonywać co klatkę for(int ix = 0;ix<velx;ix++) // Pętla for { PILKA.X += 1 } for(int iy = 0;iy<vely;iy++) // Pętla for { PILKA.Y += 1 } // Tutaj rysuj pilke :P
Pental Stary Opublikowano 28 Grudnia 2008 Opublikowano 28 Grudnia 2008 Gratulacje, ten kod ma sens... Wychodzi NA TO SAMO! Przeanalizuj go. Czy widzisz różnice między x += 3, a ++x; ++x; ++x?
Firemark Opublikowano 28 Grudnia 2008 Opublikowano 28 Grudnia 2008 Podstawowy problem - skopany timer. Sprawdzałeś ile masz fps i ile pozera cpu?
Konrad-GM Opublikowano 28 Grudnia 2008 Opublikowano 28 Grudnia 2008 100% CPU może pobierać zwykłe okno, a i tak FPS będzie wysoki :) Nie ma sensu sprawdzać zużycie CPU, lepszy sposób to FPSy ;p
Dawidds Opublikowano 31 Grudnia 2008 Opublikowano 31 Grudnia 2008 A czy wiecie, że dyskutujecie o temacie sprzed 6 miesięcy ;( ?
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się