m@rcixxx Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 1. Tworzymy obiekt surface i wpisujemy w podanych eventach co trzeba. CREATE: GML global.blend=0; global.surf=surface_create(room_width,room_height); surface_set_target(global.surf); draw_clear_alpha(c_black,0); surface_reset_target(); depth=5+round(random(5)) //opcjonalnie</span> ROOM END: GML surface_free(global.surf); DRAW: GML draw_surface_ext(global.surf,0,0,1,1,0,c_white,0.5); 2. W dowolnym obiekcie, który posiada bądź nie posiada sprite'a, wpisujemy co trzeba. Obiekt nie musi mieć eventu draw z linijką na rysowanie samego siebie. Jeśli mamy ustawionego sprite'a w okienku obiektu lub ustawiliśmy go kodem (np. sprite_index=spr_ludek) to wpisujemy w poniższym kodzie w należytym miejscu sprite_index. Jeśli nie to wpisujemy nazwę (istniejącego) sprite'a jaki nam się podoba. END STEP: GML //ja dla przykładu mam takie cienie postaci ale //lepiej ich nie używaj bo się zgubisz i już nie znajdziesz drogi powrotnej, //przewiń w dół i tam znajdziesz odpowiedni kod. if surface_exists(global.surf) { surface_set_target(global.surf); draw_clear_alpha(0,0); draw_sprite_ext(spr_noga,noga_p_index, x+20*wielkosc+lengthdir_x(noga_p_odl*wielkosc,image_angle+noga_p_odl_kat), y+20*wielkosc+lengthdir_y(noga_p_odl*wielkosc,image_angle+noga_p_odl_kat), wielkosc*noga_p_skala,wielkosc,image_angle,c_black,1); draw_sprite_ext(spr_noga,noga_l_index, x+20*wielkosc+lengthdir_x(noga_l_odl*wielkosc,image_angle+noga_l_odl_kat), y+20*wielkosc+lengthdir_y(noga_l_odl*wielkosc,image_angle+noga_l_odl_kat), wielkosc*noga_l_skala,wielkosc,image_angle,c_black,1); draw_sprite_ext(spr_na_graczu,bron_p_index, x+35*wielkosc+lengthdir_x(ramie_p_odl*wielkosc,image_angle+ramie_p_odl_kat) +lengthdir_x(przed_ramie_p_odl*wielkosc*ramie_p_skala,image_angle+ramie_p_kat+przed_ramie_p_odl_kat) +lengthdir_x(bron_p_odl*wielkosc*przed_ramie_p_skala,image_angle+ramie_p_kat+przed_ramie_p_odl_kat+bron_p_odl_kat), y+35*wielkosc+lengthdir_y(ramie_p_odl*wielkosc,image_angle+ramie_p_odl_kat) +lengthdir_y(przed_ramie_p_odl*wielkosc*ramie_p_skala,image_angle+ramie_p_kat+przed_ramie_p_odl_kat) +lengthdir_y(bron_p_odl*wielkosc*przed_ramie_p_skala,image_angle+ramie_p_kat+przed_ramie_p_odl_kat+bron_p_odl_kat), image_xscale,image_yscale,image_angle+bron_p_kat,c_black,0.7) draw_sprite_ext(spr_na_graczu,bron_l_index, x+35*wielkosc+lengthdir_x(ramie_l_odl*wielkosc,image_angle+ramie_l_odl_kat) +lengthdir_x(przed_ramie_l_odl*wielkosc*ramie_l_skala,image_angle+ramie_l_kat+przed_ramie_l_odl_kat) +lengthdir_x(bron_p_odl*wielkosc*przed_ramie_l_skala,image_angle+ramie_l_kat+przed_ramie_l_odl_kat+bron_l_odl_kat), y+35*wielkosc+lengthdir_y(ramie_l_odl*wielkosc,image_angle+ramie_l_odl_kat) +lengthdir_y(przed_ramie_l_odl*wielkosc*ramie_l_skala,image_angle+ramie_l_kat+przed_ramie_l_odl_kat) +lengthdir_y(bron_l_odl*wielkosc*przed_ramie_l_skala,image_angle+ramie_l_kat+przed_ramie_l_odl_kat+bron_l_odl_kat), image_xscale,image_yscale,image_angle+bron_l_kat,c_black,0.7) draw_sprite_ext(spr_przed_ramie,przed_ramie_p_index, x+35*wielkosc+lengthdir_x(ramie_p_odl*wielkosc,image_angle+ramie_p_odl_kat) +lengthdir_x(przed_ramie_p_odl*wielkosc*ramie_p_skala,image_angle+ramie_p_kat+przed_ramie_p_odl_kat), y+35*wielkosc+lengthdir_y(ramie_p_odl*wielkosc,image_angle+ramie_p_odl_kat) +lengthdir_y(przed_ramie_p_odl*wielkosc*ramie_p_skala,image_angle+ramie_p_kat+przed_ramie_p_odl_kat), wielkosc*przed_ramie_p_skala,wielkosc,image_angle+przed_ramie_p_kat,c_black,1); draw_sprite_ext(spr_przed_ramie,przed_ramie_l_index, x+35*wielkosc+lengthdir_x(ramie_l_odl*wielkosc,image_angle+ramie_l_odl_kat) +lengthdir_x(przed_ramie_l_odl*wielkosc*ramie_l_skala,image_angle+ramie_l_kat+przed_ramie_l_odl_kat), y+35*wielkosc+lengthdir_y(ramie_l_odl*wielkosc,image_angle+ramie_l_odl_kat) +lengthdir_y(przed_ramie_l_odl*wielkosc*ramie_l_skala,image_angle+ramie_l_kat+przed_ramie_l_odl_kat), wielkosc*przed_ramie_l_skala,wielkosc,image_angle+przed_ramie_l_kat,c_black,1); draw_sprite_ext(spr_ramie,ramie_p_index, x+35*wielkosc+lengthdir_x(ramie_p_odl*wielkosc,image_angle+ramie_p_odl_kat), y+35*wielkosc+lengthdir_y(ramie_p_odl*wielkosc,image_angle+ramie_p_odl_kat), wielkosc*ramie_p_skala,wielkosc,image_angle+ramie_p_kat,c_black,1); draw_sprite_ext(spr_ramie,ramie_l_index, x+35*wielkosc+lengthdir_x(ramie_l_odl*wielkosc,image_angle+ramie_l_odl_kat), y+35*wielkosc+lengthdir_y(ramie_l_odl*wielkosc,image_angle+ramie_l_odl_kat), wielkosc*ramie_l_skala,wielkosc,image_angle+ramie_l_kat,c_black,1); draw_sprite_ext(spr_tors,tors_index,x+30*wielkosc,y+30*wielkosc,wielkosc*3,wielkosc, point_direction(x,y,x+50*wielkosc,y+50*wielkosc),c_black,1); draw_sprite_ext(spr_glowa,glowa_index, x+40*wielkosc+lengthdir_x(glowa_odl*wielkosc,image_angle+glowa_odl_kat), y+40*wielkosc+lengthdir_y(glowa_odl*wielkosc,image_angle+glowa_odl_kat), wielkosc*3,wielkosc,point_direction(x,y,x+50*wielkosc,y+50*wielkosc),c_black,1); surface_reset_target(); } //odpowiedni kod if surface_exists(global.surf) { surface_set_target(global.surf); draw_clear_alpha(0,0); draw_sprite_ext(moj_sprite,image_index,x+30,y+30,3,1, point_direction(x,y,x+50,y+50),c_black,1); // wartość image_xscale wynosi //jak widać 3, ta wartość rozciąga cień, image yscale pozostało bez zmian (wynosi 1). surface_reset_target(); } 3. WAŻNE Funkcja GML draw_clear_alpha(0,0); może być użyta tylko przez jeden obiekt "rysujący" cień. Np. mamy obiekt o_gracz i dajemy mu tę/ą funkcję i reszta obiektów rysujących cień tym samym kodem się już bez niej obejdzie a i cień będzie "rysowała" dobrze. Czekam na propozycje jak zrobić zmienny depth cienia :D (w zależności od depth obiektu "rysującego" cień). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Wszystko fajnie opisane, na pewno niejednemu początkującemu się to przyda 5/5. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Mała uwaga, nie każdy ma na tyle dużo pamięci w karcie graficznej by ogarnąć takiego surfaca: global.surf=surface_create(room_width,room_height); U mnie już przy roomie około 10000x10000 surface się krzaczy. Optymalnie jest dać obszar o wielkości viewa. Inna miniej istotana uwaga: Niektóre karty wymagają rozmiarów 2^n x 2^m przy czym n może się równać m i są liczbami naturalnymi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 20 Lipca 2011 Autor Udostępnij Opublikowano 20 Lipca 2011 Mała uwaga, nie każdy ma na tyle dużo pamięci w karcie graficznej by ogarnąć takiego surfaca: global.surf=surface_create(room_width,room_height); U mnie już przy roomie około 10000x10000 surface się krzaczy. Optymalnie jest dać obszar o wielkości viewa. Inna miniej istotana uwaga: Niektóre karty wymagają rozmiarów 2^n x 2^m przy czym n może się równać m i są liczbami naturalnymi. Chyba właśnie rozwiązałeś problem fps'ów u mnie :D. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Oj m@rcixxx przecież surface to jedyna rzecz która wymaga karty graficznej ^_^ . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Dodał bym jeszcze blokadę by cień nie próbował się rysować poza viewem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 20 Lipca 2011 Autor Udostępnij Opublikowano 20 Lipca 2011 Właśnie sprawdziłem kilka rzeczy i trzeba będzie zacząć kombinować. Trzeba chyba pętlą narobić obiektów surface wielkości 1024x768 i je dezaktywować poza viewem. Inaczej coś nie chce pójść :/. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Zrobiłem coś dokładnie takiego samego :) Ale z racji długości kodu przerzucam się na twój sposób :P Twoje i tak wyglądają bardziej realistycznie. Masz piąteczkę :) Ps. Tak samo miałem, ze światłem by Dawidds (sam zrobiłem podobne, tylko oczywiście mniej wydajne i gorsze). Może nie doceniam swojej pracy? :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Fronia1996 Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 _________________________________________ ERROR in action number 1 of End Step Event for object object54: Error in code at line 5: if surface_exists(global.surf) ^ at position 27: Unknown variable surf da ktoś upload bo nie rozumiem kodu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Unknown variable surf-Nieznana zmienna surf. Niema takiej zmiennej! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Na pewno to co do CREATE dałeś w Create obiektu, a to co ROOM END, do Room End? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 20 Lipca 2011 Autor Udostępnij Opublikowano 20 Lipca 2011 Może najpierw niech ten obiekt surface się znajdzie w roomie ? Edit: muszę przyznać, że nie wychodzi mi te rysowanie kilku surface'ów w jednym roomie. Obiekty odwołują się tylko do pierwszego. Możecie pomóc rozwiązać ten problem ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Fronia1996 Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 ale ze mnie idiota skoro nie dałem go w roomie:P ale i tak bez przykładu chyba nic nie zdziałam nie chodzi o to że leniwy jestem ale nie rozumiem kodu i gdzie te zmienne których brakuje dawać ___________________________________________ ERROR in action number 1 of End Step Event for object object54: Error in code at line 9: draw_sprite_ext(spr_noga,noga_p_index, ^ at position 18: Unknown variable spr_noga Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Tego miałeś nie używać, przecież jest napisane :P Weź to co jest niżej :P GML //odpowiedni kod if surface_exists(global.surf) { surface_set_target(global.surf); draw_clear_alpha(0,0); draw_sprite_ext(moj_sprite,image_index,x+30,y+30,3,1, point_direction(x,y,x+50,y+50),c_black,1); // wartość image_xscale wynosi //jak widać 3, ta wartość rozciąga cień, image yscale pozostało bez zmian (wynosi 1). surface_reset_target(); } Tamto wyżej to jest kod do postaci m@rcixxx-a, więc wiadomo, że nie masz tych zmiennych :S Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Może najpierw niech ten obiekt surface się znajdzie w roomie ? Edit: muszę przyznać, że nie wychodzi mi te rysowanie kilku surface'ów w jednym roomie. Obiekty odwołują się tylko do pierwszego. Możecie pomóc rozwiązać ten problem ? Po co chcesz zaprzątać w to kilka surfaców, jak wystarczy tylko 1. Jedyne co trzeba zmienić to rozmiar, na wielkość viewa, sposób jego rysowania tzn: GML draw_surface_ext(global.surf,view_xview,view_yview,1,1,0,c_white,0.5); i przesunąć wszystkie elementy, które rzucają cień o -xview i -yview: GML draw_sprite_ext(moj_sprite,image_index,x+30-view_xview,y+30-view_yview,3,1, Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Fronia1996 Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 ok nie doczytałem dzięki zyper jeśli chodzi o przykład to mało rozumiem ale cienie są zaje... i dziwie się że tak szybko przełożyłem do mojej gry więc 5 oczywiście daję:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Bedziom Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Przykład (dobra - art, poradnik) bardzo przyjemny :) 5/5 Edit: muszę przyznać, że nie wychodzi mi te rysowanie kilku surface'ów w jednym roomie. TO! :psichix: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 21 Lipca 2011 Autor Udostępnij Opublikowano 21 Lipca 2011 Po co chcesz zaprzątać w to kilka surfaców, jak wystarczy tylko 1. Jedyne co trzeba zmienić to rozmiar, na wielkość viewa, sposób jego rysowania tzn: GML draw_surface_ext(global.surf,view_xview,view_yview,1,1,0,c_white,0.5); i przesunąć wszystkie elementy, które rzucają cień o -xview i -yview: GML draw_sprite_ext(moj_sprite,image_index,x+30-view_xview,y+30-view_yview,3,1, Mistrzu mój : D ! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 21 Lipca 2011 Udostępnij Opublikowano 21 Lipca 2011 Czekam na propozycje jak zrobić zmienny depth cienia (w zależności od depth obiektu "rysującego" cień). Cień u ciebie pada zawsze pod tym samym kątem? Bo mógłbyś nadać każdemu elementowi rzucającemu cień zmienną, która odpowiadała by wysokości obiektu. Później sprawdzał byś przy pomocy na przykład twierdzenia Pitagorasa czy postać znajduje się w zasięgu cienia. Zaczynając to pisać wiedziałem jak to zrobić, a teraz mam pustkę w głowie :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 21 Lipca 2011 Autor Udostępnij Opublikowano 21 Lipca 2011 Cień u ciebie pada zawsze pod tym samym kątem? Bo mógłbyś nadać każdemu elementowi rzucającemu cień zmienną, która odpowiadała by wysokości obiektu. Później sprawdzał byś przy pomocy na przykład twierdzenia Pitagorasa czy postać znajduje się w zasięgu cienia. Zaczynając to pisać wiedziałem jak to zrobić, a teraz mam pustkę w głowie :( Surface jest rysowany przez jeden obiekt o jednym depth. Drzewo może mieć depth -111111111 a i tak depth cienia będzie miał tyle co obiekt surface. A co do cienia pod takim samym kątem to można to zmienić. Wystarczy zamiast GML draw_sprite_ext(moj_sprite,image_index,x+30,y+30,3,1, point_direction(x,y,x+50,y+50),c_black,1); dać GML draw_sprite_ext(moj_sprite,image_index,x+lengthdir_x(30,kat_cienia),y+lengthdir_y(30,kat_cienia),3,1, point_direction(x,y,x+lengthdir_x(50,kat_cienia),y+lengthdir_y(50,kat_cienia)),c_black,1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 21 Lipca 2011 Udostępnij Opublikowano 21 Lipca 2011 Co do Depth to można zrobić taki myk jak ja tutaj: GM8.1 GM8 Stworzyć 2 surfacy w 2 osobnych obiektach o różnym depth i nałożyć je na siebie. Tutaj akurat zrobiłem 2 warstwy, cienie od drzew są na niższej a cień od wieży na wyższej więc pada także na drzewa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dyzmek Opublikowano 27 Listopada 2011 Udostępnij Opublikowano 27 Listopada 2011 zrobilem wszystko jak trzeba i u mnie w roomie jest ciemno mogl bym prosic o przyklad ? :-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 27 Listopada 2011 Udostępnij Opublikowano 27 Listopada 2011 Myślałem, że masz swój własny silnik do generowania świateł i cieni... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dyzmek Opublikowano 27 Listopada 2011 Udostępnij Opublikowano 27 Listopada 2011 bo mam , ale np jak stworze obj_podloga to cien nie pada na nim bawilem sie z depthami i nic kij wie co jest chyba w grze nie będzie objektów typu podłoga bo cień nie pada na niego tylko przykrywa go a robiłem wszytsko , szukam teamu który mnie przyjmie bym mógł się uczyć i dał bym swój silni potem tworzył bym super gry z teamem proszę niehc ktoś mnie przyjmię na naukę póki co. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 27 Listopada 2011 Udostępnij Opublikowano 27 Listopada 2011 Ciekawe jak wygląda ten twój "silnik" :D . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dyzmek Opublikowano 28 Listopada 2011 Udostępnij Opublikowano 28 Listopada 2011 ediepl przyjmiesz mnie do teamu Fox Recon proszę nauczę się będę pracował jak należy z początku będę robił małe czynności potem coraz więcej proszę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 28 Listopada 2011 Udostępnij Opublikowano 28 Listopada 2011 Mogę cię przyjąć, ale aktualnie nie tworze jakieś gry co byś się mógł uczyć bo mmo to raczej nie podstawy, pomyślę jak by cię wyedukować, może jakaś lekcja i będziesz musiał coś napisać. Napiszę ci na pw lub GG. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dyzmek Opublikowano 28 Listopada 2011 Udostępnij Opublikowano 28 Listopada 2011 ok dzieki zacznij mnie uczyc a mysle ze we mnie jest dusza programisty tylko jest ona stlumiona bo ja mam zapal i checi moje gg 2654052 czekam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Listopada 2011 Administratorzy Udostępnij Opublikowano 28 Listopada 2011 Trochę się cofnę: rozmiar surface to: wys x szer x 32 = ilość bitów (32, bo jest też kanał alpha). wys x szer x 4 = ilośc bajtów Zatem przykład roomu 10000 x 10000, daje 381MB - to już nie byle jaka karta graficzna jest potrzebna. Obrazek 1024x768 to 3MB. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Listopada 2011 Udostępnij Opublikowano 28 Listopada 2011 Trochę się cofnę: rozmiar surface to: wys x szer x 32 = ilość bitów (32, bo jest też kanał alpha). wys x szer x 4 = ilośc bajtów Zatem przykład roomu 10000 x 10000, daje 381MB - to już nie byle jaka karta graficzna jest potrzebna. Obrazek 1024x768 to 3MB. Zaraz zdawało mi się że GMowe surface nie mają kanału alpha, natknąłem się parę razy na to jak się bawiłem surfacami + blend mody. Edit: Chyba próbowałem wtedy zrobić multitexturing 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ę