Skocz do zawartości

Jak wykryć nowe linie w stringu?


Rekomendowane odpowiedzi

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".

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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 :/

Odnośnik do komentarza
Udostępnij na innych stronach

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;
	
}



line_counter.gif

Odnośnik do komentarza
Udostępnij na innych stronach

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?

 

Odnośnik do komentarza
Udostępnij na innych stronach

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 :P

Odnośnik do komentarza
Udostępnij na innych stronach

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ń :P

(pseudokod jak marzenie) 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...