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:
#include <allegro.h>
int model[ 45 ][ 10 ]; bool przycisk = true; int otoczenie = 0;
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
void init() { 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(); }
void deinit() { clear_keybuf(); }
int main() { init(); int z = 0, w = 0, r = 0, zaduzo = 0; BITMAP * bufor = NULL; 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; } for( int x = 0; x < 45; x++ ) for( int y = 0; y < 10; y++ ) { model[ x ][ y ] = 0; } while( z < 3000 ) { clear_to_color( bufor, makecol( 0, 0, 0 ) ); 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--; } } 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ł.
|
|
DejaVu |
» 2012-04-22 18:29:37 while( z < 3000 ) { while( speed > 0 ) { z++; clear_to_color( bufor, makecol( 0, 0, 0 ) ); 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--; } }
|
|
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 |
|
DejaVu |
» 2012-04-22 18:53:55
Wykomentuj ten wiersz to zrozumiesz dlaczego :P |
|
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 |
|
DejaVu |
» 2012-04-22 19:38:01 Lepiej podaj fragment kodu, który zmodyfikowałeś bo jakoś mało wiarygodne są Twoje obecne stwierdzenia... |
|
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ą.
while( z < 500 ) { 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 ); }
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 :) |
|
DejaVu |
» 2012-04-22 19:43:28 |
|
« 1 » 2 |