pankracy Opublikowano 10 Listopada 2019 Udostępnij Opublikowano 10 Listopada 2019 Cześć wszystkim, Próbuje stworzyć proste intro obrazkowe.. Chciałbym uzyskać taki efekt. Jest ilustracja i pod ilustracją jest tekst i teraz kiedy nacisnę klawisz enter zmieni się ilustracja i zmieni się tekst pod ilustracją aż skończą się ilustracje lub tekst i wtedy po naciśnięciu też klawisza enter przejdę do następnego roomu. Zacząłem już tworzyć te intro obrazkowe. Chcę umieścić wiadomości w tablicy,a ilustracje w spritach jako osobne podobrazy. w create zrobiłem w taki sposób index = 0 //Zmienna,która przechowuje, w której wiadomości/podobrazie jestem msg[0] = "na poczatku powinna wyswietlic sie ilustracja nr 1" msg[1] = "Teraz powinna wyswietlic sie ilustracja nr 2" msg[2] = "Na koniec powinna wyswietlic sie ilustracja nr 3" msg[3] = "" // Dodanie dodatkowej pustej wiadomości do tablicy msg, aby uniknąć awarii po zakończeniu ilustracji W Stepie mam tak i nie działa to prawidłowo. if (keyboard_check_pressed(vk_enter))//Zwiększyć ten indeks o jeden, jeśli naciśne Enter index++; if (index == sprite_get_number(spr_ilustracja4)) { // Slajd kończy się, gdy osiągnie numer obrazu spr_ilustracja4 lub długość tablicy msg // to koniec } W Draw mam tak,ale to akurat jest źle.. draw_text(x+200, y+750, msg[0]); draw_sprite(spr_ilustracja1, 0, x+640, y+360); //tu poznizej tekst najezdza sie na poprzedni tekst... draw_text(x+200, y+750, msg[1]); draw_sprite(spr_ilustracja2, 0, x+640, y+360); draw_text(x+200, y+750, msg[2]); draw_sprite(spr_ilustracja3, 0, x+640, y+360); Proszę pomóżcie Mi jak to poskładać do kupy żebym mógł osiągnąć efekt jaki opisałem wyżej w poście. za wszelkie sugestie porady z góry dziękuje:-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 10 Listopada 2019 Udostępnij Opublikowano 10 Listopada 2019 Używasz funkcji sprite_get_number, która zwraca Ci liczbę klatek danego sprite, ale z kodu na rysowanie widzę, że używasz oddzielnych sprite a nie klatek jednego sprite. To Ci nie ma prawa zadziałać bo zwyczajnie wywołanie `sprite_get_number(spr_ilustracja4)` zwraca Ci prawdopodobnie wartość '1'. Może użyj funkcji array_length_1d zamiast sprawdzania klatek sprite'a. (pamiętaj, że funkcja dla tablicy z jednym elementem tablica[0]=100 zwróci Ci wartość '1', a indeksujesz tablice od '0') W draw może daj też warunkowe sprawdzanie, czy klatkę możesz wyświetlić if (index == 0) { // draw ilustracja1 } pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 10 Listopada 2019 Autor Udostępnij Opublikowano 10 Listopada 2019 Tak mam każdy sprite oddzielnie w plikach,a nie w jednym pliku:-) Ok funkcja sprite_get_number jest tu w moim przypadku źle użyta. Przyznam szczerze,że nie znam tej funkcji co Mi podałeś array_length_1d . Próbuje dalej to złożyć,ale pogubiłem się już. Dalej Mi wyświetla Pierwszy tylko sprite czyli ilustracja1 i tekst z msg[0] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 12 Listopada 2019 Udostępnij Opublikowano 12 Listopada 2019 if (index == sprite_get_number(spr_ilustracja4)) { // Slajd kończy się, gdy osiągnie numer obrazu spr_ilustracja4 lub długość tablicy msg // to koniec } Pomyśl, jakie są wartości ukryte pod tymi nazwami: Index = zainicjowałeś go w postaci liczby "0" i domyślam się, że wcisnąłeś enter 3 razy, żeby przejść do msg[3]. Teraz index = 3; Sprite_get_number(spr_ilustracja4)) - ta funkcja, tak jak napisał Konrad, zwraca ilość klatek w obrazie. Domyślam się (znowu :V), że jest tam tylko JEDNA klatka, więc Sprite_get_number(spr_ilustracja4)) = 1 i zawsze tam będzie jeden, jeśli obrazek nie jest animacją. Tak więc, warunek zawsze będzie prawdziwy, kiedy po raz pierwszy naciśniesz enter, bo wtedy index = 1; Możesz to zrobić poprzez array_length_1d a jakże, bądź, w taki oto fajny sposób (coś może się nie zgadzać, bo piszę z pamięci): 1) Robisz jeden sprite, o nazwie np. spr_intro1 2) W tym sprite dodajesz spr_ilustracja1, spr_ilustracja2, spr_ilustracja3, spr_ilustracja4 itd. tak, żeby powstała Ci animacja. 3) Create masz dobrze, a w Stepie coś takiego: if (keyboard_check_pressed(vk_enter))//Zwiększyć ten indeks o jeden, jeśli naciśne Enter index+=1; if (index == sprite_get_number(spr_intro1)) //teraz możesz tego używać, bo spr_intro1 zawiera cztery klatki { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec } 4) Draw: //Rysuj tekst msg[i] oraz ilustracje //Wskaźnikiem jaki ma być teraz rysowany tekst/obraz, jest zmienna "index", która zmienia się wraz z przyciskiem ENTER draw_text(x+200, y+750, msg[index]); draw_sprite(spr_intro1, index, x+640, y+360); Pamiętaj, że msg[] i ilość klatek w spr_intro1 musi być taka sama, bo inaczej indeksowanie tablicy Ci się wysypie, ale możesz to zabezpieczyć, np za pomocą funkcji clamp() albo po prostu jak masz więcej obrazków niż tekstu, to daj pustą tablicę, czyli msg[42] = ""; pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 14 Listopada 2019 Autor Udostępnij Opublikowano 14 Listopada 2019 Dziękuje..Ze spritem ,który zawiera animacje składająca się z kilku ilustracji działa..;-) Jeszcze dwa pytania: 1.A co w przypadku,kiedy skończą się już ilustracje oraz tekst i chciałbym przejść do następnego pokoju po spełnieniu wszystkich tych warunków? 2.Jeśli ustawie w spricie animacje składającą się z tych ilustracji i dopasuje ją na cały ekran do wielkości roomu,to tekst mój jest zakryty tymi ilustracjami.. jak ustawić żeby tekst był na wierzchu? a nie za ilustracja? bo obecnie mam ustawiony room większy,a sprite z ilustracjami są wyśrodkowane a poniżej po za obrazkiem tekst jest wyświetlany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 15 Listopada 2019 Udostępnij Opublikowano 15 Listopada 2019 1. No to zrób if'a :V Znaczy masz już tam jednego co to sprawdza, wystarczy go przerobić pod siebie, nie będzie to trudne. Jedynym minusem tej metody jest to, że masz jedną sprawdzającą "index" na dwie sytuacje, czyli tekst i obrazki. Dlatego zawsze i tekst i obraz musi mieć taką samą pulę, czyli np. 5 obrazków to 5 tekstów (msg[5]). Ale jak masz np. więcej tekstu, to dajesz puste obrazki png, a jak masz więcej obrazków niż tekstu to dajesz pusty tekst msg[] = ""; 2. Zamień kolejność rysowania w draw xD głupol ze mnie. Najpierw niech rysuje obraz, a później tekst. PS: W sumie możesz jeszcze założyć blokadę w draw przy użyciu zmiennej "index", żeby nie wyleciała poza tablice, to wtedy nie będziesz musiał dawać pustych obrazków/tekstu DRAW //Rysuj tekst msg[i] oraz ilustracje z blokadą na tablice //Wskaźnikiem jaki ma być teraz rysowany tekst/obraz, jest zmienna "index", która zmienia się wraz z przyciskiem ENTER draw_sprite(spr_intro1, min(index, sprite_get_number(spr_intro1)-1), x+640, y+360); //najpierw (pod spodem) rysuj obrazek var dl_tablicy = array_length_1d(msg); //zobacz jaka jest dlugosc tablicy, aby zaznaczyc końcową wartosc przy rysowaniu draw_text(x+200, y+750, msg[min(index, dl_tablicy-1)]); //później (nad obrazkiem) rysuj tekst) a w stepie zobaczysz czego jest więcej i do tego się odwołać w ifie var czego_wiecej = max(array_length_1d(msg), sprite_get_number(spr_intro1)); if (index == czego_wiecej) // możliwe, że będziesz musiał dać też -1, czyli index == czego_wiecej-1 { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec } pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 16 Listopada 2019 Autor Udostępnij Opublikowano 16 Listopada 2019 Ok kończy się ostatnia ilustracja i tekst,ale w dalszym ciągu nie można przejść do następnego roomu step var czego_wiecej = max(array_length_1d(msg), sprite_get_number(spr_intro1)); if (index == czego_wiecej-1) // możliwe, że będziesz musiał dać też -1, czyli index == czego_wiecej-1 { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec } if (keyboard_check_pressed(vk_enter))//Zwiększyć ten indeks o jeden, jeśli naciśne Enter index+=1; if (index == sprite_get_number(spr_intro1)) //teraz możesz tego używać, bo spr_intro1 zawiera cztery klatki { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 16 Listopada 2019 Udostępnij Opublikowano 16 Listopada 2019 Ale co Ty tu za bezeceństwa napisałeś Nawet nie wiem jak to wytłumaczyć Generalnie, to, kiedy masz przejść do następnego pokoju, sprawdzasz jednym ifem, na podstawie dwóch zmiennych "index" i "czego_wiecej". Jeśli "index" będzie większy, niż klatki z intro (tekst/obrazki) to przejdź do następnego pokoju. Czyli if index > czego_wiecej to goto_room_next(); //Najpierw zwiększaj index if(keyboard_check_pressed(vk_enter)) then index+=1; //Zwiększyć ten indeks o jeden, jeśli naciśne Enter //a dopiero później sprawdzaj var czego_wiecej = max(array_length_1d(msg), sprite_get_number(spr_intro1)); //zobacz, czy jest więcej obrazków czy tekstu i wpisz maks. liczbę if (index >= czego_wiecej-1) // możliwe, że będziesz musiał dać też -1, czyli index == czego_wiecej-1 { //W tym bloku wypisujesz akcje, które mają być spełnione po zakończeniu intra room_goto_next(); } /* TEGO TU NIE MA BYC, WYTNIJ TO, TO JEST POPSUTE I NIEDOBRE if (index == sprite_get_number(spr_intro1)) //teraz możesz tego używać, bo spr_intro1 zawiera cztery klatki { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec } */ pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 16 Listopada 2019 Autor Udostępnij Opublikowano 16 Listopada 2019 Dzięki;-) ustawiłem sobie jeszcze migający tekst pod tekstem obrazkowym z informacją dla gracza,że aby przejść dalej to musi nacisnąć konkretny przycisk. No dobra i ostatnie do tego moje pytanie... Obecnie tekst pokazuje się razem z ilustracja..a czy jest możliwość ustawić tak ten tekst,że pokazuje się najpierw obrazek,a za moment literka po literce pokazuje się tekst? A na końcu tego tekstu pod tym tekstem pokaże się tekst w całości migajacy np "nacisnij dowolny klawisz" tak jak mając textboxa coś takiego;-)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 16 Listopada 2019 Udostępnij Opublikowano 16 Listopada 2019 Cytuj czy jest możliwość ustawić tak ten tekst,że pokazuje się najpierw obrazek,a za moment literka po literce pokazuje się tekst? Pewnie, że jest taka możliwość, a nawet i pewnie multum możliwości Jednak ja tutaj nie pomogę, bo nigdy tego nie robiłem. Jednym ze sposobów byłoby rozdzielenie całego stringa w tablicy, na tablice ze znakami (char), a później w pętli for, która wykonywała by się w jakimś interwale czasowym, wypisywać po kolei literki. Niemniej to jest pomysł, który jako pierwszy i od razu przychodzi mi na myśl. Jak jest z jego wykonaniem to nie wiem. Na pewno nie jest on najlepszym pomysłem, z pewnością są lepsze i bardziej optymalne rozwiązania. pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 16 Listopada 2019 Udostępnij Opublikowano 16 Listopada 2019 W sumie to było łatwiejsze niż myślałem. Aczkolwiek jest to najbardziej podstawowa wersja, jaką da się zrobić (tak sądzę). Przykład:https://gmclan.org/up8556_16_Wypisywanie_tekstu.html pankracy i Konrad-GM 2 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 16 Listopada 2019 Autor Udostępnij Opublikowano 16 Listopada 2019 Extra! jesteś cudotwórcą Królu nic dodać nic ująć;-) czapki z głów... 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ę