Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Pętla while a rozdzielczość programu

Ostatnio zmodyfikowano 2013-08-22 19:02
Autor Wiadomość
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?
P-90762
pekfos
» 2013-08-22 16:56:56
Masz błąd w kodzie.
P-90765
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 );
P-90767
kampar
» 2013-08-22 18:22:37
a jak np. sprawdzasz kolizje?
P-90776
Kamil9132
Temat założony przez niniejszego użytkownika
» 2013-08-22 18:27:25
C/C++
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.
P-90778
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.
P-90779
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.
P-90780
« 1 »
  Strona 1 z 1