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

Allegro 5 problem z fps

Ostatnio zmodyfikowano 2013-08-21 15:33
Autor Wiadomość
Nekronomik
Temat założony przez niniejszego użytkownika
Allegro 5 problem z fps
» 2013-02-25 20:46:47
Witam,mam taki problem gdy wyświetlam mapę kafelkową 10x10 to fps wynosi około 2000.Lecz gdy mapę zwiększam na 20x20 fps spada do 600 a gdy tworze mapę na cały ekran to mam fps kolo 60.Czy jest jakiś sposób na zwiększenie fps ? Bo jak dojdą do mapy jeszcze jakieś obiekty typu drzewa,domki i moby to w to się grać nie będzie dało.
P-77000
Wasilek
» 2013-02-25 21:23:56
Nie znam bezpośredniej przyczyny, lecz zdaje mi się, że robisz przy każdym obrocie pętli jakieś "ciężkie" zadanie w sensie, że np wczytujesz obrazek z pliku co jest niepotrzebne(piszę w SFML, ale takie rzeczy pewnie i tutaj są ;) ). Ewentualnie pokaż kod programu :)

Ja powiem tylko, że w przypadku SFML i okna 600*600 to standardem było około 800 FPSów gdy tylko wyświetlałem obrazki i sprawdzałem zdarzenia.
P-77006
Nekronomik
Temat założony przez niniejszego użytkownika
» 2013-02-25 21:31:17
C/C++
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_direct3d.h>
#include<iostream>
#include"teren.h"
#include"generator_terenu.h"
using namespace std;
ALLEGRO_BITMAP * trawa = NULL;
ALLEGRO_BITMAP * ziemia = NULL;
ALLEGRO_BITMAP * zaznaczenie = NULL;
ALLEGRO_KEYBOARD_STATE Key;
ALLEGRO_MOUSE_STATE Mouse;
double czas = 0;
int inicjalizacja_allegro()
{
    al_init();
    al_set_new_display_flags( ALLEGRO_WINDOWED | ALLEGRO_DIRECT3D );
    al_create_display( 1000, 600 );
    al_init_image_addon();
    al_install_keyboard();
    al_install_mouse();
    srand( time( NULL ) );
}
int grafika()
{
    trawa = al_load_bitmap( "trawa.png" );
    ziemia = al_load_bitmap( "ziemia.png" );
    zaznaczenie = al_load_bitmap( "zaznaczenie.png" );
}
int maskowanie()
{
    al_convert_mask_to_alpha( trawa, al_map_rgb( 255, 255, 255 ) );
    al_convert_mask_to_alpha( ziemia, al_map_rgb( 255, 255, 255 ) );
    al_convert_mask_to_alpha( zaznaczenie, al_map_rgb( 255, 255, 255 ) );
}
int niszczenie_grafiki()
{
    al_destroy_bitmap( trawa );
    al_destroy_bitmap( ziemia );
    al_destroy_bitmap( zaznaczenie );
}
int wyswietlanie()
{
    int ys = 0, xs = 0; //polorzenie grafiki
    static int pozycja_mapy_y = 0;
    static int pozycja_mapy_x = 0;
    al_get_keyboard_state( & Key );
    al_get_mouse_state( & Mouse );
    if( al_get_time() > czas + 0.01 )
    {
        czas = al_get_time();
        if( al_key_down( & Key, ALLEGRO_KEY_A ) ) pozycja_mapy_x -= 1;
       
        if( al_key_down( & Key, ALLEGRO_KEY_D ) ) pozycja_mapy_x += 1;
       
        if( al_key_down( & Key, ALLEGRO_KEY_W ) ) pozycja_mapy_y -= 1;
       
        if( al_key_down( & Key, ALLEGRO_KEY_S ) ) pozycja_mapy_y += 1;
       
    }
    for( int y = 0; y < 20; y++ )
    {
        for( int x = 0; x < 20; x++ )
        {
            xs =( x - y ) * 48 / 2 + pozycja_mapy_x + 500;
            ys =( y + x ) * 24 / 2 + pozycja_mapy_y + 0;
            if( kafel[ y ][ x ].kod == 100 )
            {
                al_draw_bitmap( trawa, xs, ys, false );
            }
            if( kafel[ y ][ x ].kod == 101 )
            {
                al_draw_bitmap( ziemia, xs, ys, false );
            }
            if( Mouse.x > xs && Mouse.x < xs + 48 && Mouse.y > ys && Mouse.y < ys + 23 )
            {
                al_draw_bitmap( zaznaczenie, xs, ys, false );
            }
        }
    }
}
int main()
{
    inicjalizacja_allegro();
    grafika();
    maskowanie();
    generator();
    int a = 1;
    int fps = 0;
    for(;; )
    {
        al_get_keyboard_state( & Key );
        wyswietlanie();
        fps++;
        if( al_get_time() > a )
        {
            cout << fps << endl;
            fps = 0;
            a++;
        }
        if( al_key_down( & Key, ALLEGRO_KEY_ESCAPE ) ) break;
       
        al_flip_display();
        al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
    }
    niszczenie_grafiki();
    return 0;
}
P-77008
DejaVu
» 2013-02-25 21:35:33
Nie martw się na zapas.
P-77013
Nekronomik
Temat założony przez niniejszego użytkownika
» 2013-02-26 23:18:35
Czy ten zapis bitmapy który przedstawiłem w kodzie i jest na kursach,wczytuje obrazek z pliku za każdym razem ?
Szukam informacji na ten temat ale coś znależć nie mogę.
P-77172
ison
» 2013-02-27 00:17:45
Nie.
Bitmapy wczytujesz tylko w funkcji 'grafika', a ją wywołujesz raz.
P-77191
Nekronomik
Temat założony przez niniejszego użytkownika
» 2013-08-16 16:40:49
Poprawiłem wyświetlanie grafiki w sensie takim ze grafika była wyświetlana na żywca,ograniczyłem ja to 50 kl/s.
Ale problem jest dalej gdy wyświetlam mapę kafelkową 61x61 gdzie kafel ma wymiary 10x10 px to prędkość głównej pętli wynosi około 600k a wyświetlanie grafiki 50 tak jak to ustaliłem,lecz gdy zwiększam rozmiar mapy do 62x62 lub więcej to prędkość głównej pętli jak i wyświetlania grafiki wynosi 42.Może jest jeszcze inny sposób wyświetlania grafiki bo np. jak taka gra jak "terraria" sobie z tym radzi.
P-90395
DejaVu
» 2013-08-20 14:50:40
1. Wyświetlaj tylko to co może być potencjalnie widoczne na ekranie.
2. Wczytaj tekstury przed pętlą główną.
3. Kompiluj w trybie Release jeżeli chcesz sprawdzić rzeczywistą wydajność kodu - tryb Debug zawsze będzie wolny.
4. Pusty ekran ma 6tys. klatek bo karta graficzna nie musi wykonywać żadnych operacji - przetwarzanie sceny jest kosztowne i koniec końców w trybie release powinieneś uzyskiwać zbliżone wartości FPS do innych gier opartych o bibiliotekę OpenGL.
P-90615
« 1 » 2
  Strona 1 z 2 Następna strona