Skocz do zawartości

Rekomendowane odpowiedzi

Zastosowanie surface i draw_primitive:

 

cloak2.gmk

 

Jeśli komuś się przyda to będzie mi miło.  :thumbsup:

 

 

 

 

UPDATE:

 

Ulepszona wersja.

 

 

Optymalizacja kodu i usunięcie błędu. Jest teraz możliwość wyłączenia i aktualizacji "refrakcji" co kilka kroków.

 

 

 

 

 

UPDATE:

 

Tak jak obiecałem wersja szybsza, dodatkowo poprawione przenikanie instancji niewidzialnych obiektów(wygląda teraz znośnie):

 

cloak3.gmk

 

 

Dla tych, którzy nie mają GM7:

 

cloak3.zip

 

 

 

UPDATE:

 

Znalazłem trochę czasu i poprawiłem przykład.

 

Ta wersja jest wolniejsza od poprzedniej, ale teraz możliwy jest dowolny kierunek i skala sprite'a, wielkość i tło room'u.

 

cloak4.gmk

 

Wersja exe:

 

cloak4.zip

Odnośnik do komentarza
Udostępnij na innych stronach

Średni przykładzik. Same zniekształcenia są ładne, przechodzenie z normalnego widoku nie niewidzialny wymiata, ale za to niewidzialny pojazd nawet, gdy porusza się może 5px/s już dziwnie drga, co psuje efekt, no i wydajność pozostawia wiele do życzenia.

 

Ale masz tak z 7-/10 :)

Odnośnik do komentarza
Udostępnij na innych stronach

A więc tak:

-efekt 4/5

-fps'y 1/5

Efekt fajny choć nie za dobry. Nie użyję tego w mojej grze bo raczej jak będę miał 20 takich pojazdów to fps'y będę się kręcić tak około 1, może 0,5, a może 2.

Zapomniałem wspomnieć. Można przyspieszyć efekt, zmniejszając wartość divide w evencie create obiektu oController.

 

Nie wiem jak działa to na słabszych komputerach. Spróbuję zrobić efekt dla wielu obiektów, który nie powinien być wiele wolniejszy, bo można pewne rzeczy liczyć tylko raz. Przykład nie jest też za bardzo zoptymalizowany.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
___________________________________________

FATAL ERROR in

action number 1

of End Step Event

for object oShip:

 

COMPILATION ERROR in code action

Error in code at line 13:

sprite_back = sprite_create_from_surface(surface, bbox_left, bbox_top, bbox_right - bbox_left, bbox_bottom - bbox_top, true, true, true, true, sprite_xoffset, sprite_yoffset);

^

at position 183: Wrong number of arguments to function or script.

Odnośnik do komentarza
Udostępnij na innych stronach

Zastąp ten kod tym:

GML
sprite_back = sprite_create_from_surface(surface, bbox_left, bbox_top, bbox_right - bbox_left, bbox_bottom - bbox_top, true, true, sprite_xoffset, sprite_yoffset);

Dlaczego muszę sam sprawdzać ilość argumentów?

Odnośnik do komentarza
Udostępnij na innych stronach

efekt jest bardzo fajny i dałbym 5/5 gdybym wcześniej nie dał 1/5 za konieczność poprawiania :P Jak ktoś dodaje przykład niech go zrobi w GM8 i GM7

cholera farkraj pocałuj sie w dupe leniu śmierdzący ;/ przecież podał ci poprawny kod, usuń 2 true w 2 funkcjach i tyle!

Odnośnik do komentarza
Udostępnij na innych stronach

Update przykładu:

 

http://www.gmclan.org/up6168_12_cloak2.html

 

Ze względu na powolność funkcji sprite_create_from_surface() jest możliwość aktualizacji tła co kilka kroków(klawisze a, z). Można też wyłączyć całkiem "refrakcję" aby zobaczyć jak to spowalnia. Niestety efekt nie działa dla kilku przenikających się obiektów.

 

Przykład jest dla GM7(konwersja do 8 chyba nie jest takim problemem? :jezor: ) i oczywiście pozwalam na użycie kodu w swoich produkcjach.

Odnośnik do komentarza
Udostępnij na innych stronach

Szkoda że to takie wolne, bo efekt jest ładny, ale już przy tempie odświerzania >1 przy poruszaniu zaczyna strasznie mrugać, a przy poruszaniu 1 z kolei efekt jest ładny, ale tak wolny, że jego użycie nie miało by sensu w żadnej grze.

 

Nie chce mi się analizować kodu teraz, ale po kija Ty tu w ogóle tworzysz sprite O.o ? Masz surfejsa, i możesz operować od razu na nim, po co tworzyć jego kopię jako sprite, skoro na surfejsie możesz zrobić dokładnie to samo, co na tym spricie.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie chce mi się analizować kodu teraz, ale po kija Ty tu w ogóle tworzysz sprite O.o ? Masz surfejsa, i możesz operować od razu na nim, po co tworzyć jego kopię jako sprite, skoro na surfejsie możesz zrobić dokładnie to samo, co na tym spricie.

 

:blink:  <facepalm> racja....

 

Masz łeb, dzięki.

 

Niedługo update, gdzieś około 100 razy szybszy :jezor: .

Odnośnik do komentarza
Udostępnij na innych stronach

To i ja zrobię taki przykładzik, i zobaczymy, kto wydajniej, który wygra zostanie dodany jako przykład na portalu :)

Ed: Gotowe. Bez optymalizacji 1k fps. Jeszcze tylko powywalam niepotrzebny kod, jakoś ogarnę całość, okomentuję i czekam na Twoją wersję :)

Ed: Dobra, kod ogarnięty.

Odnośnik do komentarza
Udostępnij na innych stronach

To i ja zrobię taki przykładzik, i zobaczymy, kto wydajniej, który wygra zostanie dodany jako przykład na portalu :)

Ed: Gotowe. Bez optymalizacji 1k fps. Jeszcze tylko powywalam niepotrzebny kod, jakoś ogarnę całość, okomentuję i czekam na Twoją wersję :)

Ed: Dobra, kod ogarnięty.

Konkursy szybkopisania nie są ci chyba obce :P.

 

 

Update w pierwszym poście.

Odnośnik do komentarza
Udostępnij na innych stronach

Maximal, kurka wodna, jak napisałem, że mam zamiar zrobić drugą wersję tego, to trzeba było poczekać ten jeden dzień przed dodaniem :/

Jak chciałeś dodać oba (no jednak, przykład Dacusa jest bardziej efektowny, ja prezentowałem sposób, nie efekt przejścia pojazdu do niewidzialności), to też trzeba było poczekać, by się jeden news zrobiło (ja Twojego edytować nie mogę, ew. złączyć je możesz).

 

W każdym razie - patent na przesuwanie fragmentów surfejsów zamiast primitivów wygrał :)

Twój - 506-510

Mój - 1375-1388

 

Jednoczesnego zniekształcania wielu pojazdów nie implementowałem - sposób tutaj użyty jest niestety niezbyt praktyczny - jak dla takiego ekranu można spokojnie zniekształcić wszystko naraz (tzn. przyjmuję że zniekształcasz cały ekran jednocześnie, osobne pojazdy jedynie wyświetlają odpowiednie fragmenty), to już dla gry, w której plansza ma dużo większe rozmiary mijało by się to niestety z celem.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja czy on?

Jak ja to w pierwzsym malowaniu na surfejsie iwave bloczka dodaj do pozycji rysowania tła pozycje viewa.

Ed: I jak to jest tam malowane w drawie a nie stepie to wszystko oprócz draw_surface() walnij do stepa, bo to powoduje bugi z viewami.

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ę...