Skocz do zawartości

INI nie działa && viewy


Rekomendowane odpowiedzi

1)Mam taki skrypt:

GML
i

ni_open( 'mapy.ini' )

with(obj_start_edytor)

{

for(i=0;i<kratkix;i++)

{

for(u=0;u<kratkiy,u++)

{

ini_write_real(nazwa,'kratkaa['+string(i)+','+string(u)+']',kratkaa[i,u]);

ini_write_real(nazwa,'obiektt['+string(i)+','+string(u)+']',obiektt[i,u]);}}}

ini_close();

Nie widzę, żeby nic tutaj nie grało(kratki mają po 10), jednakże nigdzie się nic nie zapisuje. Powinno(chyba) samo się stworzyć, jak pliku nie ma, a plik tak czy siak wrzuciłem do Included Files.

 

 

2) Chcę skorzystać z paru vievów, ponieważ będą odpowiedzialne za skalowanie mapy.

Na viewvie 0 ma być HUD i on ma się nie zmieniać, w sumie może być nawet nieruchomy.

Problemem jest dla mnie view 1, ponieważ to od niego się wszystko dostosowuje, a ja chcę, żeby on działał dopiero od pewnego x i pewnego y, jak to osiągnąć?

Odnośnik do komentarza
Udostępnij na innych stronach

1. Tak pętle for nie działają.

 

2. Użyj Draw GUI

 

 

Cos sie skopalo przy edycji posta, nie mam pojecia czemu. Poprawilem. Z petlami problemu nie ma, jak cos bez nich projowalem, to tex tak samo jest.

W sensie, ze uzywac jednego viewa i w draw_gui rysowac gui?

W draw_gui nie dawac view_xview, tylko sama pozycje?

Odnośnik do komentarza
Udostępnij na innych stronach

Pozycja 0 i 0 w Draw GUI to lewy górny róg okna gry. Możesz mieć problemy z fullscreenem bo musisz pamiętać o tym że każdy ma inne rozdzielczości i proporcje ekranu, ale poszukaj tutoriali to znajdziesz sposób.

 

A w INI chyba nie możesz używać znaków [ i ] bo oznaczają sekcję.

Odnośnik do komentarza
Udostępnij na innych stronach

Juz wczesniej uzywalem nawiasow kwadratowych i nie bylo problemu. Dla testu tez bez petli zapisialem sobie zmienna lol i tez nic sie nie zapisalo :/

Skrypt jest uruchamiany, sprawdzalem.

 

I czy da się zrobić, że jak klikniesz w jakimś miejscu w draw gui, to to się robi?

Bo tutaj view_xview i view_yview mi nie pomoże, bo room jest skalowany.

Odnośnik do komentarza
Udostępnij na innych stronach

Albo ja Ciebie nie rozumiem, albo Ty mnie :D

Nie chce, zeby gui mialo taki sam rozmiar co view, ono ma z gory ustalony rozmiar, a view sie zmienia. I teraz mam problem, bo nie wiem, jak dostosowac do tego klikanie myszki.

Chyba, ze to napisales, ale jakos tego nie zczailem.

 

i co z ini? :/

Odnośnik do komentarza
Udostępnij na innych stronach

ini po prostu oducz się używać.

 

-[PhariseuS]- podał funkcję na zmianę rozmiaru GUI. Musisz poczytać jak to wszystko działa, bo GUI nie będzie miało rozmiaru view a rozmiar ekranu. Są funkcje od myszy. Zaczynają się chyba do display_* zobacz w dokumentacji.

Odnośnik do komentarza
Udostępnij na innych stronach

W sumie nigdy się nie nauczyłem, jak w GM operować plikami INI, gdyż wszystko (i jeszcze więcej) da się załatwić funkcjami file_*. W związku z tym nie mam na ich temat zdania.

 

Co do display_: Wybacz, stosowałem skróty myślowe, by naprowadzić Cię na dobry kierunek, bo za dużo umiesz, by podawać Ci gotowce ;) Jeżeli już ustawisz rozmiar GUI, w evencie Global mouse obiektu GUI, na który chcesz kliknąć, musisz sprawdzić, czy pozycja myszy znajduje się w zakresie tego obiektu.

 

Zakładając, że każdy z rysowanych elementów jest ograniczony czterema koordynatami (minx, miny, maxx, maxy) prostokątu

 

GML
//funkcja checkForGUIClickRectangle(minx,miny,maxx,maxy)

return (mouse_x>=argument[0] && mouse_y>=argument[1] && mouse_x<=argument[2] && mouse_y<=argument[3])

 

A dla okrągłych elementów, będących kołami o środku w punkcie (mx, my) i ograniczonych promieniem mradius

 

GML
//funkcja checkForGUIClickCircle(mx,my,mradius)

return (point_distance(mouse_x,mouse_y,argument[0],argument[1])<=argument[2])

 

Tradycyjnie - nie sprawdzałem, czy działa. I teraz jak masz na przykład kwadratowy element GUI w prawym górnym rogu ekranu, i element ten ma 64x64 px - oraz nie ważne są jego "prawdziwe" x i y, gdyż rysowany jest z poziomu Draw GUI w ten lub podobny sposób

 

GML
var minx=room_width-64;

var miny=0;

var maxx=room_width;

var maxy=64;

//ok, powyzsze nie musi byc wcale zmienna tymczasowa, moga to byc niezmieniajace sie zmienne zadeklarowane np. w Create

draw_rectangle(minx,miny,maxx,maxy,0)

 

Wtedy w jego Global mouse (zwykły, pressed lub released, w zależności od tego, co chcesz osiągnąć) daj

 

GML
if (checkForGUIClickRectangle(minx,miny,maxx,maxy))

{

show_message("Udalo sie kliknac w kwadrot. Dyplom wyslemy poczta");

}

 

Byc moze jest to niezbyt wydajne obejscie, bo nie mam doswiadczenia z wiekszoscia funkcji display_*, ale podejrzewam, ze zasada dzialania jest podobna. Jak czegos nie rozumiesz to wal.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie da rady sprawdzać zwykłego mouse_x/y dla GUI bo ono ma rozmiar i wymiary ekranu, nie gry. To co podałeś jest prawdziwe tylko w wypadku gdy warstwa GUI ma rozmiar application_surface, a nie zawsze się opłaca tak robić.

 

Polecam: https://yoyogames.com/tech_blog/109

Odnośnik do komentarza
Udostępnij na innych stronach

Oboje mieliśmy trochę racji.

Aż sam byłem ciekawy, bo chyba jeszcze nie musiałem korzystać z tego sposobu.

 

Więc zrobiłem przykład.

 

clickable_gui.zip (58 kb)

 

W ogóle to widzę, że uploader nie idzie z duchem czasu i spośród dozwolonych rozszerzeń nie ma tam *.gmz.

Jeżeli więc chciałby kto zaimportować do GMStudio, wystarczy zmienić rozszerzenie z zip na *.gmz.

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