Skocz do zawartości

Problem z Funkcją Draw Text


Rekomendowane odpowiedzi

Witam!

Jeszcze nie zauważyłem, żeby ktoś na tym forum zgłosił taki problem. Mam duży problem z funkcją draw w game makerze. Po prostu mi ona ni działa. W obojętnie jakiej grze otwieram okno jakiegoś obiektu, tworzę eventa press Space i do niego piszę np. takiego skrypta:

draw_text(60,60,'Punkty gracza 2');

Niby po wciśnięciu spacji na współrzędnych x=60 oraz y=60 powinien pojawić się napis: Punkty gracza 2. Niestety, ale nic się nie pojawia. Próbowałem to robić także na klockach. Zrobiłem eventa press Space, a następnie wstawiłem klocka draw text. Napisałem w nim jakiś tekst, lecz i tak w grze po wciśnięciu spacji nic się nie pojawiło. Ustawiałem nawet depth obiektu na -10000, żeby był na samym wierzchu, ale to i tak nic nie dało.

Proszę o pomoc!!!

Odnośnik do komentarza
Udostępnij na innych stronach

Z tego co napisałeś używasz tego w różnych eventach.

Funkcje związane z draw powinieneś używać tylko w evencie Draw.

Tam możesz dać ten kod:

GML
if keyboard_check(vk_space) {draw_text(x,y,str)}

Jeśli jednak konicznie chcesz w innym evencie, to po poleceniach rysowania pokombinuj z funkcjami:

GML
screen_redraw()

screen_refresh()

Odnośnik do komentarza
Udostępnij na innych stronach

Micha_i, jak nie masz pojęcia, to siedź cicho. Powiedziałeś jak najbardziej źle.

Z tego co napisałeś używasz tego w różnych eventach.

Funkcje związane z draw powinieneś używać tylko w evencie Draw.

Tam możesz dać ten kod:

...

Potwierdzam, rysowanie dajemy wyłącznie w evencie DRAW.

Odnośnik do komentarza
Udostępnij na innych stronach

Przeciez kazdy powinien wiedziec (przynajmniej 2x@up), ze przed uzyciem funkcji draw_set_color() i draw_set_font(), czcionka jest ustawiana na Arial 12, a kolor na c_black HALOOO...

 

Co do tematu: funkcji zaczynajacych sie od Draw nie mozna uzywac w evencie innym niz... Draw :)

Radze zrobic cos takiego:

Create:

GML
czy_nac = -1

Press Space:

GML
czy_nac = !czy_nac

Draw:

GML
if(czy_nac) draw_text(60,60,'Punkty gracza 2')

Zmienna czy_nac bedzie odpowiadac za sprawdzanie, czy Spacja zostala nacisnieta. Mam nadzieje, ze zadziala, bo nie mam jak sprawdzic :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Standartowo po zdarzeniach step danego cyklu plansza jest od nowa wyrysowywana na ekranie. Ale w niektórych przypadkach potrzebujesz odświeżyć ekran w innych momentach. Przykładowo, gdy usypiasz działanie programu na jakiś czas, chciałbyś odświeżyć wygląd na ekranie by znalazła się tam stosowna informacja. Również, gdy gra wyświetli tekst i będzie czekać na wciśnięcie klawisza przez gracza potrzeba odświeżyć obraz na ekranie (w obu przypadkach działanie programu i wykonywanie jakichkolwiek zdarzeń będzie wstrzymane na ten czas). Są dwa sposoby aby to zrobić:

 

* screen_redraw() Przerysowuje obraz wywołując wszystkie zdarzenia Draw wszystkich instancji.

* screen_refresh() Odświeża ekran dorysowując rzeczy do istniejącego już na ekranie obrazu (nie wykonuje zdarzeń Draw).

 

Aby zrozumieć drugą funkcje, musisz zrozumieć jak działa rysowanie na ekranie. Wewnątrz pamięci jest obraz na którym następuje rysowanie. Tego obrazu nie widzisz na ekranie. Na końcu zdarzeń step, po wykonaniu zdarzeń draw, obraz na ekranie zastępowany jest obrazem wewnętrznym (nazywa się to podwójnym buforowaniem). Pierwsza funkcja odświeża wewnętrzny obraz i nakłada go na ten widoczny na ekranie. Druga funkcja jedynie dorysowuje obraz do tego co już na ekranie.

 

Teraz wiesz dlaczego nie możesz używać akcji rysowania (draw_?) w zdarzeniach innych niż Draw. Narysują one coś na wewnętrznym obrazie, ale nie będzie tego widać na ekranie, bo gdy następuje wywołanie zdarzenia Draw (jest ono ostatnie w kolejce) rysowane jest najpierw tło (background), a potem na nim wszystko to co w zdarzeniu draw, zakrywając to co wyrysowałeś wcześniejszymi zdarzeniami. Ale gdy użyjesz screen_refresh(), do obrazu widocznego już na ekranie dorysowana zostanie nowa zawartość. Dla przykładu, jakiś skrypt może wypisać na ekranie tekst, odświeżyć ekran (dorysowując tym samym tekst), oraz poczekać aż gracz wciśnie klawisz, jak w poniższym kodzie:

 

{

draw_text(room_width/2,100,'Press any key to continue.');

screen_refresh();

keyboard_wait();

}

 

Pamiętaj jednak, że rysując w zdarzeniu innym niż Draw, rysujesz na obrazie ekranu, a nie w widoku! Tak więc podajesz współrzędne na ekranie, a nie względem widoku. Uważaj, używając tej techniki. Pamiętaj też, że odświeżenie ekranu zajmuje trochę czasu i im więcej razy wykonujesz je kodem, tym większa szansa, że gra zacznie zwalniać.

 

Gdy sam sterujszesz rysowaniem w ekranie może być przydanym aby NIE wykonywać wcale zdarzeń Draw. Np. możesz chcieć odświeżać planszę co 5 kroków. Do tego jest funkcja:

 

* set_automatic_draw(value) Ustala czy wykonywać zdarzenie Draw automatycznie (true, domyślnie) czy nie (false).

 

Na koniec jest funkcja która pozwoli synchronizować rysowanie z częstotliwością odświeżania monitora:

 

* set_synchronization(value) Ustala synchronizować rysowanie z częstotliwością odświeżania monitora:.

 

Możesz także wymisić czekanie na następną pionową synchronizację używając następującej funkcji:

 

* screen_wait_vsync() Czeka na następną pionową synchronizację monitora.

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