Kamil9132 Temat założony przez niniejszego użytkownika |
[Allegro] Pętla while a rozdzielczość programu » 2013-08-22 16:43:33 Witam Od dłuższego czasu tworzę prostą grę 2D w stylu mario. Dotychczas pracowałem na rozdzielczości 800 px na 600 px, wczoraj jednak uznałem że lepiej zmienić rozdzielczość na 1280 px na 1024 px. Po zmienieniu rozdzielczości, pętla odpowiedzialna za integracje z podłożem przestaje poprawnie działać po 20 sekundach od uruchomienia programu. Nigdy z takim czymś się wcześniej nie spotkałem, więc nie mam pojęcia co z tym zrobić, próbowałem zmienić rozdzielczość na podobną, ale wtedy program zamykał się i wyskakiwał błąd. Co w takiej sytuacji mogę zrobić? Czy muszę zostać na rozdzielczości 800px na 600px, czy jest jakieś inne rozwiązanie? |
|
pekfos |
» 2013-08-22 16:56:56 Masz błąd w kodzie. |
|
Kamil9132 Temat założony przez niniejszego użytkownika |
» 2013-08-22 17:12:05 Tylko skoro mam błąd w kodzie to dlaczego jest widoczny tylko w danej rozdzielczości? Kod z rozdzielczością 1280 px na 1024 px różni się tylko tymi trzema liniami od kodu z rozdzielczością 800 px na 600 px. set_gfx_mode( GFX_AUTODETECT, 1280, 1024, 0, 0 ); pamiec = create_bitmap( 1280, 1024 ); blit( pamiec, screen, 0, 0, 0, 0, 1280, 1024 ); |
|
kampar |
» 2013-08-22 18:22:37 a jak np. sprawdzasz kolizje? |
|
Kamil9132 Temat założony przez niniejszego użytkownika |
» 2013-08-22 18:27:25 dat = 0; dar = 0; skoks = 0; nprawo = 0; nlewo = 0; ngora = 0;
while( obiektr1[ dat ] != 0 ) { dar = 0; if( obiektr1[ dat ] == 1 ) { while( postacx != obiektx[ dat ][ dar ] && postacx + postacxs != obiektx[ dat ][ dar ] && dar < obiektxs[ dat ] - 1 ) { if( skoks == 0 ) { skoks = 2; } dar++; } if( postacy + postacys != obiekty[ dat ][ 0 ] ) { if( skoks == 0 ) { skoks = 2; } } if(( postacx == obiektx[ dat ][ dar ] || postacx + postacxs == obiektx[ dat ][ dar ] ) && postacy + postacys == obiekty[ dat ][ 0 ] ) { skoks = 1; } if( postacy < obiekty[ dat ][ obiektys[ dat ] - 1 ] && obiekty[ dat ][ 0 ] < postacy + postacys && postacx == obiektx[ dat ][ obiektxs[ dat ] - 1 ] + 1 ) { nlewo = 1; } if( postacy < obiekty[ dat ][ obiektys[ dat ] - 1 ] && obiekty[ dat ][ 0 ] < postacy + postacys && postacx + postacxs == obiektx[ dat ][ 0 ] ) { nprawo = 1; } if(( postacx == obiektx[ dat ][ dar ] || postacx + postacxs == obiektx[ dat ][ dar ] ) && postacy == obiekty[ dat ][ obiektys[ dat ] - 1 ] ) { ngora = 1; if( postacy + postacys > obiekty[ dat ][ 0 ] && postacx + postacxs == obiektx[ dat ][ 0 ] ) { ngora = 0; } } }
Po 20 sekundzie działania programu w rozdzielczości 1280 px na 1024 px, zmienna skoks nie przyjmuje wartość równej jeden, tylko jest cały czas równa dwa, przez co współrzędna y postaci rośnie, czyli postać spada. |
|
kampar |
» 2013-08-22 18:59:44 no ale gdzieś musisz ustalać pozycje obiektów, musisz je dostosować do nowej rozdzielczości. Jeśli przy rozdzielczości 800x600 jakiś obiekt miał pozycje Y np. 500 to był na dole ekranu, natomiast przy rozdzielczości 1280x1024 będzie na środku. |
|
Kamil9132 Temat założony przez niniejszego użytkownika |
» 2013-08-22 19:02:33 Ustawienie obiektów zostawiłem takie jak było, jednak podczas ich wyświetlania ich współrzędne zwiększam dwa razy, jednak to nie jest problemem, w ciągu pierwszych 20 sekund mogę chodzić gdzie chcę w programie, a po tym czasie niezależnie gdzie pójdę postać nie przestaje spadać, gdy zetknie się z podłożem.
Przed chwilą odkryłem, że po 10 sekundzie fps maleją z 670 do 470, nie wiem czy ma to związek z moim problemem, ale uznałem że warto o tym wspomnieć.
Odkryłem jeszcze jedną rzecz, po 20 sekundzie, czyli wtedy kiedy postać zaczyna spadać liczba fps maleje z 470 do 230, czyli do tylu ile razy na sekundę wykonuje się pętla zmniejszająca wysokość postaci.
Problem rozwiązany. Sprawdzając liczbę fps znalazłem błąd. Funkcja, która przerywała skok znajdowała się za funkcją która zmniejszała wysokość, przeniosłem ją na sam początek i wszystko działa prawidłowo, jednak dziwi mnie ten spadek fps, obecnie na mapie mam około 1/30 końcowej mapy, jeśli liczba fps będzie spadać wraz z dodawaniem nowych rzeczy to pod koniec liczba fps będzie strasznie niska, jednak nie będę martwił się na zapas, może problem sam się rozwiąże z czasem. |
|
« 1 » |