Skocz do zawartości

Pogromca_kodu77

Użytkownicy
  • Postów

    57
  • Dołączył

  • Ostatnia wizyta

Ostatnie wizyty

Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.

Osiągnięcia Pogromca_kodu77

Smart Newbie

Smart Newbie (2/13)

1

Reputacja

  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) } }
×
×
  • Dodaj nową pozycję...