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

[allegro 4.X] przesyłanie bitmapy między klasami i funkcjami.

Ostatnio zmodyfikowano 2012-04-14 19:10
Autor Wiadomość
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:
C/C++
void funkcja1( BITMAP * & bufor ) { funkcja2( bufor ); }
void funkcja2( BITMAP * & bufor )
{
    putpixel( bufor, 1, 2, 3, 4 ); //<---dorysowuje pkt. na bitmapie
    funkcja3( bufor );
}
void funkcja3( BITMAP * & bufor )
{
    putpixel( bufor, 5, 6, 7, 8 ); //  <-- to już się nie dorysuje na Bitmapie
}

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ć : < 
P-54509
DejaVu
» 2012-04-14 18:15:51
Tak napisałeś swojego posta, że w zasadzie to nie wiadomo o co Ci chodzi w Twoim temacie :)
P-54510
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:
C/C++
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 );
    }
   
    /*GUZIK*/
    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:
C/C++
#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ć :
C/C++
HeadPanel( bufor ); //dlaczego to się nie wyświetla ?
LeftPanel( bufor );
MainPanel( bufor );
BelowPanel( bufor );
circle( bufor, 100, 100, 50, 0xff0000 );

a wyświetla się tylko: circle(bufor,100,100,50,0xff0000);
P-54511
DejaVu
» 2012-04-14 18:55:26
Możliwe opcje:
1) nie ustawiasz właściwego koloru.
2) masz nieprawidłowe koordynaty.
3) zasłaniasz później rysowaną grafiką coś co zostało wyrenderowane wcześniej.
P-54514
zot0
Temat założony przez niniejszego użytkownika
» 2012-04-14 19:10:36
źle kolory odczytuje!!
C/C++
void LoadGui( char * adres )
{
    fstream file;
    file.open( adres, ios::in );
    if( file.good() == true )
    {
        file >> kolor_panel;
        file >> kolor_ramka;
        file >> kolor_tekst;
       
        allegro_message( "%d %d %d", kolor_panel, kolor_ramka, kolor_tekst );
    }
    else
         allegro_message( "BRAK Pliku ze stylami: < %s", adres );
   
    file.close();


plik:

0x888888 0x0 0x669900

odczytuje, że same zera są w pliku ; /

------------
ok! znalazłem, nie można podawać kolorów w postaci 0xffffff do (int) . Zamykam i wielkie dzięki :D
P-54515
« 1 »
  Strona 1 z 1