Pogromca_kodu77 Opublikowano 1 Września 2020 Udostępnij Opublikowano 1 Września 2020 Cześć, Potrzebuje żywego przykładu.. Mam na myśli deszcz oraz błyskawice losowo które bedą się pojawiać a ekran będzie wtedy migał. Na necie jest troche przykładów..ale jest jeden haczyk.. Chciałbym mieć możliwość taką że zaznaczam fragment planszy i tylko na tym fragmencie planszy ma pojawić się deszcz z błyskawicami. Nie na całości scenerii.. Ktoś wie z was jak coś takiego zrobić? Z góry wszystkim pragnę podziękować za wszelką pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Września 2020 Administratorzy Udostępnij Opublikowano 1 Września 2020 Wykorzystaj przykład z neta, tylko rysuj go na surface i wtedy uzyskasz jedynie częściowy rozmiar. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 2 Września 2020 Autor Udostępnij Opublikowano 2 Września 2020 Dobra...znalazłem taki przykład z neta co prawda na emiterach na razie nie widzę,żeby obciążało zbyt mocno procesor.. Zresztą chcę to tylko używać na małym obszarze planszy.. mam tu deszcz i mgłę..ale brakuje błysku..burzy...może ktoś wspomoże mnie? fajnie jakby taki błysk działał z piorunami lub bez piorunów w creaction code deszczu. a teraz do rzeczy;-) zaznaczam sobie na room edytorze fragment prostokątny na którym ma się utworzyć deszcz i tak się też dzieje.. problem jest tego typu...kiedy przemieszczam się bohaterem to ten fragment deszczu też się przemieszcza..a zależy mi na tym żeby był wyłącznie w tym miejscu co go zaznaczyłem.. Dziwnie to wygląda,bo jak przemieszczam się bohaterem np góra dół..to widzę "początek zaczęcia tworzenia deszczu/sprita deszczu" a nie powinienem tego widzieć.. Być może ma to wpływ parallaxa moja w grze,ale mimo to chciałbym żeby był w stałym miejscu...bez względu na ruch gracza. Gnysek wspomniał o draw_surface..to jest ok.ale jak to ze sobą połączyć? ten kod jest dość uniwersalny... żeby deszcz padał muszę jeszcze w room edytorze w creacion code obj_deszcz wpisać taki kod który stworzy deszcz o sile padania =1 tak przynajmniej to rozumiem. i zapewne tu w creaction code trzeba by było ustawić stałe położenie deszczu... wolałbym konkretne rozwiązanie niż sugestia..;-) ja wiem,że Gnysek robi co może,ale myślę,że ktoś z was NA PEWNO mógł mieć z tym styczność... obj_deszcz room_edytor creation code haveParticles(pRain,1); obj_deszcz create hspdAdd = 0; vspdAdd = 0; partEmitter = part_emitter_create(partSystem); partType = ds_list_create(); partCount = ds_list_create(); destroy part_emitter_destroy(partSystem,partEmitter); ds_list_clear(partType); ds_list_clear(partCount); begin step hspd += other.hspdAdd; vspd += other.vspdAdd; if ds_list_size(partType) > 0 && !notInView(){ part_emitter_region(partSystem,partEmitter,max(bbox_left,view_xview[0]),min(bbox_right,view_xview[0]+view_wview[0]),max(bbox_top,view_yview[0]),min(bbox_bottom,view_yview[0]+view_hview[0]),ps_shape_rectangle,ps_distr_linear); for (i=0;i<ds_list_size(partType);i++) { part_emitter_burst(partSystem,partEmitter,ds_list_find_value(partType,i),ds_list_find_value(partCount,i)*((min(bbox_right,view_xview[0]+view_wview[0])-max(bbox_left,view_xview[0]))/32)*((min(bbox_bottom,view_yview[0]+view_hview[0])-max(bbox_top,view_yview[0]))/32)); } } i emitery... któryś z nich odpowiada za to gdzie zaczyna się rysowanie kropli deszczu..który to jeszcze nie wiem... pDeszcz = part_type_create() part_type_alpha3(pDeszcz,0,.5,0); //part_type_colour1(pDeszcz,c_aqua); //part_type_shape(pDeszcz,pt_shape_line); part_type_sprite(pDeszcz, spr_kropladeszczu, 0, 0, 0); //part_type_size(pDeszcz,0.15,0.15,0,0); part_type_gravity(pDeszcz,1,270); part_type_direction(pDeszcz,270,270,0,0); part_type_speed(pDeszcz,8,16,0,0); part_type_orientation(pDeszcz,90,90,0,0,0); part_type_life(pDeszcz,3,5); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 3 Września 2020 Autor Udostępnij Opublikowano 3 Września 2020 Jednak będę potrzebował waszej pomocy... Nie będę wklepywał tu setek kodu.. do rzeczy.. 1. sprawa co wyżej rozwiązana..podniosłem wartość y o y-50 i jest ok;-) 2. mam już kod na pioruny oraz kod na błyskanie ekranu.. Obecnie błyska i grzmi na całej planszy..chce aby wyłącznie grzmiało i błyskało na tym fragmencie do zaznaczyłem w room edytorze deszcz... Próbowałem dodać to do kodu...w draw błyskawicy i piorunów max(bbox_left,view_xview[0]),min(bbox_right,view_xview[0]+view_wview[0]),max(bbox_top,view_yview[0]),min(bbox_bottom,view_yview[0]+view_hview[0]) ale mimo to nic się nie dzieje.. jeszcze raz poniżej kod.. obj_deszcz (ma sprita niewidzialnego którego rozciągam w room edytorze i na danej nierozciągniętej części ekranu pada deszcz obj_deszcz begin step if ds_list_size(partType) > 0 && !notInView(){ part_emitter_region(partSystem,partEmitter,max(bbox_left,view_xview[0]),min(bbox_right,view_xview[0]+view_wview[0]),max(bbox_top,view_yview[0]-50),min(bbox_bottom,view_yview[0]+view_hview[0]),ps_shape_rectangle,ps_distr_linear); for (i=0;i<ds_list_size(partType);i++) { part_emitter_burst(partSystem,partEmitter,ds_list_find_value(partType,i),ds_list_find_value(partCount,i)*((min(bbox_right,view_xview[0]+view_wview[0])-max(bbox_left,view_xview[0]))/32)*((min(bbox_bottom,view_yview[0]+view_hview[0])-max(bbox_top,view_yview[0]))/32)); } } //Tworzymy blysk i blyskawice if random(80) < 1 //jesli wartosc losowa wynosi 1 { instance_create(random(room_width),0,obj_piorun); //Tworzymy piorun instance_create(0,0,obj_blyskawica) //Tworzymy blysk } i teraz tak obj_blyskawica draw draw_sprite_ext(sprite_piksel,0,0,0,room_width,room_height,0,c_black,image_alpha); obj_piorun draw ///Rysujemy piorun n_br = 0; //Liczba galezi //Uzywamy mb dla galezi glownych i sub dla rozgalezien mb_dir = 200+random(140); //Kierunek fragmentu linii for (i=0;i<_irr;i+=1) { mb_x[i] = _x; mb_y[i] = _y; //Pozycja porazenia _branching = (random(_br)<1); //Niezalezne porazenia od pioruna i rozgalezienia if (_branching = true) { n_br += 1; b_irr[n_br] = random(_irr); //Ilosc porazen dla tego rozgalezienia sb_x[n_br,0] = mb_x[i]; sb_y[n_br,0] = mb_y[i]; _c = cos(pi*floor(random(2))); if (_c=1) sb_dir = 190+random(60); else sb_dir = 350-random(60); // To sprawia, że galac będzie w lewo lub w prawo; nie w lewo i potem w prawo for (j=1;j<b_irr[n_br];j+=1) { sb_x[n_br,j] = sb_x[n_br,j-1]+lengthdir_x(random(_ml),sb_dir); sb_y[n_br,j] = sb_y[n_br,j-1]+lengthdir_y(random(_ml),sb_dir); if (_c=1) sb_dir = 190+random(60); else sb_dir = 350-random(60); } } _x += lengthdir_x(random(_ml),mb_dir); _y += lengthdir_y(random(_ml),mb_dir); mb_dir = mb_dir-30+random(60); if (mb_dir > 340) mb_dir -= random(60); if (mb_dir < 200) mb_dir += random(60); //Piorun nie idzie w gore;zapobiegamy temu } alpha -= 1/9; //Powolne zanikanie pioruna if alpha<0{instance_destroy()} //Niszczenie jak zaniknie juz piorun draw_set_blend_mode(bm_add); draw_set_color(make_color_rgb(217,160,255)); //Ustawiamy rzecz na kolor purpurowy draw_set_alpha(alpha/2); //Rysujemy piorun w podanej wartosci alpha for (xxx=-1;xxx<=1;xxx+=1) { for (yyy=-1;yyy<=1;yyy+=1) { draw_primitive_begin(pr_linestrip); for (i=0;i<_irr;i+=1) { draw_vertex(mb_x[i]+xxx,mb_y[i]+yyy); } draw_primitive_end(); for (i=1;i<n_br;i+=1) { draw_primitive_begin(pr_linestrip); for (j=0;j<b_irr[i];j+=1) { draw_vertex(sb_x[i,j]+xxx,sb_y[i,j]+yyy); } draw_primitive_end(); } } } draw_set_alpha(1); //Ustawienie przezroczystosci draw_set_color(c_white); //Ustawienie koloru Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 4 Września 2020 Autor Udostępnij Opublikowano 4 Września 2020 Chyba zagram w toto lotka;-) bo chyba nikt tu nie zagląda.. Zawsze jakaś szansa,że trafię chociaż trójkę ;-) parę groszy wpadnie;D Jeśli chodzi o wymuszenie pozycji obiektu błysku zrobiłem coś takiego.. znając współrzędnie z room edytota w draw dałem tak draw_sprite_stretched_ext(sPixel2, 0, x+200, y, 1000, 600, c_black, 1); Co prawda może nie jest to super rozwiązanie,ale w takim oknie na takim obszarze miga obraz... Wolałbym mieć uniwersalne rozwiązanie..bo rozmiar okna mogę zmienić i wtedy znów musiałbym ręcznie zmieniać parametry w draw obiektu błyskawicy Takiego też rozmiaru jest obj_deszcz który rozciągam niewidzialnym spritem w room edytorze i na tym fragmencie tworzy się deszcz... Ten obj_deszcz może mieć dowolny rozmiar to jego zaleta... Ok został jeszcze piorun... tu nie wiem jak to rozwiązać..nawet nie mam koncepcji.. mam współrzędne wyżej linijka.. ale jak to zrobić? dać w draw pioruna jakiś warunek? Gnysek wspominał o draw_surface... tych draw_surface jest od groma.. może chodzi o draw_surface_part? pomoglibyście Mi z tymi piorunami? chciałbym żeby występowały wyłącznie na tym obszarze co wyżej... tu jeszcze raz kod w draw piorunów obj_piorun draw ///Rysujemy piorun n_br = 0; //Liczba galezi //Uzywamy mb dla galezi glownych i sub dla rozgalezien mb_dir = 200+random(140); //Kierunek fragmentu linii for (i=0;i<_irr;i+=1) { mb_x[i] = _x; mb_y[i] = _y; //Pozycja porazenia _branching = (random(_br)<1); //Niezalezne porazenia od pioruna i rozgalezienia if (_branching = true) { n_br += 1; b_irr[n_br] = random(_irr); //Ilosc porazen dla tego rozgalezienia sb_x[n_br,0] = mb_x[i]; sb_y[n_br,0] = mb_y[i]; _c = cos(pi*floor(random(2))); if (_c=1) sb_dir = 190+random(60); else sb_dir = 350-random(60); // To sprawia, że galac będzie w lewo lub w prawo; nie w lewo i potem w prawo for (j=1;j<b_irr[n_br];j+=1) { sb_x[n_br,j] = sb_x[n_br,j-1]+lengthdir_x(random(_ml),sb_dir); sb_y[n_br,j] = sb_y[n_br,j-1]+lengthdir_y(random(_ml),sb_dir); if (_c=1) sb_dir = 190+random(60); else sb_dir = 350-random(60); } } _x += lengthdir_x(random(_ml),mb_dir); _y += lengthdir_y(random(_ml),mb_dir); mb_dir = mb_dir-30+random(60); if (mb_dir > 340) mb_dir -= random(60); if (mb_dir < 200) mb_dir += random(60); //Piorun nie idzie w gore;zapobiegamy temu } alpha -= 1/9; //Powolne zanikanie pioruna if alpha<0{instance_destroy()} //Niszczenie jak zaniknie juz piorun draw_set_blend_mode(bm_add); draw_set_color(make_color_rgb(217,160,255)); //Ustawiamy rzecz na kolor purpurowy draw_set_alpha(alpha/2); //Rysujemy piorun w podanej wartosci alpha for (xxx=-1;xxx<=1;xxx+=1) { for (yyy=-1;yyy<=1;yyy+=1) { draw_primitive_begin(pr_linestrip); for (i=0;i<_irr;i+=1) { draw_vertex(mb_x[i]+xxx,mb_y[i]+yyy); } draw_primitive_end(); for (i=1;i<n_br;i+=1) { draw_primitive_begin(pr_linestrip); for (j=0;j<b_irr[i];j+=1) { draw_vertex(sb_x[i,j]+xxx,sb_y[i,j]+yyy); } draw_primitive_end(); } } } draw_set_alpha(1); //Ustawienie przezroczystosci draw_set_color(c_white); //Ustawienie koloru a tu wywołuje te dwa obiekty w obiekcie deszcz obj_deszcz begin step if ds_list_size(partType) > 0 && !notInView(){ part_emitter_region(partSystem,partEmitter,max(bbox_left,view_xview[0]),min(bbox_right,view_xview[0]+view_wview[0]),max(bbox_top,view_yview[0]-50),min(bbox_bottom,view_yview[0]+view_hview[0]),ps_shape_rectangle,ps_distr_linear); for (i=0;i<ds_list_size(partType);i++) { part_emitter_burst(partSystem,partEmitter,ds_list_find_value(partType,i),ds_list_find_value(partCount,i)*((min(bbox_right,view_xview[0]+view_wview[0])-max(bbox_left,view_xview[0]))/32)*((min(bbox_bottom,view_yview[0]+view_hview[0])-max(bbox_top,view_yview[0]))/32)); } } //Tworzymy blysk i blyskawice if random(80) < 1 //jesli wartosc losowa wynosi 1 { instance_create(random(room_width),0,obj_piorun); //Tworzymy piorun instance_create(0,0,obj_blyskawica) //Tworzymy blysk } Z tym surface kombinuje.. To ma sens..ale nie wiem czy dobrze to rozumiem.. Żeby wymusić konkretną pozycję obj_piorun to w draw muszę dodać taki wpis if !surface_exists(surf) { surf = surface_create(view_width, view_height); draw_surface_part(surf, 0, 0, 1000, 600, x+200, y ); } A w create obj_pioruna Coś takiego.. surf = surface_create(view_width, view_height); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Września 2020 Administratorzy Udostępnij Opublikowano 4 Września 2020 Zaglądamy, ale jak widzimy 300 linijek kodu na którymi trzeba sporo czasu pomyśleć, bo nie znamy całego kodu (co do czytania byłoby jeszcze gorsze), to się nam nie chce. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 5 Września 2020 Autor Udostępnij Opublikowano 5 Września 2020 Spokojnie..tu nie chodzi o analize całego kodu... Napisałem co chciałbym osiągnąć.. Wspominałeś żebym użył funkcji surface... Właśnie to chce zrobić..tylko utknąłem z problemem. Próbuje zmusić piorun żeby generował się na danym tylko obszarze,a nie całej scenerii.. Wyżej są współrzędne gdzie ma się te zjawisko pojawiać.. W przypadku wcześniejszym jak błysk było to o tyle łatwiejsze bo wystarczyło użyć w draw tej funkcji... draw_sprite_stretched_ext(sPixel2, 0, x+200, y, 1000, 600, c_black, 1); Natomiast przy piorunie to się nie sprawdzi.. Bo piorun nie ma sprita.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Września 2020 Administratorzy Udostępnij Opublikowano 7 Września 2020 Tak, wspomniałem o surface, bo tam jest funkcja draw_surface_part, wiec można wtedy narysować część surface. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się