Skocz do zawartości

Problem z konturem przy czcionce


pankracy

Rekomendowane odpowiedzi

Może ktoś z was mógłby pomóc rozwiązać ten problem.

 

Mam skrypt który tworzy kontur do czcionki.

Problem polega na tym,że kontur tworzy się nie przylegając do czcionki a jest przesunięty od czcionki tworzac brzydki niewyraźny tekst.

Jak to naprawić?

Powinien przylegać bezpośrednio do czcionki

 

Dziękuję

 

Tu poniżej skrypt

 

 

/// arg0 - x, arg1 - y, arg2 - text, arg3 - sep, arg4 - w, arg5 - color konturu, arg6 - color textu, arg7 - alpha, arg8 - grubość konturu
draw_text_ext_color(argument0-argument8, argument1, string(argument2), argument3, argument4, argument5, argument5, argument5, argument5, argument7)
draw_text_ext_color(argument0+argument8, argument1, string(argument2), argument3, argument4, argument5, argument5, argument5, argument5, argument7)
draw_text_ext_color(argument0, argument1-argument8, string(argument2), argument3, argument4, argument5, argument5, argument5, argument5, argument7)
draw_text_ext_color(argument0, argument1+argument8, string(argument2), argument3, argument4, argument5, argument5, argument5, argument5, argument7)

draw_text_ext_color(argument0, argument1+argument7, string(argument2), argument3, argument4, argument6, argument6, argument6, argument6, argument7)
Odnośnik do komentarza
Udostępnij na innych stronach

  • pankracy zmienił(a) tytuł na Problem z konturem przy czcionce
Cytat

Może to być problem tu


argument1+argument7

Tak, tam jest błąd. Ten argument7 przeszkadza.

Plus, ten kod działa w miarę ok tylko wtedy, kiedy grubość konturu nie przekracza liczby 2. Po przekroczeniu tej wartości kontur ma braki w rogach, bo rysuje on tylko góra/dół, lewo/prawo. Niemniej plusem jest wydajność, bo zawiera tylko 5 kroków kodu. 

Najprościej będzie to zrobić for'em, z rysowaniem 360 stopni. Nie wiem jak z wydajnością tego, tutaj starzy wyjadacze mogą się wypowiedzieć. Jakby nie było, jest tutaj 361 kroków do wykonania. Myślę, że jeśli chodzi o optymalizacje, to najlepiej shadery, ale tego jeszcze nie potrafię. 

 

for(var i=0; i<360; i++)
{
	draw_set_colour(_coloroutline);
	draw_text_ext_transformed(_x + lengthdir_x(_strong, i), _y + lengthdir_y(_strong, i), _text, _sep, _w, _xscale, _yscale, _angle);
}

draw_set_colour(_colortext);
draw_text_ext_transformed(_x, _y, _text, _sep, _w, _xscale, _yscale, _angle);

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jeśli chcesz ładny kontur, to zrób z czcionki sprite. Podstawowy sprite możesz zrobić korzystając z mojego generatora: https://gnysek.github.io/gms-font-creator/ . Potem w dowolnym programie dodaj sobie ulubioną ramkę i dodaj font przez font_add_sprite_ext (mój generator daje od razu listę znaków która będzie drugim argumentem).

Odnośnik do komentarza
Udostępnij na innych stronach

Fajny ten twój generator.Widzę,że też od razu tworzy kontur twój generator. ?

Musiałbym tylko czcionkę dodać którą chce poddać edycji.

Mam kilka pytań do tej funkcji

1. Nie chce mi się wyświetlać napis "Przykład" ale za to wyświetla się napis "11111" jeśli wstawię w to miejsce cyfry.

Co może być tego powodem?

2.Czy w tej funkcji można sterować rozmiarem czcionki? bo jeśli nie to dla każdego tekstu musiałbym przygotować odrębny sprite czcionki z dobranym rozmiarem

 

 

font_add_sprite_ext

font_main = font_add_sprite_ext(font_test, "!$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^+`abcdefghijklmnopqrstuvwxyz{|}~€ąćęłńóśżźĄĆĘŁŃÓŚŻŹ", true, 0);

draw_text(x+400,y,"Przykład")

 

I ostatnie pytanie odnośnie tego posta

A powiedz czy powyższy kod będzie wydajny? Simian wspomniał,że nie jest pewien czy będzie te rozwiązanie jego wydajne ze względu na wykonanie 361 kroków.

 

Dziękuję za każda odpowiedź i pomoc ?

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Na pewno zgubiłeś gdzieś spację, prawidłowo funkcja powinna wyglądać tak:

font_main = font_add_sprite_ext(font_test, "!\" $%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^+`abcdefghijklmnopqrstuvwxyz{|}~€ąćęłńóśżźĄĆĘŁŃÓŚŻŹ", true, 0);

(Zwróć uwagę na backslash przed ", a potem na spację po " i przed $ ).

Moja strona obsłuży każdy font który masz zainstalowany (jakby coś).

 

Wydajność - to zależy co innego dzieje się w grze. Ja już robiłem takie, gdzie każda literka jest rysowana osobno i jakoś dawało radę.

Odnośnik do komentarza
Udostępnij na innych stronach

W dniu 31.05.2021 o 10:32, pankracy napisał:

 

font_add_sprite_ext


font_main = font_add_sprite_ext(font_test, "!$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^+`abcdefghijklmnopqrstuvwxyz{|}~€ąćęłńóśżźĄĆĘŁŃÓŚŻŹ", true, 0);

draw_text(x+400,y,"Przykład")

 

I ostatnie pytanie odnośnie tego posta

A powiedz czy powyższy kod będzie wydajny? Simian wspomniał,że nie jest pewien czy będzie te rozwiązanie jego wydajne ze względu na wykonanie 361 kroków.

 

Dziękuję za każda odpowiedź i pomoc ?

 

Kod będzie wydajny o ile font_add_sprite_ext() użyjesz tylko raz (np w create). Brakuje ci też na pewno tutaj draw_set_font()

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