Skocz do zawartości

Pogromca_kodu77

Użytkownicy
  • Postów

    57
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Pogromca_kodu77

  1. Wersji póki co używam gms 1.4 a tam nie ma funkcji camera_apply(view_camera[0]) No dobra teraz do rzeczy bo zwątpiłem już całkiem;-) Zacząłem kod rozbijać na fragmenty i analizować co jest nie tak,że kiedy zaimplementuje parallaxe na obiekcie lustro i na pozycji surface,to odbicie lustrzane zaczyna się trochę przed lustrem i kończy się zanim skończy się krawędź lustra. To jest dziwna sytuacja,bo takiego zjawiska nie mam kiedy wyłączę parallaxe na lustrze i na surface wtedy odbicie lustrzane bohatera zaczyna się na krawędziach lustra. Ktoś mógłby mi pomóc rozwiązać ten problem? Wiadomo,że ma to miejsce z tym,że pozycja lustra po włączeniu parallaxy jest inna niż przy wyłączonej parallaxy i to musi powodować,że odbicie zaczyna się przed lustrem a nie w lustrze i kończy zanim lustro się skończy. Gnysek wspomniałeś że kod mógłby znajdować cię w zdarzeniu step tylko,że jak mam coś narysować nie używając zdarzenia draw? Ok zamieszczę jeszcze raz tu kod lustra jeden bez parallaxy który działa idealnie i dobicie jest na swoim miejscu,a drugi z parallaxą gdzie pomimo włączenia jej na surface i lustrze odbicie lustrzane bohatera jest przesunięte. obj_lustro bez parallaxy draw ///lustro // rysuje sprite lustra draw_sprite(sprite_lustro,image_index,x,y) // pozycja lustra _xx = x; _yy = y; _surf = surface_create(935,378); // 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+32 ,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+32, obj.y - _yy1-70 ); } surface_reset_target(); draw_surface(_surf,_xx,_yy); // surface_free(_surf) // czyść lustro obj_lustro z parallaxą draw ///lustro // rysuje sprite lustra // 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(935,378); // 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+32 ,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+32, obj.y+view_yview/7.5 - _yy1-70 ); } surface_reset_target(); draw_surface(_surf,_xx+view_xview/40,_yy+view_yview/40); // rysuje lustro dodana parallaxa musiałem zwiększyć wartość aby odbicie //lustrzane gracza nie goniło gracza surface_free(_surf) // czyść lustro Dziękuję
  2. Może to być problem tu argument1+argument7, ale sam nie wiem.Musiałbyś pokombinować. Łączysz argument7 który jest alpha z argumentem1 który jest y. Może ktoś bardziej doświadczony będzie Ci wstanie pomóc.
  3. Wielki Inkwizytorze Gnysku Czyli mój kod musiałbym przenieść do zdarzenia Step żeby uzyskać ten efekt przesunięcia obiektu lustro i przesunięcia pozycji surface. No dobrze,ale funkcje draw i draw_surface powinny znajdować się w zdarzeniu draw tak? w Step co dokładnie powinno się znaleźć aby rozwiązać ten problem co opisałem powyżej aby lustro jak i surface równo poruszało się z graczem i nie ucinało odbicia w lustrze a ni nie wyjeżdżało po za lustro odbicie gracza obj_lustro draw ///lustro // rysuje sprite lustra // 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 ); } surface_reset_target(); draw_surface(_surf,_xx+view_xview/40,_yy+view_yview/40); // rysuje lustro dodana parallaxa musiałem zwiększyć wartość aby odbicie //lustrzane gracza nie goniło gracza surface_free(_surf) // czyść lustro
  4. To może inaczej to wyjaśnie w czym problem. Kiedy nie ustawie parallaxy na lustrze i surface to wszystko jest w porządku i obiekt lustro zbajduje się dokładnie w tym miejscu w którym ustawiłem go w room edytorze a odbicie bohatera jest idealnie ustawione. Natomiast kiedy ustawie parallaxe na obiekcie lustro ponieważ te lustro jest wtopione w tło i oba poruszają się w tym samym kierunku z tą samą prędkością(używam xview i yview w grze) I taka samą parallaxe ustawie przy funkcji draw surface w obiekcie lustro to kiedy uruchomie gre pozycja obiektu lustra jest inna niż ustawiłem ten obiekt w room edytorze.Lustro od razu jest przesunięte w prawą stronę. Dlatego muszę je o spory kawałem w room edytorze przesunąć w lewo aby jego pozycja startowa w trakcie gry była w miejscu w jakim ustawiłem lustro przy wyłączonej parallaxy. Czy istnieje sposób może żeby wymusić stałą pozycje startową obiektu lustra tak abym przy włączonej parallaxy nie musiał go przesuwać w room edytorze w lewo?? Ktoś wie z was jak rozwiązać ten problem? Mam nadzieje,że teraz to w dość zrozumiały sposób opisałem. Dziękuję
  5. Może na skróty uprościłem poniżej kod do i zobrazowałem to na rysunku poniżej o co mi chodzi parallaxa tła i obiektu lustra ma te same wartości czyli /7.7 dla x i y Natomiast na draw surface zmniejszyłem te wartości dzieląc x i y na /40 wiem wiem duża cyfra,ale teraz powiedzmy,że lustrzane odbicie stara się trzymać stałą odległość od gracza w pozycji x i y.Chociaż nie mam pewności czy tak to powinno być że musiałem użyć tak dużych wartości aby zachować stałą odległość gracza od lustrzanego odbicia gracza na lustrze. A co zrobić kiedy idę w prawo to odbicie bohatera kończy się za nim się obiekt lustro skończy.Może niewiele ale się kończy. O dziwo z lewej strony jest ok. Czy jest też inny sposób aby dodać z prawej strony taki nie wiem offset o ile dobrze myślę aby nie ucinało lustra i aby te odbicie bohatera zawsze zaczynało się zarówno z lewej jak i z prawej strony na krawędziach obiektu lustra? ///lustro // rysuje sprite lustra // 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 ); } surface_reset_target(); draw_surface(_surf,_xx+view_xview/40,_yy+view_yview/40); // rysuje lustro dodana parallaxa musiałem zwiększyć wartość aby odbicie //lustrzane gracza nie goniło gracza surface_free(_surf) // czyść lustro
  6. Hmmmm..po części to rozwiązuje problem..ale jest pewne zjawisko.. Co jest przyczyną,że używając tych samych wartości /7.5 na surface odbicie lustrzane bohatera próbuje go przegonić jak idę w prawo a jak idę w lewo próbuje go dogonić,a powinno poruszać się z taką samą wartością jak było bez parallaxy. Kod wygląda teraz tak.. Dodałem do draw surface parallaxe jest też dodana do bohatera i pocisku obj_lustro ///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+view_xview/7.5,_yy+view_yview/7.5); // rysuje lustro dodana parallaxa surface_free(_surf) // czyść lustro
  7. Masz na myśli to? draw_surface(_surf,_xx+view_xview/7.5,_yy+view_yview/7.5);
  8. 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
  9. 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
  10. 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ć?
  11. 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ę
  12. 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
  13. Hmmm nie bardzo rozumiem z tą zmienną tymczasową. Mógłbyś to wyjaśnić ? Dziękuję
  14. 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) } }
  15. 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
  16. 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ć
  17. 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.
  18. 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?
  19. 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ę ?
  20. 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.
  21. 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
  22. 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ę
  23. 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?
  24. Cześć chłopaki..Potrzebuje pomocy..Nie mogę sobie poradzić z blokiem kodu...Już tłumaczę o co chodzi..Mam trzy bloki takie same kodu w zdarzeniu step bohatera no i tak.. 1 blok jest to atak bohatera który strzela podczas stania i podczas biegania.. 2.blok kodu to atak bohatera który strzela podczas skoku 3 blok kodu to atak bohatera który strzela kiedy znajduje się na drabinie.. Chciałbym wrzucić te trzy same bloki kodu w jeden blok uwzględniając zmiany spritów i warunki,że jeśli jest na drabinie to używa tego sprita,że jeśli strzela podczas skoku to używa tego sprita..że jeśli strzela podczas stania i biegu używa tego sprita.. Tak wyglądają moje bloki kodu. Proszę wybaczcie,że wkleiłem aż trzy bloki kodu Siedzę nad tym i nie mogę to dobrze ze sobą poskładać.. Mógłbym prosić o pomoc? Bardzo dziękuje z góry za każdą pomoc //bohater strzela podczas stania i biegu var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać if keyboard_check_pressed(vk_control) && czasAtaku <= 0 && wPowietrzu=false && (global.wep[cur,e_wep.ammo] > 0 || global.wep[cur,e_wep.ammo] == -1) { czasAtaku = global.wep[cur,e_wep.firerate]; czasAtaku = _attackTime; czasBierzacy =1; with instance_create(x,y,attack) { sprite_index = spr_bohater_strzela; image_xscale = other.image_xscale; } var box, ins; if image_xscale == -1 box = bbox_left; else box = bbox_right; if (global.wep[cur,e_wep.ammo] >= 1) // jeśli nie nieskończona amunicja { global.wep[cur,e_wep.ammo]-=1; } var ins = instance_create(box+image_xscale*42, y-17,global.wep[cur,e_wep.ammo_type] ); ins.hspeed = image_xscale * 15; ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]); ins.sprite_index = paintballs[paintball_color++]; //nowa linijka do wyboru kolorow kulki paintball_color &= 3; audio_play_sound(global.wep[cur,e_wep.ammo_sound],10,false) } //bohater strzela podczas skoku i skoku var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać if keyboard_check_pressed(vk_control) and keyboard_check(vk_space) && czasAtaku <= 0 && (global.wep[cur,e_wep.ammo] > 0 || global.wep[cur,e_wep.ammo] == -1){ czasAtaku = global.wep[cur,e_wep.firerate]; czasAtaku = (_attackTime * 0.5); czasBierzacy =1; with instance_create(x,y,attack) { sprite_index = spr_bohater_strzelawskoku; image_xscale = other.image_xscale; } var box, ins; if image_xscale == -1 box = bbox_left; else box = bbox_right; if (global.wep[cur,e_wep.ammo] >= 1) // jeśli nie nieskończona amunicja { global.wep[cur,e_wep.ammo]-=1; } var ins = instance_create(box+image_xscale*50, y-25,global.wep[cur,e_wep.ammo_type] ); ins.hspeed = image_xscale * 15; ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]); ins.sprite_index = paintballs[paintball_color++]; //nowa linijka do wyboru kolorow kulki paintball_color &= 3; audio_play_sound(global.wep[cur,e_wep.ammo_sound],10,false) } //bohater strzela kiedy znajduje się na drabinie var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać if keyboard_check_pressed(vk_control) and keyboard_check(vk_space) && czasAtaku <= 0 && drabina==true && place_meeting(x,y,obj_drabina) && (global.wep[cur,e_wep.ammo] > 0 || global.wep[cur,e_wep.ammo] == -1){ czasAtaku = global.wep[cur,e_wep.firerate]; czasAtaku = (_attackTime * 0.5); czasBierzacy =1; with instance_create(x,y,attack) { sprite_index = spr_bohater_strzelanadrabinie; image_xscale = other.image_xscale; } var box, ins; if image_xscale == -1 box = bbox_left; else box = bbox_right; if (global.wep[cur,e_wep.ammo] >= 1) // jeśli nie nieskończona amunicja { global.wep[cur,e_wep.ammo]-=1; } var ins = instance_create(box+image_xscale*50, y-25,global.wep[cur,e_wep.ammo_type] ); ins.hspeed = image_xscale * 15; ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]); ins.sprite_index = paintballs[paintball_color++]; //nowa linijka do wyboru kolorow kulki paintball_color &= 3; audio_play_sound(global.wep[cur,e_wep.ammo_sound],10,false) }
×
×
  • Dodaj nową pozycję...