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

[Allegro] Efekt światła

Ostatnio zmodyfikowano 2009-03-18 18:52
Autor Wiadomość
Patzick
» 2009-03-17 23:26:32
Jakieś super to to nie jest ale chociaż Cię naprowadzi.

C/C++
void efekt_pochodni( int a ) { //parametr do zaciemnienia
    if( a == 1 ) { //żeby zaciemnienie zrobiło się tylko raz
        for( int i = 0; i < 40; i++ ) { //tu zaciemnienie
            set_trans_blender( 255, 255, 255, i );
            draw_trans_sprite( bufor, pochodnia, 0, 0 );
            blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
        }; };
    clear_to_color( pochodnia, makecol( 0, 0, 0 ) ); //tu jak "zgasną światła" włącza się ta pochodnia
    circlefill( pochodnia, SCREEN_W / 2, SCREEN_H / 2, 40, makecol( 255, 0, 255 ) );
    masked_blit( pochodnia, bufor, 0, 0, 0, 0, 800, 600 );
};

//teraz przed funkcją z ruchem walnij sobie
int a = 1;

//a wewnątrz funkcji z ruchem zmieniasz na
efekt_pochodni( a );
a = 0; //dzięki temu zaciemni się tylko raz i nie będzie rozjaśniał
Te parametry z zaciemnianiem sobie ułożysz to jest teraz tak na szybkiego, mam nadzieję, że o coś w tym stylu chodziło :)
P-4803
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-17 23:32:45
;P Nie chodziło mi o zgaszanie światła xDD Tylko o płynne przejście z "pochodni" w ciemność ;P Dobra idę spać, jutro się pomęczymy ;)
P-4804
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-18 16:57:35
Ok już jestem. To jak, macie jakieś pomysły?
P-4814
DejaVu
» 2009-03-18 17:00:26
Pomyśl i pokombinuj w końcu to Twoje zadanie. Dostałeś już jakiś pomysł i twierdzisz, że jesteś nie zadowolony bo coś tam. Czekasz na gotowe rozwiązanie? Bezsensu, bo teraz to już kwestia tylko i wyłącznie kombinowania wspomnianymi technikami.
P-4815
Patzick
» 2009-03-18 17:46:12
Wszystko podane masz, zaciemnienia już wiele razy powtarzałeś że umiesz a tu nic innego nie trzeba...cóż zajęło mi to 2 minuty więc już dam kod, ale na przyszłość staraj się sam pomyśleć.

C/C++
void efekt_pochodni( int a ) { //kod taki jak z poprzedniego
    if( a == 1 ) {
        for( int i = 0; i < 40; i++ ) {
            set_trans_blender( 255, 255, 255, i );
            draw_trans_sprite( bufor, pochodnia, 0, 0 );
            blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
        }; };
    clear_to_color( pochodnia, makecol( 0, 0, 0 ) );
    circlefill( pochodnia, SCREEN_W / 2, SCREEN_H / 2, 60, makecol( 255, 0, 255 ) );
    masked_blit( pochodnia, bufor, 0, 0, 0, 0, 800, 600 );
    if( a == 1 ) { //masz gaszenie pochodni
        BITMAP * tymcz = create_bitmap( 800, 600 );
        for( int i = 0; i < 40; i++ ) {
            set_trans_blender( 255, 255, 255, i );
            draw_trans_sprite( bufor, tymcz, 0, 0 );
            blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
        };
        destroy_bitmap( tymcz );
    };
    if( a == 0 ) { //tu masz zapalanie pochodni
        BITMAP * tymcz = create_bitmap( 800, 600 );
        for( int i = 40; i > 20; i-- ) {
            set_trans_blender( 255, 255, 255, i );
            draw_trans_sprite( bufor, tymcz, 0, 0 );
            blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
        };
        destroy_bitmap( tymcz );
    }
};
ściślej jak masz już tą "dziurę w ścianie" to dodajesz na to dodatkową bitmapę odpowiednio przyciemnioną/rozjaśnioną. Czy o to Ci chodziło?
P-4816
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-18 17:54:42
Dobra, sam sobie jakoś poradzę. A chodziło mi o co innego. Chciałem zrobić zamiast dziury w ścianie - światło, płynne przejście ze światła w ciemność (rozmazane krawędzie "dziury").
P-4817
Patzick
» 2009-03-18 18:04:33
no to przecież to już czysta kosmetyka. dokładasz dodatkowe bitmapy (ilość zależy od dokładności efektu, który chcesz osiągnąć) w których definiujesz poziom zaciemnienia jako tło i różowe kółko na prześwit i to wszystko nałożone na siebie da Ci świetne efekty. Pamiętaj, żeby kolejne bitmapy miały mniejsze różowe kółka żeby było widać efekt jaki chcesz osiągnąć :)
P-4818
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-18 18:24:39
Mam coś takiego:
C/C++
for( int i = 0; i <= 20; i++ ) {
    set_trans_blender( 255, 255, 255,( 255 -( i * 10 ) ) );
    circlefill( pochodnia, player_x + 20, player_y + 20, 150 - i, makecol( 255, 0, 255 ) );
}
// i teraz wyświetlanie
Niestety, to nic mi nie dało (nadal jest tak samo). Proszę o ostatnią pomoc.
P-4819
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona