Skocz do zawartości

draw sprite?


pamparampa

Rekomendowane odpowiedzi

draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha) Draws the sprite scaled with factors xscale and yscale and rotated counterclockwise over rot degrees. color is the blending color (use c_white for no blending) and alpha indicates the transparency factor with which the images is merged with its background. A value of 0 makes the sprite completely transparent. A value of 1 makes it completely solid. This function can create great effect (for example partially transparent explosions).

Funkcję wrzucasz do event DRAW.

Odnośnik do komentarza
Udostępnij na innych stronach

Wpisałem "draw_sprite_ext(spr_drzewo1_cien,0,x,y,0,0,0,c_white,0.70)" i mi nic nie rysuje (w dodatku obiekt w którym jest ten kod staje się niewidoczny)

Edit:

już działa zmieniłem xscale i ysclae na 1 ale jak obiekty się na siebie nakładają to alpha się chyba sumuje co zrobić żeby tak się nie działo?

Odnośnik do komentarza
Udostępnij na innych stronach

"Zsumuje" Ci się, ponieważ jest coraz więcej obiektów na sobie. Wyobraź sobie, że nakładasz na siebie torebki foliowe. Gdy jest ich mało, widzisz co jest po drugiej stronie. Gdy jest ich coraz więcej, zaczynasz widzieć coraz mniej i obraz jest bardziej "ciemny". Tutaj masz to samo. Co zrobić aby tak się nie działo?

Jedynie co mi przychodzi do głowy, to sprawdzać z iloma obiektami dany obiekt ma kolizję. Gdy jest ich więcej niż, załóżmy 5, to już nie każemy mu rysować sprite'a. Ma to swój minus. Obiekt przestaje być widoczny co sugeruje, że go nie ma, mimo że dalej istnieje.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem czy to pomoże ale spróbuj zmienić depth jednego z obiektów, a jeśli się nie da stwórz pętle.

 

GML
for(i=y_obrazka,i<obrazek.długość,i+=1)

{

if(!position_empty(x_obrazka,i)

{

col=draw_getpixel(x_obrazka,i)

draw_point_color(x_obrazka,i,col-1000)

}

}

Tak oto zabezpieczasz 1 linijkę obrazka zrób tak z każdą zmieniając tylko argument x_obrazka (możesz to zrobić pętlą)

Odnośnik do komentarza
Udostępnij na innych stronach

właśnie że się przyglądałem i też stwierdziłem że jest głupi :jezor: no ale mimo wszystko spróbowałem go w praktyce i nie działa. Ma ktoś jakiś inny pomysł? Wiem że było już podobne pytanie na forum i ktoś odpisał "Rysuj na surface'a bez alphy, a potem surface'a z alphą na ekran" Tylko że nie wiem czy to by było skuteczne i w ogóle się nie znam na tych surface'ach

Odnośnik do komentarza
Udostępnij na innych stronach

A ja bym użył jednego surface, narysował na nim cienie bez alpha, a później na ekranie surface z alpha.

Właśnie o tym mówię. Ja w swojej grze użyłem caegoś takiego, że jak gracz przegrywa to ekran się powoli zaciemnia, a jak jest całkiem ciemny to restartuje poziom. Nie wiem, czy zrobiłem to profesjonalnie, ale stworzyłem surface,a o wymiarach view'a i dałem w drawie rysowanie czarnego prostokąta o wspomnianej wyżej alphie, która staje się coraz wyższa. Chyba że ci chodzi o to, że zamiast ustalać alphy obrazku na surfejsie (nie wiedziałem jak to odmienić) to używasz alphy całego surface'a.

Edit: a że się tak zupełnie nie na temat zapytam. Po co są te rangi czy jak to tam nazwać przy profilu każdego użytkownika i jak się je zdobywa?

Odnośnik do komentarza
Udostępnij na innych stronach

Cholera... co?

Człowieku, o czym Ty piszesz.

 

To będzie działać jakoś tak:

Create

    s = surface_create( 640, 480 );
    surface_set_target( s );
    draw_clear_alpha( c_white, 0 );
    surface_reset_target();

Step

    surface_set_target( s );
    draw_clear_alpha( c_white, 0 );
    with( obiektyZCieniem ) {
        draw_sprite( cien, 0, x, y );
    }
    surface_reset_target();

Draw

    draw_surface_ext( s, 0, 0, 1, 1, 0, c_white, 0.7 );

Odnośnik do komentarza
Udostępnij na innych stronach

Kocham ludzi którzy uważają, że się denerwuję gdy nie używam emotikonek!

matik97, jeśli jeszcze nie zauważyłeś Twoje rozwiązanie nie ma nic wspólnego z moim.

 

pamparampa, niemniej, zalecam zajrzeć do dokumentacji i oswoić się z jej zawartością, surface nie jest takie trudne w obsłudze.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja używam surface'ów od jakichś 2 tygodni, a od tygodnia je jako tako pojmuje XD.

Edit: Tymon, porównaj sobie nasze wieki. Już nawet nie chodzi o znajomość gml'a, a o logikę i wykształcony umysł. Błądzić jest rzeczą ludzką, a ja jestem (mam nadzieję) człowiekiem ;-)

Odnośnik do komentarza
Udostępnij na innych stronach

Dalej Cię nie rozumiem.

Generalnie, z tego co napisałeś wynika, że używasz surface do "wyciemniania" rooma. Nie chcę burzyć Ci dzieciństwa, ale zwykłe draw_rectangle z użytym draw_set_alpha by rozwiązało problem.

Odnośnik do komentarza
Udostępnij na innych stronach

Dalej Cię nie rozumiem.

Generalnie, z tego co napisałeś wynika, że używasz surface do "wyciemniania" rooma. Nie chcę burzyć Ci dzieciństwa, ale zwykłe draw_rectangle z użytym draw_set_alpha by rozwiązało problem.

Mój kod wygląda mniej więcej tak (nie podam dokładnego, bo mi się akurat dysk twardy w komputerze posypał i wysiadły mi windowsy, a z internetu korzystam przez linuxa. Otóż jest sobie pewien kontroler, który sprawdza, czy energia gracza nie jest przypadkiem równa 0. ma on w create alpha ustawione na 0, i jeśli energia gracza wynosi 0, to tworzy on surface'a (żeby uniknąć odpowiedzi, że jestem debilem, w tym momencie ustawia moją zmienną screate na false, co zapobiega kilkukrotnemu tworzeniu surface'a) i dodaje on do zmiennej alpha jakąś tam wartość, dopóki alpha jest mniejsze od 1. Natomiast w draw ma on kod na rysowanie na surfejsie (i znów problemy z odmianą) czarnego prostokąta o alphie równej zmiennej alpha. Tak więc doskonale wiem, że zwykłe rysowanie prostokąta załatwia sprawę. :thumbsup:

edit: Tymon, ciekawe dyskusje można z Tobą prowadzić XD

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...