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

[allegro] pisze pisze i nie pisze po ekranie :)

Ostatnio zmodyfikowano 2012-04-22 20:22
Autor Wiadomość
Tyirus
Temat założony przez niniejszego użytkownika
[allegro] pisze pisze i nie pisze po ekranie :)
» 2012-04-22 16:42:44
Witam szanownych forumowiczów, mam prosty(mam nadzieje) problem. Piszę sobie taki programik modelu łączenia ligandu z receptorem, zresztą to mało ważne, w każdym razie uruchamiam program oczywiscie jest pętla główna kończąca się po 3000 iteracji, wszystkie interacje są wykonywane jednak funkcja pisząca na ekranie wartość licznika iteracji "z" działa 2 razy, po czym nie można juz nic narysować na ekranie, ani w pętli ani (co dziwne) po wyjściu z niej. Piszę w dev c++. Nie wiem jak zamieszcza się kod, zatem wkleje go jak leci:

C/C++
#include <allegro.h>

/////////////////Globalne zmienne/////////////////////
int model[ 45 ][ 10 ]; //tablica z modelem
bool przycisk = true;
int otoczenie = 0;

/////////////////////////////////////////////Funckje/////////////////////////////////////////
volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

void init() // inicjacja allegro
{
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if( depth == 0 ) depth = 32;
   
    set_color_depth( depth );
    res = set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 1366, 768, 0, 0 );
    if( res != 0 ) {
        allegro_message( allegro_error );
        exit( - 1 );
    }
   
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 50 ) );
    install_keyboard();
    install_mouse();
   
    /* add other initializations here */
}

void deinit() // czystki po balaganie allegro
{
    clear_keybuf();
    /* add other deinitializations here */
}


//////////////////////////////////////////PROGRAM//////////////////////////////////////
int main()
{ init();
    int z = 0, w = 0, r = 0, zaduzo = 0;
    ////////////////////////////// Potrzebne bitmapy ////////////////////////////
    BITMAP * bufor = NULL;
    /////////////////////////////ładowanie obrazków na bitmapy //////////////////////
   
    bufor = create_bitmap( 1366, 768 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
    /////////////////Wszystko co powinno sie zrobic///////////////////////
    for( int x = 0; x < 45; x++ )
    for( int y = 0; y < 10; y++ )
    { model[ x ][ y ] = 0; }
   
   
    //////////////////////////Ekran poczatkowy/////////////////////////
   
   
    ////////////////////////Główna pętla /////////////////////////////////
    while( z < 3000 )
    {
        clear_to_color( bufor, makecol( 0, 0, 0 ) ); /// czyszczenie bufora
        while( speed > 0 )
        {
           
           
           
            z++;
            textprintf_ex( bufor, font, 20, 20, makecol( 200, 0, 200 ), - 1, "z = %d, w = %d, r = %d, speed = %d", z, w, r, speed );
            blit( bufor, screen, 0, 0, 0, 0, 1366, 768 );
           
            speed--;
        }
       
       
    } //////koniec głównej petli
   
   
   
   
   
    ///////////////////////////////niszczenie pozostalosci /////////////////
    remove_int( increment_speed );
   
    destroy_bitmap( bufor );
    deinit();
    return 0;
}
END_OF_MAIN()

Nie jest to cały kod, po prostu ta część zachowuje się identycznie jak całość więc uznałem ze nie będę za dużo wklejał.
P-55007
DejaVu
» 2012-04-22 18:29:37
C/C++
while( z < 3000 )
{
    while( speed > 0 )
    {
        z++;
       
        clear_to_color( bufor, makecol( 0, 0, 0 ) ); /// tadam!!! :)
        textprintf_ex( bufor, font, 20, 20, makecol( 200, 0, 200 ), - 1, "z = %d, w = %d, r = %d, speed = %d", z, w, r, speed );
        blit( bufor, screen, 0, 0, 0, 0, 1366, 768 );
       
        speed--;
    }
   
   
} //////koniec głównej petli
P-55013
Tyirus
Temat założony przez niniejszego użytkownika
» 2012-04-22 18:46:29
Primo dzięki za odpowiedz
Duo chyba jednak zle wytłumaczyłem problem, mianowicie nawet jesli czyszczenie bufora dam wewnątrz pętli regulującej czas działania to przykładowo przy uruchomieniu pokazuje mi się licznik z = 11 po chwili przeskakuje na z =75 a potem wogole sie nie zmienia tylko jak domniemanie osiagnie 3000 program sie wylącza. I chodzi mi o to dlaczego nei pokazuje mi wartości pośrednich?? rozumiem ze nie pokazuje wszystkich bo mogą sie szybko zmieniać, natomiast dlaczego zatrzymuje sie akurat na tak niskich wartosciach?

Dzięki za edycję kodu.

Pozdrawiam
Tyirus
P-55014
DejaVu
» 2012-04-22 18:53:55
C/C++
while( speed > 0 )
Wykomentuj ten wiersz to zrozumiesz dlaczego :P
P-55015
Tyirus
Temat założony przez niniejszego użytkownika
» 2012-04-22 19:22:30
Wywaliłem całkowicie pętle ze speedem i.. nic z tego :( dodałem za to kolejny test mianowicie zamienilem
 textprintf_ex( bufor, font, 20, 20, makecol( 200, 0, 200 ), - 1, "z = %d", z); na napis zalezny połozeniem od z czyli
 textprintf_ex( bufor, font, 20, 10*z, makecol( 200, 0, 200 ), - 1, "z = %d", z);

Wynik :

z=1
z=2
z=3
.
.
.
z=28




/////tak tu jest duza przerwa




<- tutaj z kolei występuje pierwsza jednopiskelowa wartwa napisu z=73(tez sie zdziwilem)
z=74
z=75
z=76

Pierwsza mysl ze to jest problem z odświezaniem, moze ktos mial cos podobnego albo wie co z tym mozna zrobic? :P
P-55017
DejaVu
» 2012-04-22 19:38:01
Lepiej podaj fragment kodu, który zmodyfikowałeś bo jakoś mało wiarygodne są Twoje obecne stwierdzenia...
P-55023
Tyirus
Temat założony przez niniejszego użytkownika
» 2012-04-22 19:42:04
Oto cały nie bardzo zmodyfikowany kod :) tak jak napisalem wyzej usunalem calkowicie funkcję ze speed i chcąc sprawdzić czy petla przechodzi przez wszystkie watości "z" (tak jak powinna) dodałem zeby wypisywał wszystkie wartości "z" jedna pod drugą.


C/C++
////////////////////////Główna pętla /////////////////////////////////
while( z < 500 )
{
    //clear_to_color( bufor, makecol( 0, 0, 0 ) ); /// czyszczenie bufora      
   
   
    z++;
   
    textprintf_ex( bufor, font, 20, 10 * z, makecol( 200, 0, 200 ), - 1, "z = %d", z );
    blit( bufor, screen, 0, 0, 0, 0, 1366, 768 );
    rest( 100 );
   
   
} //////koniec głównej petli

Edit. Dziekuje, przepraszam, i poprawiam :)

PS. jakbyś mógł również pokazać mi jak wklejać kod poprawnie to byłbym wdzięczny, a przynajmneij nie robiłym takiego syfu :)
P-55024
DejaVu
» 2012-04-22 19:43:28
Napisałem fragment, a nie cały kod...

» Kurs STC » Kolorowanie składniKolorowanie składni języka C++ lekcja
P-55026
« 1 » 2
  Strona 1 z 2 Następna strona