MetalowyNerd Opublikowano 16 Lipca 2020 Opublikowano 16 Lipca 2020 Witam. Wie ktoś, jak obliczyć/pozyskać liczbę nowych linii zrobionych automatycznie w draw_text_ext()? W argumencie "w" ustawia się długość w pikselach, po ilu ma zostać wrzucona nowa linia. Chciałbym wiedzieć, ile razy została ta nowa linia wykonana w tym jednym draw_text_ext(). Manualnie tego zrobić nie mogę przez "\n".
Administratorzy gnysek Opublikowano 17 Lipca 2020 Administratorzy Opublikowano 17 Lipca 2020 Generalnie to się nie da. Ale można podejść do tego inaczej. Najpierw złamać tekst, a wtedy policzyć linie. Do tego jest już gotowy customowy skrypt: https://www.gmlscripts.com/script/string_wordwrap string_wordwrap(string,length,break,split) - string to tekst, length to długość, break to znak łamania, a split to true/false czy łamać słowa w połowie.
MetalowyNerd Opublikowano 18 Lipca 2020 Autor Opublikowano 18 Lipca 2020 Ehh, to będę musiał to inaczej ogarnąć :/, myślałem, że to w miarę proste. Chciałem zrobić okno "konsoli" w grze, żeby były widoczne ostatnie komendy wyżej i żeby z każdymi nowymi wprowadzonymi, całość szła ku górze... a nie zrobię przecież nieskończonego stringa :/
SimianVirus7 Opublikowano 18 Lipca 2020 Opublikowano 18 Lipca 2020 Ja okno konsoli zrobiłem na ds_list. Każda lista to osobny string. Wtedy możesz policzyć linie po prostu licząc listy w tablicy
MetalowyNerd Opublikowano 18 Lipca 2020 Autor Opublikowano 18 Lipca 2020 Tak, opcja super, tylko jeśli tekst w jednej linii będzie za długi? To jak go automatycznie przerwiesz, żeby reszta była w linii poniżej?
SimianVirus7 Opublikowano 18 Lipca 2020 Opublikowano 18 Lipca 2020 draw_text_ext(x, y, lista[| i], 20, 300); Powinno łamać tekst... chociaż? Nie wiem, musiałbym popróbować. Wydaje mi się, że będzie łamać tekst, ale mogą się nachodzić góra/dół :/
SimianVirus7 Opublikowano 18 Lipca 2020 Opublikowano 18 Lipca 2020 Hej, zrobiłem coś takiego. Linie liczy, a żeby pokazywał tylko kilka pierwszych/ostatnich to pewnie wystarczy tylko zmienić pierwszy/drugi argument w forze. Projekt [gm:s2] - https://gmclan.org/up8556_18_Line_counter.html Zrobiłem liste, a w Draw umieściłem kod: var _break = 5; //Przerwa pomiędzy linijkami list_height = 0; //zeruj for(var i = 0; i < ds_list_size(list); i++) { draw_text_ext(5, 5 + (list_height), string(i+1) + ". " + string(list[| i]), 20, 300); list_height += string_height_ext(list[| i], 20, 300)+_break; }
MetalowyNerd Opublikowano 18 Lipca 2020 Autor Opublikowano 18 Lipca 2020 Ooo, czyli się da. Teraz muszę jeszcze rozgryźć, jak ogarnąć usuwanie od góry tylu linii i przesuwanie o tyle do góry, co będzie miało najnowsze wprowadzone zdanie. Dzięki SimianVirus7. Kodzik krótki, to powinienem ogarnąć . A z ciekawości, ile taka tablica może pomieścić takich linii?
SimianVirus7 Opublikowano 18 Lipca 2020 Opublikowano 18 Lipca 2020 Raczej ogranicza Cię tylko RAM komputera. Przy 16gb nic nie stanęło mi na przeszkodzie, żeby zrobić 45mln elementów w tablicy. Przy pustym pokoju i tylko wypisywaniu każdej linijki, przy 30tyś, fps spadł do 30 klatek. Choć pewnie ktoś z tego forum (choćby Gnysek), może powiedzieć o tym wiele więcej
MetalowyNerd Opublikowano 19 Lipca 2020 Autor Opublikowano 19 Lipca 2020 To pozostaje mi co ileś tysięcy komend wyczyścić tablicę, bo w tym projekcie utrata klatek będzie wyjątkowo głupia i nieuzasadniona patrząc z perspektywy gracza
SimianVirus7 Opublikowano 19 Lipca 2020 Opublikowano 19 Lipca 2020 Zawsze możesz zapisywać co jakiś czas linijki do pliku tekstowego i wczytywać je stopniowo. Czyli mieć to jakby podzielone na części, np. Jeśli numer_linijki >= 100 wtedy doczytaj drugie 100 z pliku tekstowego. Jeśli numer_linijki <= 99 wtedy doczytaj pierwsze 100 z pliku tekstowego. No coś w ten deseń (pseudokod jak marzenie)
MetalowyNerd Opublikowano 20 Lipca 2020 Autor Opublikowano 20 Lipca 2020 Oki dzięx za czas, coś z tym zrobię
Administratorzy gnysek Opublikowano 21 Lipca 2020 Administratorzy Opublikowano 21 Lipca 2020 ja tak teraz jeszcze dodam, ze ogólnie to konsola ma zazwyczaj czcionkę o stałej szerokości, więc dzielenie na kolejne linijki jeśli można tekst łamać w dowolnym miejscu jest dziecinnie proste i łatwo to do tablicy przypisać, bo znasz limit znaków i nie musisz liczyć szerokości/wysokości.
MetalowyNerd Opublikowano 21 Lipca 2020 Autor Opublikowano 21 Lipca 2020 9 godzin temu, gnysek napisał: ja tak teraz jeszcze dodam, ze ogólnie to konsola ma zazwyczaj czcionkę o stałej szerokości, więc dzielenie na kolejne linijki jeśli można tekst łamać w dowolnym miejscu jest dziecinnie proste i łatwo to do tablicy przypisać, bo znasz limit znaków i nie musisz liczyć szerokości/wysokości. O to chodzi, że nie można łamać w dowolnym miejscu, bo tylko przed kolejną przerwą/spacją, bo inaczej gra będzie niezbyt czytelna, a to będzie gra tekstowa. Żeby stworzyć taką czcionkę, w której każdy znak ma identyczną szerokość (jak w konsoli Win'a np), to pewnie trzeba stworzyć czcionkę z bitmapy, prawda? Nie ma opcji stworzenia takiej ze zwykłej czcionki?
Administratorzy gnysek Opublikowano 21 Lipca 2020 Administratorzy Opublikowano 21 Lipca 2020 Zadziała każda czcionka monospace, np. Courier New, Lucida Console, Consolas itp. Nie możesz łamać tylko przed kolejną spacją, bo jak słowo jest dłuższe niż maks. szerokość, to nigdy nie złamie, gdzieś musi być na twardo A samo łamanie jest w skrypcie który podałem w moim pierwszym poście. Wystarczy przerobić kod, zeby zamiast łamać przypisywał do kolejnego elementu tablicy. Tu masz moją konsolę: https://marketplace.yoyogames.com/assets/2444/in-game-console
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ę