zot0 Temat założony przez niniejszego użytkownika |
[allegro 4.X] przesyłanie bitmapy między klasami i funkcjami. » 2012-04-14 18:12:00 Witam, mam do Was pytanie odnośnie jakimi metodami można jeszcze przenosić BITMAPY: dla przykładu: void funkcja1( BITMAP * & bufor ) { funkcja2( bufor ); } void funkcja2( BITMAP * & bufor ) { putpixel( bufor, 1, 2, 3, 4 ); funkcja3( bufor ); } void funkcja3( BITMAP * & bufor ) { putpixel( bufor, 5, 6, 7, 8 ); }
int main() { BITMAP * bufor = create_bimap( 64, 64 ); funkcja1( bufor ); blit( bufor, gdzie_indziej, 0, 0, 0, 0, bufor->w, bufor->h ); }
Wszystko działa ładnie do czasu gdy BITMAP-E przekładam maksymalnie 3razy przez funkcje, później przestaje cokolwiek się na niej wyświetlać z dalszych funkcji. Proszę o pomoc gdyż nie wiem jak to rozwiązać : < |
zot0 Temat założony przez niniejszego użytkownika |
» 2012-04-14 18:25:48 Ok w takim razie pokaże cały kod. Gui.cpp: class Gui { public: int screen_x; int screen_y; void LoadGui( char * adres ) { fstream file; file.open( adres, ios::in ); if( file.good() == true ) { file >> kolor_panel; file >> kolor_ramka; file >> kolor_tekst; } else allegro_message( "BRAK Pliku Ze stylami: < %s", adres ); file.close(); } void showGui( BITMAP * & bufor ) { HeadPanel( bufor ); LeftPanel( bufor ); MainPanel( bufor ); BelowPanel( bufor ); circle( bufor, 100, 100, 50, 0xff0000 ); } private: void HeadPanel( BITMAP * & bufor ) { panel_i_ramka( bufor, 0, 0, screen_x, 16 ); tekst_out( bufor, 10, 5, "Editor v3 BETA" ); } void LeftPanel( BITMAP * & bufor ) { panel_i_ramka( bufor, 0, 16, 150, screen_y - 16 ); } void MainPanel( BITMAP * & bufor ) { panel_i_ramka( bufor, 150, screen_y - 250, screen_x, screen_y ); } void BelowPanel( BITMAP * & bufor ) { panel_i_ramka( bufor, 0, screen_y - 16, screen_x, screen_y ); } void tekst_out( BITMAP * & bufor, int pozX, int pozY, string tekst ) { textprintf_ex( bufor, font, pozX, pozY, kolor_tekst, - 1, tekst.c_str() ); } void panel_i_ramka( BITMAP * & bufor, int X, int Y, int P, int Q ) { rectfill( bufor, X, Y, P, Q, kolor_panel ); rect( bufor, X, Y, P, Q, kolor_ramka ); } void panel_i_ramka2( BITMAP * & bufor, int X, int Y, int P, int Q ) { rectfill( bufor, X, Y, P, Q, kolor_panel + 0x333333 ); rect( bufor, X, Y, P, Q, kolor_ramka ); } void ramka( BITMAP * & bufor, int X, int Y, int P, int Q ) { rect( bufor, X, Y, P, Q, kolor_ramka ); } bool guzik( BITMAP * & bufor, int x, int y, int p, int q, char * tekst, bool aktywny ) { if( mouse_x > x && mouse_x < p && mouse_y > y && mouse_y < q && aktywny == true ) { panel_i_ramka2( bufor, x, y, p, q ); tekst_out( bufor,( x + p / 2 ) - 20, y + 5, tekst ); if( mouse_b != 1 ) pause = false; if( mouse_b == 1 && pause == false ) { pause = true; return true; } } else { panel_i_ramka( bufor, x, y, p, q ); tekst_out( bufor,( x + p / 2 ) - 20, y + 5, tekst ); } return false; } int kolor_panel; int kolor_ramka; int kolor_tekst; bool pause; };
main.cpp: #include <allegro.h> #include <string> #include <fstream> #include <iostream>
#include "Scena.cpp" #include "SetAllegro.cpp" #include "Gui.cpp"
using namespace std;
#if _DEBUG #pragma comment(lib, "alld.lib") #else #pragma comment(lib, "alleg.lib") #endif
SetAllegro set; Scena scena; Gui gui;
int main() { set.RunAllegro( "data/prog_conf.cfg" ); gui.screen_x = set.screen_x; gui.screen_y = set.screen_y; gui.LoadGui( "data/thame.cfg" ); BITMAP * bufor = create_bitmap( set.screen_x, set.screen_y ); show_mouse( screen ); while( !key[ KEY_ESC ] ) { clear_to_color( bufor, 0x0 ); gui.showGui( bufor ); blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h ); } allegro_exit(); return 0; } END_OF_MAIN();
w głównej pętli ,która jest w main.cpp znajduje się linia : gui.showGui( bufor ); powinno tam się wyświetlać : HeadPanel( bufor ); LeftPanel( bufor ); MainPanel( bufor ); BelowPanel( bufor ); circle( bufor, 100, 100, 50, 0xff0000 );
a wyświetla się tylko: circle(bufor,100,100,50,0xff0000); |