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

[C++, Allegro5] Wyświetlanie i ładowanie

Ostatnio zmodyfikowano 2011-04-17 14:58
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-04-17 14:30:43
Ohh dzięki @ison :)
Sory że tak długo, ale musiałem obczaić te wątki w Allegro5, ale i tak nie kapuje :p

Działa, lecz strasznie zamula mi kompa ? :)

Dla przykładu dałem 10 bitmap (przy 200 aplikacja sie wywalała ... :D)

C/C++
ALLEGRO_BITMAP * tlo[ 10 ];

void LoadMyBitmaps( void * param )
{
    for( int i = 0; i < 10; i++ )
         tlo[ i ] = al_load_bitmap( "media/elo.bmp" );
   
    menu.teraz = "cus";
    _endthread();
}
//...
_beginthread( LoadMyBitmaps, 0, 0 );
menu.speedload += 0.02;
al_draw_rotated_bitmap( menu.load_img, 50, 50, sz_okna / 2, dl_okna / 2, menu.speedload, 0 );

Każda bitmapa którą wczytuje waży około 700 KB, więc nie mam pojęcia czemu to tak zamula..
P-30932
ison
» 2011-04-17 14:34:28
wywołujesz
C/C++
_beginthread( LoadMyBitmaps, 0, 0 );
w pętli?
jeśli tak to się nie dziwie czemu zamula :D
P-30933
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-04-17 14:45:27
No fakt, przepraszam :D

Ale za to, gdy zrobię wyświetlanie tego "kółeczka" w wątku (zamiast wczytywania bitmap) to wyskakuje taki błąd w konsoli:
Assertion failed: src, file C:\...\transformations.c, line 32

This application has requested the Runtime to terminate it in an unusual way. Please conntact support ...


Czyli to wiąże się już z plikiem z Allegro5.. ;/

C/C++
#ifndef __al_included_allegro5_transformations_h
#define __al_included_allegro5_transformations_h

#ifdef __cplusplus
extern "C" {
    #endif
   
    /* Type: ALLEGRO_TRANSFORM
    */
    typedef struct ALLEGRO_TRANSFORM ALLEGRO_TRANSFORM;
   
    struct ALLEGRO_TRANSFORM {
        float m[ 4 ][ 4 ];
    };
   
    /* Transformations*/
    AL_FUNC( void, al_use_transform,( const ALLEGRO_TRANSFORM * trans ) );
    AL_FUNC( void, al_copy_transform,( ALLEGRO_TRANSFORM * dest, const ALLEGRO_TRANSFORM * src ) );
    AL_FUNC( void, al_identity_transform,( ALLEGRO_TRANSFORM * trans ) );
    AL_FUNC( void, al_build_transform,( ALLEGRO_TRANSFORM * trans, float x, float y, float sx, float sy, float theta ) );
    AL_FUNC( void, al_translate_transform,( ALLEGRO_TRANSFORM * trans, float x, float y ) );
    AL_FUNC( void, al_rotate_transform,( ALLEGRO_TRANSFORM * trans, float theta ) );
    AL_FUNC( void, al_scale_transform,( ALLEGRO_TRANSFORM * trans, float sx, float sy ) );
    AL_FUNC( void, al_transform_coordinates,( const ALLEGRO_TRANSFORM * trans, float * x, float * y ) );
    AL_FUNC( void, al_compose_transform,( ALLEGRO_TRANSFORM * trans, const ALLEGRO_TRANSFORM * other ) );
    AL_FUNC( const ALLEGRO_TRANSFORM *, al_get_current_transform,( void ) );
    AL_FUNC( const ALLEGRO_TRANSFORM *, al_get_current_inverse_transform,( void ) );
    AL_FUNC( void, al_invert_transform,( ALLEGRO_TRANSFORM * trans ) );
    AL_FUNC( int, al_check_inverse,( const ALLEGRO_TRANSFORM * trans, float tol ) );
    AL_FUNC( void, al_ortho_transform,( ALLEGRO_TRANSFORM * trans, float left, float right, float top, float bottom, float n, float f ) );
   
    #ifdef __cplusplus // <- 32 line ;p
}
#endif

#endif
P-30935
ison
» 2011-04-17 14:51:51
mówiłem że mogą wystąpić tego typu problemy, w allegro 4.2 takie coś przechodziło ale obsługa grafiki (tzn wyświetlanie bitmap itd.) w allegro 5 w wątkach może się już sypać, nie wiem jak to dokładnie wygląda

ale zawsze możesz zrobić odwrotnie, tzn w wątku wczytuj bitmapy a w głównej pętli gry obracaj kółko tak długo aż wszystkie bitmapy nie zostaną wczytane

C/C++
bool wczytano = false;

void LoadBitmaps( void * param )
{
    for(...) {
        ...//wczytywanie bitmap
    }
    wczytano = true;
}

...
_beginthread( LoadBitmaps, 0, 0 );
while( !wczytano ) {
    //animacja kółka)
}
P-30937
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-04-17 14:58:54
@ison: jesteś wielki :) Naprawde hehe :)

Dzięki za pomoc! :)
P-30939
1 « 2 »
Poprzednia strona Strona 2 z 2