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

[Allegro] Szybkość poruszania mapą

Ostatnio zmodyfikowano 2011-12-31 19:08
Autor Wiadomość
Winner
Temat założony przez niniejszego użytkownika
» 2011-12-30 20:47:46
A jaka według Ciebie jest normalna? ;D
A jakbym chciał przejść na Allegro5 to muszę od nowa pisać moją grę czy tylko zmienić kilka funkcji?
P-46725
SeaMonster131
» 2011-12-30 20:53:50
SFML, Allegro5, @ison dopowie: OpenLayer. :)

5 od 4 różni sie, no wszystkim ;)

Już nie pamietam o co Ci chodziło z tą szybkością, ale też możesz zrobić coś w stylu takiego opóźnienia:

C/C++
int czas = 0;

if( klawisz_w_prawo && czas == 0 )
     czas = 10; //10 to przyklad

if( czas > 0 )
{
    mapa_x++;
    czas--;
}
P-46726
ison
» 2011-12-30 21:10:01
@Sea dziękuję, że mnie wyprzedziłeś :D

@Winner
ogólnie fakt, że 'nie możesz' wyświetlić bitmapy na floatowej pozycji nie zmienia kompletnie nic, tak czy inaczej możesz rzutować na inta tuż przy wyświetlaniu kafla a sprite'a w połowie piksela tak czy inaczej nie wyświetlisz,
allegro 4 to na początek dobry wybór imho, zapewniam Cię, że da się w nim zrobić na prawdę przyjazną i grywalną grę i w niczym na tym etapie nauki nie będzie Cię ograniczał - jedyne co to wydajność. Allegro 4 nie jest wspomagane przez kartę graficzną, dokładnie to samo tyczy się SDL, wszystko co wyświetlasz zamiast przejść przez kartę graficzną przechodzi przez procka co mocno spowalnia aplikację. SDL jako tako do obsługi klawiatury, myszki itd. jest ok, ale na pewno nie do wyświetlania grafiki :) Jeśli już na prawdę będziesz chciał zmienić bibliotekę to wybierz taką, która ma wspomaganie GPU: SFML, OpenLayer

A jakbym chciał przejść na Allegro5 to muszę od nowa pisać moją grę czy tylko zmienić kilka funkcji?
sporo zmian byś musiał zrobić, imho lepiej dla Ciebie zostać przy allegro 4

Okey.
Mam mapę kafelkową. Wyświetlam ją za pomocą kodu:
C/C++
void wys_mape()
{
    short int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 50; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 20; licznik_y++ )
        {
           
           
            blit( teren, bufor,
            (( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 50 ),
            (( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 50 ),
            licznik_x * 50, licznik_y * 50, 50, 50 );
           
           
        }
    }
};
Przesuwam za pomocą kodu:
C/C++
if( key[ KEY_RIGHT ] && RodzajTerenuDolL == 0 && RodzajTerenuDolP == 0 || key[ KEY_RIGHT ] && RodzajTerenuDolP > 0 && RodzajTerenuGorP > 0 && RodzajTerenuDolL == 0 )
{
   
    mapa_x++
   
   
   
}
I mapa prszesuwa się dobrze. Tylko, że za szybko.

mapa_x i mapa_y zadeklaruj jako float
wyświetlanie zmień na
C/C++
blit( teren, bufor,
(( map[ licznik_y +( int ) mapa_y ][ licznik_x +( int ) mapa_x ] % 4 ) * 50 ),
(( map[ licznik_y +( int ) mapa_y ][ licznik_x +( int ) mapa_x ] / 4 ) * 50 ),
licznik_x * 50, licznik_y * 50, 50, 50 );
przesuwanie zmień na
C/C++
mapa_x += 0.1f;
już pomijam to, że powinieneś przesuwać o deltę a nie o stałą, ale to już inna kwestia
P-46728
Winner
Temat założony przez niniejszego użytkownika
» 2011-12-30 21:23:15
Zmieniłem tak jak mówiłeś. Ale teraz są błędy w tej linijce:
y = floor( mario_y / 50 );
I pytanie: Czy muszę przed każdym "mario_x" dodawać (int)??
P-46731
Winner
Temat założony przez niniejszego użytkownika
» 2011-12-30 21:34:39
Okey, zrobiłem tak, że nie mam błędów. Przed każdym mapa_x dodałem (int) i program się uruchamia mapę przesuwa mi wolniej ale nie zadowala mnie płynność tego przesuwania...
P-46733
RazzorFlame
» 2011-12-30 21:37:34
Tak z czystej ciekawości: masz wgle dodane timery? Przeciez moze nimi zwalniac i przyspieszac!

EDIT:
Nie rób wyświetlania mapy funkcją easykodera! Rob cos takiego:

C/C++
if( map[ licznik_y ][ licznik_x ] == 0 ) blit(...);


Tak jest bardziej czytelnie...

EEeee jeszcze 1. Ty w 3 i 4 argumencie dodajesz pozycje mapy??? To do jasnej ch***** jest przeciez jaki kawalek ma wyswietlic...

EDIT x2:

Sory chyba juz to rozwiazałes...
P-46734
ison
» 2011-12-30 21:45:19
I pytanie: Czy muszę przed każdym "mario_x" dodawać (int)??
niet, ważne aby przy odwoływaniu się do komórki tablicy zmienna była typu całkowitego

@RazzorFlame
nawet nie zauważyłem tego ;D rzeczywiście w pozycji wyświetlanej bitmapy też by się przydało coś dodawać, nie dziwne, że mapa 'nie przesuwa się płynnie' :)
P-46738
Winner
Temat założony przez niniejszego użytkownika
» 2011-12-30 21:53:18
@ison  a możesz dokładniej powiedzieć co mam tam dodawać? Jak coś dodam w miejsca to mi tworzy te  niechciane kafelki (co ten film dałem)

@RazzorFlame Mam nie rysować funkcją easykodera bo jest mało czytelnie czy to coś ważniejszego?
P-46742
1 2 3 4 5 6 « 7 » 8 9 10 11 12
Poprzednia strona Strona 7 z 12 Następna strona