Pogromca_kodu77 Opublikowano 25 Lipca 2020 Udostępnij Opublikowano 25 Lipca 2020 Dzień dobry wszystkim, Od pewnego czasu borykam się z kilkoma problemami. Mam na myśli drabinę. Korzystałem z różnych samouczków w sieci,ale mimo to nie mogę rozwiązać tych problemów. A teraz jaśniej. Problem 1 Drabina na pozór działa dobrze..Mogę po niej wchodzić i schodzić. Żeby z niej nie spaść użyłem trwałego obiektu który nanoszę na górną krawędź drabiny następnie ten obiekt trwały sparowałem z drabiną i problem powierzchownie rozwiązany. czemu piszę że powierzchownie? Bo jest mały problem...kiedy nacisnę krótko przycisk dół na klawiaturze to mój bohater spada z drabiny na najbliższe podłoże solid ; natomiast kiedy przytrzymam dłużej klawisz dół to schodzi normalnie z drabiny. Nie mam pojęcia jak to naprawić żeby mógł normalnie schodzić bez względu czy nacisnę krótko klawisz dół czy też długo. Problem 2 Nie wiem,czy tu akurat wina jest źle ustawionego sprita bohatera,ale kiedy wejdę już na szczyt drabiny to mimo że już jestem na górze,to jeszcze przez chwilę mój sprite wspina się. Komicznie to wygląda... Próbowałem w ustawieniach spritach zmienić pozycję x i y sprite...ale to nie pomaga.. Problem 3 Mój bohater będąc na drabinie ma możliwość ataku w postaci strzału z pocisku. używam tu dodatkowo sprite ataku na drabinie który w chwili wystrzelenia pocisku pokazuje się. I tu jest mały kłopot...Kiedy wykonam strzał bohaterem na drabinie to za nim pocisk się nie rozbije o cokolwiek to kiedy poruszam lewo prawo bohaterem to zamiast zmienić się sprite bohatera na wchodzącego po drabinie,to pokazuje się przez chwilę jeszcze sprite ataku na drabinie oczywiście źle to wygląda,bo on suwa się góra dół... Tu poniżej kod mojej drabiny. Pomijam większość,żeby nie wklepywać bezsensownie wszystkiego.. obj_bohater Step //Ruch bohaterem if drabina == false { if key_check_pressed(key.jump) && wPowietrzu == false { vspd = -10-sign silaSkoku = 4; if key_check(key.down) && place_meeting(x,y+1,par_objekt_trwaly)//obiekt dziedziczacy z drabina aby bohater nie spadl z drabiny { y += 4; vspd = 0; silaSkoku = 0; czasSkoku = 0; } } //Drabina if place_meeting(x,y,par_drabina) && place_meeting(x,y-32,par_drabina) && place_meeting(x,y+5,par_drabina) && czas <= 0 && (key_check(key.up) || key_check(key.down)) { drabina = true; vspd = 0; hspd = 0; } } //Ruch po drabinie if drabina == true { var __hsign = key_check(key.right)-key_check(key.left); var __vsign = key_check(key.down)-key_check(key.up); hspd = min(max(hspd+__hsign,-2),2); vspd = min(max(vspd+__vsign*2,-4),4); if __vsign == -1 && !place_meeting(x,y-32,par_drabina) { drabina = false; vspd = -10; } if __hsign != 0 { image_xscale = __hsign; } if !place_meeting(x,y,par_drabina) || !place_meeting(x,y+32,par_drabina) { drabina = false; } } // animacja bohatera wchodzacego na drabinie i odpoczywajacego if drabina == true { if x == xprevious && y == yprevious { if sprite_index != spr_bohater_odpoczywanadrabinie { sprite_index = spr_bohater_odpoczywanadrabinie; } } else { if sprite_index != spr_bohater_wchodzipodrabinie { sprite_index = spr_bohater_wchodzipodrabinie; } } } ////Bohater atakuje z drabiny if keyboard_check_pressed(ord('X')) && drabina==true && czas == false && place_meeting(x,y,par_drabina) && instance_number(objPocisk) < 3 { czas = 30; atak = 1; with instance_create(x,y,par_ataku) { sprite_index = spr_bohater_strzela_na_drabinie; image_xscale = other.image_xscale; { var box, ID; if image_xscale == -1 box = bbox_left; else box = bbox_right; ID = instance_create(box+image_xscale*-10, y-17, objPocisk); ID.hspeed = image_xscale * 15; } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Lipca 2020 Administratorzy Udostępnij Opublikowano 26 Lipca 2020 Trochę za duzo kodu do analizy, nie chce mi się przyglądać. Ale na drugi problem to bym dodał sprawdzanie czy drabina jest pod bohaterem i kilka pikseli wyżej, to powinno załatwić sprawę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 26 Lipca 2020 Autor Udostępnij Opublikowano 26 Lipca 2020 Dziękuję za sugestie. Problem 1 udało Mi się wczoraj naprawić oraz w połowie Problem 2 W pierwszym przypadku wystarczyło ustawić wartość inną wartość Y z +5 na +1 Podobnie jak w przypadku 2.Tu problem okazał się dość banalny. Wartość y ustawiłem z-32 na -100 Teraz bohater kiedy wejdzie na drabinie to na jej szczycie kończy animacje i zmienia swój stan na sprite stojącego. Tu zostało Mi do ustawienia bohatera w drugą stronę czyli bohater schodzący z drabiny. Otóż..kiedy próbuje zejść bohaterem z drabiny to jego sprite zaczyna schodzić nie od szczytu drabiny tylko o pare punktów wyżej.. Mówiąc wprost i jaśniej..kiedy jestem nad drabiną to w chwili kiedy nacisnę kursor dół to bohater powiniem złapać się górnej krawędzi drabiny.. A teraz on znacznie wyżej łapie się drabiny.. Ciężko Mi to ustawić...siedzę już 2 dzień nad tym. Moje pomysły wyczerpały się... Próbowałem w opcjach roomu zmienić wartość hsp i vsp z -1 na 15. Generalnie to pomogło teraz ekran nie przeskakuje uporczywie jak próbuje zejść po drabinie..Sprite płynnie zmienia swoje położenie...od razu łapie się górnej granicy drabiny. Mimo to te rozwiązanie nie do końca jest dobre,ponieważ mam na planszy ruchome obiekty i teraz te obiekty nie nadążają za graczem. Może jest inny sposób żeby ustawić sprite bohatera jak jest nad drabiną że przy naciśnięciu przycisku dół od razu chwytał górną część drabiny. //Drabina if place_meeting(x,y,par_drabina) && place_meeting(x,y-32,par_drabina) && place_meeting(x,y+1,par_drabina) && czas <= 0 && (key_check(key.up) || key_check(key.down)) { drabina = true; vspd = 0; hspd = 0; } } //Ruch po drabinie if drabina == true { var __hsign = key_check(key.right)-key_check(key.left); var __vsign = key_check(key.down)-key_check(key.up); hspd = min(max(hspd+__hsign,-2),2); vspd = min(max(vspd+__vsign*2,-4),4); if __vsign == -1 && !place_meeting(x,y-100,par_drabina) { drabina = false; vspd = -10; } if __hsign != 0 { image_xscale = __hsign; } if !place_meeting(x,y,par_drabina) || !place_meeting(x,y+32,par_drabina) { drabina = false; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 27 Lipca 2020 Autor Udostępnij Opublikowano 27 Lipca 2020 Jednak moje szczęście nie trwało długo.. Wyzbyłem się platformy którą nakładam na drabinie w celu stałego podłoża aby sprite bohatera nie spadł z górnej krawędzi drabiny. Teraz kiedy jest sama drabina,to w chwili kiedy znajdę się bohaterem na górze drabiny to naciskając przycisk dół to spada bohater. Próbowałem użyć gravity...ale coś źle robię.. Proszę was o pomoc..jak na podstawie wyżej kodu ustawić aby gracz nie spadał z górnej krawędzi drabiny. I naciskając przycisk dół dłużej lub krócej od razu chwytał się górnej krawędzi drabiny.. Dziękuję za każdą pomoc...sugestie.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Flashek Opublikowano 28 Lipca 2020 Udostępnij Opublikowano 28 Lipca 2020 ojeju najlepiej napisz to od nowa albo dawaj na priv Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 28 Lipca 2020 Autor Udostępnij Opublikowano 28 Lipca 2020 Dobrze już piszę na priv do Ciebie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Lipca 2020 Administratorzy Udostępnij Opublikowano 28 Lipca 2020 Yep, to generalnie nie jest proste zagadnienie i wymaga ściany kodu, więc ciężko się taki problem rozwiązuje. Trzeba spojrzeć szerzej, zajrzeć w projekt itd. Ja niestety aż tyle czasu nie znajdę, jak jakiś mam, to staram się naprowadzać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 28 Lipca 2020 Autor Udostępnij Opublikowano 28 Lipca 2020 W porządku:-) Do kolegi wyżej napisałem. Pogrzebałem troche w kodzie i udało mi się rozwiązać problem ze spadającą drabiną.. Stworzyłem zmienna w create Coś takiego trzymaniesiedrabiny = false; Następnie w Stepie wywaliłem przy drabinie dół i dałem tą zmienną. I w końcu w Stepie dałem żeby zmienna przy drabinie i przycisku dół była false a potem true:-) Nie spada bohater ale jak zejde z drabiny i jestem na dole na solidzie to chwile sprite bohatera jest jakby przez coś trzymany..Mogę nogani przebierać..ale coś go trzyma przez chwile..i w końcu może chodzić i wszystko zaczyna działać.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 1 Sierpnia 2020 Autor Udostępnij Opublikowano 1 Sierpnia 2020 Dobra... W końcu podgarnołem. Bohater teraz nie spada z drabiny. Ale zostały Mi dwie rzeczy do zrobienia. 1. Bohater jak jest przy drabinie po naciśnięciu przycisku dół chwyta się,ale nie górnej części drabiny tylko nad drabiną.. Dziwnie to wygląda.Mam sprita 128x128 pewnie przez to.. 2. Obj_podloze powoduje zblokowanie na ułamek sekundy sprita bohatera który zejdzie z drabiny i dotknie tego podłoża.. Nie wiem moze trzeba dac jakis warunek żeby sprawdzał podłoże? Jak dotknie gracz po zejściu drabiny obj_podloze. Kod teraz wygląda tak Create Zejsciezdrabiny = false; //bohater juz nie spada z drabiny if place_meeting(x,y,par_drabina) && key_check(key.down) { zejsciezdrabiny = true; } if place_meeting(x,y,par_drabina) { zejsciezdrabiny = false; } //bohater kiedy zetknie sie z ziemia //obj_podloze to puszcza drabine if place_meeting(x,y,par_drabina) && drabina = true && place_meeting(x,y+2,obj_podloze) { drabina = false; } if place_meeting(x,y,par_drabina) && place_meeting(x,y-32,par_drabina) && place_meeting(x,y+1,par_drabina) && czas <= 0 && (key_check(key.up) || zejsciezdrabiny)) { drabina = true; vspd = 0; hspd = 0; } } //Ruch po drabinie if drabina == true { var __hsign = key_check(key.right)-key_check(key.left); var __vsign = key_check(key.down)-key_check(key.up); hspd = min(max(hspd+__hsign,-2),2); vspd = min(max(vspd+__vsign*2,-4),4); if __vsign == -1 && !place_meeting(x,y-100,par_drabina) { drabina = false; vspd = -10; } if __hsign != 0 { image_xscale = __hsign; } if !place_meeting(x,y,par_drabina) || !place_meeting(x,y+32,par_drabina) { drabina = false; } } Czy ktoś z was mógłby Mi pomóc z tymi dwoma wyżej rzeczami? Dziękuję. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Sierpnia 2020 Administratorzy Udostępnij Opublikowano 3 Sierpnia 2020 Widzę kilkanaście razy place_meeting(x,y,par_drabina), dlaczego nie przypiszesz tego do jakiejś zmiennej (tymczasowej), oraz nie wrzucisz w jeden warunek wszystkiego, co wymaga, aby ten warunek był spełniony? to by zwiększyło czytelność kodu, może wtedy znajdziesz swój błąd, zobacz: //bohater juz nie spada z drabiny if place_meeting(x,y,par_drabina) { zejsciezdrabiny = false; if (key_check(key.down)) { zejsciezdrabiny = true; } //bohater kiedy zetknie sie z ziemia //obj_podloze to puszcza drabine if (drabina = true && place_meeting(x,y+2,obj_podloze)) { drabina = false; } if (place_meeting(x,y-32,par_drabina) && place_meeting(x,y+1,par_drabina) && czas <= 0 && (key_check(key.up) || zejsciezdrabiny)) { drabina = true; vspd = 0; hspd = 0; } } //Ruch po drabinie if drabina == true { var __hsign = key_check(key.right) - key_check(key.left); var __vsign = key_check(key.down) - key_check(key.up); hspd = min(max(hspd+__hsign,-2),2); vspd = min(max(vspd+__vsign*2,-4),4); if __vsign == -1 && !place_meeting(x,y-100,par_drabina) { drabina = false; vspd = -10; } if __hsign != 0 { image_xscale = __hsign; } if !_na_drabinie || !place_meeting(x,y+32,par_drabina) { drabina = false; } } Poza tym, chyba nie pozostaje nic innego jak sobie za pomoca draw wyświetlać na ekranie wartości wszystkich zmiennych których używasz i wtedy zobaczyć, co w momencie gdy masz złą grafikę jest ustawione i będziesz wiedzieć, jaki przypadek obejść. Inaczej - trochę ciężko to będzie rozwiazać, bo to już jest problem mający w zależnościach wiele innych danych z gry których nie mamy i zrobiło się nieco zbyt kompleksowo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pogromca_kodu77 Opublikowano 3 Sierpnia 2020 Autor Udostępnij Opublikowano 3 Sierpnia 2020 Zdecydowanie czytelniej...zgadzam się z Tobą... Ciężko do pewnych nawyków się przyzwyczaić i cały czas nad tym pracuję. Wyłapałem w inny sposób błąd.A mianowicie co się dzieje kiedy bohater kiedy zejdzie z drabiny dotknie stałego podłoża/gruntu.. A mianowicie był przez ułamek sekundy zatrzymany w miejscu tak jakby ktoś go trzymał. Ten kod naprawia ten problem if __vsign == 1 && !wPowietrzu { drabina = false; } Ok udało Mi się też zlokalizować przyczynę dlaczego nie mogłem ustawić sprita idealnie jak schodzi po drabinie. Temat do zamknięcia.. Przyczyną była zmienna vspd musiałem zwiększyć dystans skoku do góry i już jest ok.. 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ę