Allegro Pixel



  • Hallo Leute und zwar möchte ich bei Allegro immer wenn ich den linken mouse button drücke das ein pixel gezeichnet wird und wenn ich nochmal drauf drücke ein neuen pixel zeichne soll beudeuten das wenn ich die maustaste gedrückt halte ein strich zb zeichnen kann.
    Hoffe ihr könnt mir helfen

    mfg Extab



  • Also ich drücke dir die Daumen und wünsche viel Erfolg dabei.



  • Das ist zwar sehr nett aber bringt mich auch nicht weiter 😃



  • Ich habe in etwa das gleiche problem da mein pixel immer wieder gelöscht wird wenn ich die taste los lasse wie bekommt man das hin das der bleibt ?? hier mein code:
    #include <allegro.h>

    using namespace std;

    int main(){

    allegro_init();

    install_keyboard();
    install_mouse();

    set_color_depth(32);

    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 944, 656, 0, 0);

    BITMAP bmp = create_bitmap(944, 656);
    BITMAP
    mouse = load_bitmap("mouse.bmp",NULL);

    clear_to_color(screen, makecol(255, 255, 255));

    set_window_title("Game");

    while(!key [KEY_ESC])
    {

    if((mouse_b & 1)==1)
    {
    putpixel(bmp,mouse_x,mouse_y,makecol(255,255,255));
    }

    draw_sprite(bmp,mouse,mouse_x,mouse_y);
    blit(bmp, screen, 0, 0, 0, 0, bmp->w, bmp->h);
    clear(bmp);
    }

    destroy_bitmap(bmp);

    }

    END_OF_MAIN()



  • clear(bmp)
    

    Sicher, dass du das willst?

    PS: Beim nächstem Mal bitte [cpp] tags benutzen für den Code, dann sieht der schöner aus 🙂 (Auf C/C++ klicken, unter den Smilies)



  • ja wenn ich das nicht benutze ist zieht meine maus hinter sich so verschwomenes nach wenne du verstehst was ich meine daher muss das dahin



  • Was du brauchst, ist

    1. Double Buffering
    2. Eine Bitmap für alle deine Gezeichneten Sachen, die du während jeder Main-Loop auf den screen blittest,
    3. Ein wenig Verstand.



  • Hab da was gebastelt, kannst ja drauf bauen

    #include <allegro.h>
    
    void draw_mouse(BITMAP*, size_t = 10, int = makecol(255, 255, 255));
    void draw_mouse(BITMAP* buffer, size_t radius, int mcolor)
    {
        circle(buffer, mouse_x, mouse_y, radius, mcolor);
        vline(buffer, mouse_x, mouse_y - radius / 2, mouse_y + radius / 2, mcolor);
        hline(buffer, mouse_x - radius / 2, mouse_y, mouse_x + radius / 2, mcolor);
    }
    
    int main()
    {
          allegro_init();
          install_mouse();
          install_keyboard();
          set_color_depth(16);
          {
                int w,h;
                get_desktop_resolution(&w, &h);
                set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, w, h, 0, 0);
          }
    
          BITMAP *buffer(create_bitmap(SCREEN_W, SCREEN_H)),
                *drawed(create_bitmap(SCREEN_W, SCREEN_H));
    
          struct {float x, y;} last_point;
          last_point.x = SCREEN_W / 2;
          last_point.y = SCREEN_H / 2;
    
          for(;!key[KEY_ESC];blit(buffer, screen, 0, 0, 0, 0, buffer->w, buffer->h))
          {
                clear_bitmap(buffer);
                blit(drawed, buffer, 0, 0, 0, 0, drawed->w, drawed->h);
    
                if(mouse_b & 1)
                {
                      line(drawed, last_point.x, last_point.y, mouse_x, mouse_y, makecol(255, 255, 255));
                      last_point.x = mouse_x;
                      last_point.y = mouse_y;
                }
    
                draw_mouse(buffer);
          }
    
          destroy_bitmap(buffer);
          destroy_bitmap(drawed);
          allegro_exit();
    }
    END_OF_MAIN()
    


  • Ich danke dir hast mir sehr geholfen


Anmelden zum Antworten