Pogromca_kodu77 Opublikowano 10 Maja 2021 Udostępnij Opublikowano 10 Maja 2021 Cześć wszystkim, Mam lustro oparte na powierchni. Kiedy gracz podchodzi do lustra to tworzy się jego lustrzane odbicie oraz wszystkie stany animacji bohatera które wykonuje przy lustrze.ale do pełni szczęścia brakuje Mi dwóch rzeczy 1. Nie mogę ustawić na powierzcni lustra aby sprite pocisku też się tworzyłtak samo jak tworzy się przy spricie bohatera. Próbowałem już wielu rozwiązań i nadal sprite pocisku nie rysuje się na lustrze. 2. Chciałbym po odznaczeniu w opcjach przy obiekcie lustro opcji visible aby rysował się na dowolnych obiekcie na jakim go ustawie. Obj_lustro Draw ///lustro // rysuje sprite lustra draw_sprite(sprite_index,0,x,y); // pozycja lustra _xx = x; _yy = y; _surf = surface_create(300,200); // rozmiar lustra surface_set_target(_surf); draw_clear_alpha(c_black,0); draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5) var _xx1 = x var _yy1 = y with obj_pocisk { draw_sprite(spr_pocisk, 0, x - _xx1, y - _yy1 ); } surface_reset_target(); draw_surface(_surf,_xx,_yy); // rysuje lustro surface_free(_surf) // czyść lustro Kto mi wskaże gdzie leży błąd że nie chce mi się rysować na lustrze sprite broni? Tylko czy ktoś tu zagląda? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Maja 2021 Administratorzy Udostępnij Opublikowano 11 Maja 2021 Pamiętaj, że jak ustawisz surface, to resetuje się view i lewy górny róg to 0,0, więc trzeba odjąć offsety viewa, może tu jest problem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 12 Maja 2021 Autor Udostępnij Opublikowano 12 Maja 2021 No właśnie też pomyślałem o tym,że sprite pocisku rysuje mi się w pozycji 0,0. i dodanie tu jakichkolwiek wartości nie powoduje to,że sprite pocisku jest rysowany na lustrze ale na innej pozycji. Siedzę główkuje nad tym od kilku dni. Dobra to teraz takie pytanie...żeby ustawić offsety view to powinienem to zaimplementować już w samym surface? mam na myśli ten fragment surface _surf = surface_create(300,200); // rozmiar lustra Jak to powinno prawidłowo wyglądać? powinienem użyć zamiast funkcji draw_surface funkcję draw_surface_ext? Dziękuję Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 12 Maja 2021 Udostępnij Opublikowano 12 Maja 2021 Skoro lustro działa na bohaterze a na przycisku nie to offsety nie mają nic do tego Po mojemu to ten kod: with obj_pocisk { draw_sprite(spr_pocisk, 0, x - _xx1, y - _yy1 ); } Nie łapie sie na surface. Ja bym spróbował z: for (i = 0; i < instance_number(obj_pocisk); i += 1) { obj = instance_find(obj_pocisk, i); draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y - _yy1 ); } Pogromca_kodu77 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 12 Maja 2021 Autor Udostępnij Opublikowano 12 Maja 2021 Wiesz są jeszcze lepsze rozwiązania z shaderami..ale po co mi tłumienie itp bajery w odbiciu.Zresztą shadery są naprawdę już nie źle pokręcone. Surface w tym przypadku wydaje się łatwiejsze w implementacji. Kurcze żeby z tym pociskiem był taki problem:-( Dziwne zjawisko wychodzi przy tym kodzie poniżej..Rysuje już pocisk na powierzchni lustra..tylko jest jeden mankament. Zamiast pocisku jest rysowany sprite bohatera? kod wygląda teraz tak Obj_lustro draw ///lustro // rysuje sprite lustra draw_sprite(sprite_index,0,x,y); // pozycja lustra _xx = x; _yy = y; _surf = surface_create(300,200); // rozmiar lustra surface_set_target(_surf); draw_clear_alpha(c_black,0); draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5) var _xx1 = x var _yy1 = y with obj_pocisk { for (i = 0; i < instance_number(obj_pocisk); i += 1) { obj = instance_find(obj_pocisk, i); draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y - _yy1 ); } } surface_reset_target(); draw_surface(_surf,_xx,_yy); // rysuje lustro surface_free(_surf) // czyść lustro Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 12 Maja 2021 Autor Udostępnij Opublikowano 12 Maja 2021 edit 1 Ok działa przepraszam ja tu strzeliłem babola..zamiast rysować sprita to rysowałem obiekt;-) Podmieniłem też funkcje z draw_sprite na draw_sprite_ext aby uzyskać ten sam efekt co ze spritem bohatera czyli alpha i image_blend Musiałem też dodać linijkę with obj_pocisk { Twój kod } Jeszcze raz wielkie dzięki za pomoc;-) Mam jeszcze jedno pytanie.. zadałem je w sumie na początku tego wątku;-) Chciałbym po odznaczeniu w opcjach przy obiekcie lustro opcji visible aby rysował się na dowolnych obiekcie na jakim go ustawie. Już objaśniam w czym rzecz. Teraz lustro ma sprita o wymiarach 300x200 ale chciałbym abym mógł tego sprita nakładać na dowolny obiekt i na tym obiekcie chciałbym aby te lustro było wyświetlane i jeszcze jedna rzecz ale to już nie wiem jakby to działało na powierzchniach. Czy dałoby się np zrobić coś takiego załóżmy,że obiekt lustro ma sprita o wymiarach 32x32 i ten sprite można dowolnie rozciągać na dowolnej pozycji w pokoju gry np rozciągam go na dowolnym obiekcie na scenerii i dopasowuje go do tego obiektu i na tym fragmencie obiektu tworzy się lustro czy można to osiągnąć na surface? pewnie trzeba by było użyć bbox coś w tym rodzaju..ja tego nie robiłem,ale widziałem na necie jak ludzie wykorzystywali takie powściągliwe sprity do innych celów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 13 Maja 2021 Udostępnij Opublikowano 13 Maja 2021 Wywal całkowicie with obj_pocisk i zostaw sam for bo masz pętle w pętli i dla każdego pocisku rysowane są wszystkie pociski Jak chcesz z edytora ze skalowaniem to nie jestem pewny ale powinno dać się obliczyć wielkość surface w create z sprite_width x sprite_xscale i tak samo z Y Ale nie mogę tego potwierdzić bo w GM ostatnio cokolwiek robiłem chyba w 2015r Pogromca_kodu77 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 13 Maja 2021 Autor Udostępnij Opublikowano 13 Maja 2021 Dziękuje;-) usunąłem with faktycznie bez sensu była ta funkcja jak poniżej była pętla Hmmm... wszystko działa jak należy i na chwile obecną tak to wygląda ///lustro // rysuje sprite lustra draw_sprite(sprite_index,0,x,y); // pozycja lustra _xx = x; _yy = y; _surf = surface_create(300,200); // rozmiar lustra surface_set_target(_surf); draw_clear_alpha(c_black,0); draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5) // rysujemy pocisk na surface var _xx1 = x var _yy1 = y for (i = 0; i < instance_number(obj_pocisk); i += 1) { obj = instance_find(obj_pocisk, i); draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y - _yy1 ); } surface_reset_target(); draw_surface(_surf,_xx,_yy); // rysuje lustro surface_free(_surf) // czyść lustro No dobrze pewnie to roboty sporo by było ten edytor ze skalowaniem;-) A powiedz mi. Co muszę użyć aby lustro które mam na obiekcie mógł nakładać na dowolny obiekt na planszy? bo obecnie te lustro działa tylko na tym obiekcie w którym mam przypisany kod w zdarzeniu draw powyżej. Dziękuję ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 13 Maja 2021 Udostępnij Opublikowano 13 Maja 2021 Jak nie będziesz na końcu usuwał tego surface z pamięci funkcją surface_free() to będziesz mógł używać go gdzie ci się podoba, w dowolnym obiekcie o ile zmienną _surf zrobisz globalną. Ale mankament jest taki że trzeba się zabezpieczyć przed niespodziewanym usunięciem go z pamięci vram. Dzieje się to niezależnie od gry. Np może się wyczyścić jak zminimalizujesz grę. Jak pamięć karty graficznej dobija do końca itd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 13 Maja 2021 Autor Udostępnij Opublikowano 13 Maja 2021 Tak tylko jak nie usunę powierzchni z pamięci to nastąpi wyciek tej pamięci... A tego trzeba pilnować no dobra to sobie to odpuszczę. A mam pytanie... jak narysować na tej samej powierzchni kawałek niewidocznej scenerii która na przykład jest na przeciwko lustra,ale w rzeczywistości nie istnieje,bo to gra 2D widziana z perspektywy klasycznych platformówek jak Mario itp. Mam coś takiego na myśli gracz podchodzi do lustra jest on pokazany w lustrze jak jest teraz obecnie oraz kawałek niewidocznej nieistniejącej scenerii w lustrze która ma lub nie ma parallaxe. Jak to dokładnie mam narysować na tej samej powierzchni? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Maja 2021 Administratorzy Udostępnij Opublikowano 13 Maja 2021 Jeśli będzie jedno surface, to nie będzie wyciek. Create: global.costam = -1; Draw: if (!surface_exists(global.costam)) { global.costam = surface_create(200,200); } surface_set_target(global.costam); ... surface_reset_target(); I żadnego wycieku nie ma, oraz możesz dowolnie używać tego surface ponownie (powtarzasz tylko kod z draw, już bez create, bo wtedy właśnie byłby memory leak). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 14 Maja 2021 Autor Udostępnij Opublikowano 14 Maja 2021 Czyli ta cała jedna zmienna globalna będzie pełnić rolę podobną jak funkcja surface_free? tyle,że będę mógł użyć/przenieść powierzchnie na dowolny obiekt? Dobrze to brzmi sensownie.A takie pytanie mam chociaż już wcześniej je zadawałem. W tech chwili mam stałe parametry powierzchni 300,200 bo też taki sprite powierzchni ma wymiary i na tej powierzchni tworzy się obecnie lustro. I teraz tak: Załóżmy że lustro i sprite powierzchni ma wymiary 32x32 i mogę go rozciągać na dowolny rozmiar na planszy (room edytorze) I w miejscu gdzie nastąpi to rozciągnięcie sprita powstać ma lustro.Jak to prawidłowo zaimplementować? jest to wykonalne na surface? Powinno użyć się funkcji bbox_right + bbox_left bbox_bottom + bbox_top ? Czy może innego rozwiązania? aby jednocześnie skalowało się te lustro aby zachowało proporcje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Maja 2021 Administratorzy Udostępnij Opublikowano 14 Maja 2021 Możesz za pomocą draw_surface_part narysować tylko część. 45 minut temu, Pogromca_kodu77 napisał: Czyli ta cała jedna zmienna globalna będzie pełnić rolę podobną jak funkcja surface_free? Nie, ta zmienna będzie pilnować, żeby tylko jedno surface istniało. Surface zostaje skasowane przez GPU gdy włącza się wygaszacz albo komputer jest usypiany, lub gdy wyłączasz grę. Dlatego nie trzeba robić free w tej sytuacji, skoro i tak używasz tego surface często. surface_free raczej używa się, gdy wiesz, że już danego surface nie potrzebujesz (do końca gry, albo przez kilka sekund). Co do ponownego rysowania - jest funkcja draw_clear i draw_clear_alpha która pomaga wyczyścić surface. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 14 Maja 2021 Autor Udostępnij Opublikowano 14 Maja 2021 Rozumiem.Dzięki za objaśnienie działania tej zmiennej globalnej. Dobra pomyślałem sobie,że fajnie by było aby przedstawić na lustrze nie tylko odbicie bohatera czy też pocisk jakim strzela ale nieistniejący fragment scenerii na tym surface który np jest na przeciwko lustra fakt gra jest 2D i ta ściana nie istnieje ale załóżmy,że chce ją przedstawić w odbiciu lustrzanym dodałem taki kod do zdarzenia draw w obj_lustro var Rysuj = 0; with (obj_hero){ if distance_to_object(obj_lustro) <= 20{ Rysuj = 1; } } if Rysuj { draw_sprite_ext(spr_tlosurface,0,x ,300,image_xscale,image_yscale,0,image_blend,.5) } To nawet działa gracz podchodzi do lustra i na odpowiedniej pozycji rysuje się tło...brzmi dobrze? no nie do końca Ponieważ nie mogę ustawić głębi na tym spricie a chciałbym aby te tło które rysuje na surface było za bohaterem a nie przed bohaterem Może musiałbym użyć obiektu i tam ustawić głębię a następnie w funkcji draw_sprite_ext uwzględnić ten obiekt? I druga sprawa jak gracz podejdzie do lustra te tło pojawia się od razu,a jak uzyskać taki efekt pojawiania się ze przejściem tego tła? np zanikanie? nie wiem jak to sprecyzować Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Maja 2021 Administratorzy Udostępnij Opublikowano 14 Maja 2021 Jeśli część ma być pod, a część nad, to nie da rady na jednym surface. Pozostaje faktycznie dać drugi obiekt na innym layerze / innym depth, który jest pod wszystkim. Jeśli jednak to jest tło, to niekoniecznie trzeba używać tego samego surface, można draw_sprite_part spróbować, ale oczywiście tutaj będzie sporo zabawy w obliczenie prawidłowego rozmiaru. Może łatwiej będzie jednak to surface malować, skoro już dobrałeś parametry Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 14 Maja 2021 Autor Udostępnij Opublikowano 14 Maja 2021 Słusznie ? zostanę przy surface To jednak użyje to na obiekcie wtedy będę mógł dodać głębie. Teraz tak to będzie wyglądać mniej więcej tak? zerkniesz? var Rysuj = 0; with (obj_hero){ if distance_to_object(obj_lustro) <= 20{ Rysuj = 1; } } if Rysuj { draw_sprite_ext(obj_tlosurface.sprite_index,0,x ,300,image_xscale,image_yscale,0,image_blend,.5) } nie wiem czy też mam dodać obj_tlosurface do wartości x i y Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Maja 2021 Administratorzy Udostępnij Opublikowano 14 Maja 2021 Nie mam pojęcia jak wyglądają Twoje sprity, więc cieżko mo oceniać, czy trzeba coś przesuwać - to już musisz stwierdzić własnym wzrokiem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 14 Maja 2021 Autor Udostępnij Opublikowano 14 Maja 2021 Nie to mam na myśli ? pozycje sprite ustawie sobie. Chodzi o to,że kiedy w funkcji draw_sprite_ext odwołuje się do obiektu obj_tlosurface dodając po kropce sprite_index to nie chce mi rysować na surface sprite z tego obiektu. Musiałem też dodać funkcje instance_exists bo wywalało błąd,że taka instancja nie istnieje. Co robię tu nie tak,że nie chce mi się z tego obiektu sprite rysować? var Rysuj = 0; with (obj_hero){ if distance_to_object(obj_lustro) <= 20{ Rysuj = 1; } } if instance_exists(obj_tlosurface) { if Rysuj { draw_sprite_ext(obj_tlosurface.sprite_index,0,x ,300,image_xscale,image_yscale,0,image_blend,.5) } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Maja 2021 Administratorzy Udostępnij Opublikowano 14 Maja 2021 Nie można rysować sprite obiektu, a jedynie istniejącej instancji. Albo uzyj nazwy sprite bezpośrednio, albo zrób jakiś fallback do zmiennej tymczasowej, że jak instancja jest to weź z niej sprite a jak nie ma to jakiś jaki masz ochotę Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 14 Maja 2021 Autor Udostępnij Opublikowano 14 Maja 2021 Hmmm nie bardzo rozumiem z tą zmienną tymczasową. Mógłbyś to wyjaśnić ? Dziękuję Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 15 Maja 2021 Udostępnij Opublikowano 15 Maja 2021 Jak chcesz sprite obiektu który nie istnieje w roomie to zrób tak: if (instance_exists(obj_tlosurface)) { spriteToDraw = obj_tlosurface.sprite_index; } else { targetObject = instance_create(0,0, obj_tlosurface); spriteToDraw = targetObject.sprite_index; with (targetObject) { instance_destroy(); } } I sprite który chcesz rysować masz w zmiennej spriteToDraw Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 15 Maja 2021 Autor Udostępnij Opublikowano 15 Maja 2021 Dziękuję za pomoc:-) Mam jeszcze dwa pytania. 1. Użyłem zgodnie ze wskazówkami sprita obiektu ale nadal tło rysowane na surface jest przed odbiciem lustrzanym bohatera a powinno być za nim. głębię ustawiłem prawidłową na obiekcie obj_lustro które ma +10 a obiekt obj_tlosurface ma głębię ustawioną na +20 czyli jest dalsze niż odbicie lustrzane bohatera. 2. Jak uzyskać efekt alpha jak gracz pojawi się przy lustrze? Nie wiem jak to opisać..Tak na prosty rozum. teraz tło pojawia się od razu jak gracz podejdzie do lustra i tak ma zostać tylko aby był efekt alpha/fade lub jakiegoś przejścia delikatnego jak podejdzie do lustra i jak oddali się od lustra draw ///lustro // rysuje sprite lustra draw_sprite(sprite_index,0,x,y); // pozycja lustra _xx = x; _yy = y; _surf = surface_create(300,200); // rozmiar lustra surface_set_target(_surf); draw_clear_alpha(c_black,0); draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5) // rysujemy pocisk na surface var _xx1 = x var _yy1 = y for (i = 0; i < instance_number(obj_pocisk); i += 1) { obj = instance_find(obj_pocisk, i); draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y - _yy1 ); } //rysujemy sprite obiektu ktory nie znajdujesie w room edytorze if (instance_exists(obj_tlosurface)) { spriteToDraw = obj_tlosurface.sprite_index; } else { targetObject = instance_create(0,0, obj_tlosurface); spriteToDraw = targetObject.sprite_index; with (targetObject) { instance_destroy(); } } //rysujemy tlo na surface var Rysuj = 0; with (obj_hero){ if distance_to_object(obj_lustro) <= 20{ Rysuj = 1; } } if Rysuj { draw_sprite_ext(spriteToDraw,0,x ,300,image_xscale,image_yscale,0,image_blend,.5) } surface_reset_target(); draw_surface(_surf,_xx,_yy); // rysuje lustro surface_free(_surf) // czyść lustro Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 17 Maja 2021 Autor Udostępnij Opublikowano 17 Maja 2021 Edit 1 Ok przyczyna leżała w tym,że powinienem najpierw na surface namalować tło a następnie bohatera i pocisk.Teraz tło jest za bohaterem. Mam jeszcze to ostatnie pytanie co wcześniej zapytałem;-) Jak uzyskać efekt pojawiania się i zanikania tła na lustrze? bo teraz to jak podchodzi gracz do lustra to tło tak szybko się pojawia be przejścia i jak oddale się od lustra to tło szybko znika. Nie wiem czy dobrze to sprecyzowałem. Dziękuję Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Maja 2021 Administratorzy Udostępnij Opublikowano 17 Maja 2021 draw_sprite_ext ma parametr alfa, są też funkcje do rysowania surface z kanałem alpha, może w tę stronę ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 17 Maja 2021 Autor Udostępnij Opublikowano 17 Maja 2021 Może trzeba by było użyć zmiennej, aby kontrolować opcje alfa? Kiedy bohater znajdzie się w zakresie, powoli zwiększa się zmienną z niską wartością, aby przejść od 0 do 1. Gdy bohater wyjdzie z zakresu, zmniejsza się wartość zmiennej do 0. Chociaż to tylko pomogłoby w przypadku tła ale odbicie bohatera i pocisk nie będą miały tego efektu. Twój pomysł w sobie wydaje się być logiczny z surface z kanałem alpha. Chociaż sam już nie wiem. Tylko jak to prawidłowo zaimplementować? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Maja 2021 Administratorzy Udostępnij Opublikowano 18 Maja 2021 No to znów matematyka. Możesz np. sprawdzać odległość, załóżmy, że alpha ma się zmieniać od 123 pikseli od postaci (podaję taką dziwną liczbę, żeby lepiej było to widać w działaniu). var dist = distance_to_point(lustro_x, lustro_y, bohater.x, bohater.y); var alpha = 1 - clamp(dist/123, 0, 1); // można też np.: // var alpha = 1 - min(1, dist/123); // itd. itp. draw_sprite_ext(......, alpha); // czy tam draw_suface_ext, obojętnie Pogromca_kodu77 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 19 Maja 2021 Autor Udostępnij Opublikowano 19 Maja 2021 Dziękuję. Nasunęło mi się jeszcze jedno pytanie bo wcześniej nie brałem tego pod uwagę. Używam w grze widoków. Mam parallaxe na każdej scenerii i też na tej gdzie umieściłem lustro. Sprite używam jako tła aby operować głębią. Tło na którym jest umieszczone lustro używa też parallaxy i tą parallaxe ustawiłem też na obiekcie lustra tak aby dawało to wrażenie,że lustro jest wtopione w tło ruchome Jednak mam pewien problem.Kiedy tło z lustrem się porusza to stworzone przeze mnie rozmiar lustra surface_create jest cały czas w tej samej pozycji. Powinno tak samo poruszać się z tą samą prędkością z wtopionym tłem z lustrem. Próbowałem do surfce dodać widoki,ale to nic nie pomaga. Teraz wygląda to tak jakby za lustrem z lewej strony tworzyło się już lustro na części tła gdzie jeszcze nie ma lustra. Nie wiem czy dobrze to wyjaśniłem... Kod wygląda tak i zaznaczyłem gdzie jest parallaxa obj_lustro draw ///lustro // rysuje sprite lustra //draw_sprite(sprite_index,0,x,y); // lustro przesuwa sie z tą samą prędkością co tło na którym jest te lustro wtopione if instance_exists(obj_hero) { draw_sprite(sprite_lustro,image_index,x+view_xview/7.5,y+view_yview/7.5) } // pozycja lustra _xx = x; _yy = y; _surf = surface_create(300,200); // rozmiar lustra surface_set_target(_surf); draw_clear_alpha(c_black,0); draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x+view_xview/7.5 - _xx ,obj_hero.y+view_yview/7.5 - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5) // rysujemy pocisk na surface var _xx1 = x var _yy1 = y for (i = 0; i < instance_number(obj_pocisk); i += 1) { obj = instance_find(obj_pocisk, i); draw_sprite(spr_pocisk, 0, obj.x+view_xview/7.5 - _xx1, obj.y+view_yview/7.5 - _yy1 ); } //rysujemy sprite obiektu ktory nie znajdujesie w room edytorze if (instance_exists(obj_tlosurface)) { spriteToDraw = obj_tlosurface.sprite_index; } else { targetObject = instance_create(0,0, obj_tlosurface); spriteToDraw = targetObject.sprite_index; with (targetObject) { instance_destroy(); } } //rysujemy tlo na surface var Rysuj = 0; with (obj_hero){ if distance_to_object(obj_lustro) <= 20{ Rysuj = 1; } } if Rysuj { draw_sprite_ext(spriteToDraw,0,x+view_xview/7.5 ,300+view_yview/7.5,image_xscale,image_yscale,0,image_blend,.5) } surface_reset_target(); draw_surface(_surf,_xx,_yy); // rysuje lustro surface_free(_surf) // czyść lustro Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 19 Maja 2021 Administratorzy Udostępnij Opublikowano 19 Maja 2021 A weź daj jakiegoś screena bo ja kompletnie nie umiem sobie tego wyobrazić z opisu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 19 Maja 2021 Autor Udostępnij Opublikowano 19 Maja 2021 Tak to opisałem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 19 Maja 2021 Autor Udostępnij Opublikowano 19 Maja 2021 Myślę,że tu rozwiązałoby problem aby wymusić tą pozycje obiektu lustra taką samą jak jest wyłączona parallaxa na obiekcie lustro. Ja rozumiem,że lustro będzie się poruszać przy parallaxie ale zastanawia mnie to dlaczego pozycja obiektu lustra się zmienia w room edytorze to jest ten problem. O dziwo wszystko idealnie jest ze sobą zgrane jak nie mam ruchomego tła a na nim ruchome lustro poruszające się z tą samą prędkością co tło dające efekt jakby to lustro było element tła wtopionego na tle 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ę