Skocz do zawartości

Zablokowane obiect1 ma być w rogu ekranu


kriso99

Rekomendowane odpowiedzi

JAK TO ZROBIĆ???

object1 jest przedstawiony jako lista.

Niezależnie gdzie pujdzie bohater i jak się przesunie ekran obiect1 ma być w lewym górnym rogu ekranu.

Na tej liście jest kilka objektów chce też aby te objekty nie zmieniały miejsca względem listy. Dajmy np. że bochater ma włączonego wiewa z opóźnieniem.

Odnośnik do komentarza
Udostępnij na innych stronach

Dam Ci uniwersalną wersję kodu Cordoby:

GML
//create obiektu listy

iks=x

igrek=y

GML
//wrzuć to w stepie listy

x=view_xview+iks

y=view_yview+igrek

to spowoduje że lista zachowa swoje położenie tak jak ją ustawiłeś w roomie (patrz na ramkę viewa aby cała lista się w nim zmieściła)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Draw

GML
x=view_xview+0

y=view_yview+0

 

draw_sprite( sprite_index, image_index, x, y)

 

Mam pytanie - po kiego trzyba + 0 ? Równie dobrze można by napisać view_xview+5-5+10-10+4-4+0-0+0-0+0-0 - tyllko spowalniacie GMa obliczeniami które i tak nic nie zmieniają.

Odnośnik do komentarza
Udostępnij na innych stronach

jeszcze jedno pytanko

mam ustawionego view'a:

GML
event_perform(ev_other,ev_user0);

 

 

 

view_object[0]=ludzik;

 

view_hborder[0]=150;

 

view_vborder[0]=150;

 

 

 

t_curr=2;

 

ludzik ma mieć ustawionego viewa do samej planszy nie do listy i planszy

czyli

[------lista------]p--l--a--[ludzik]n--s--z--a ,a nie [------lista------]p-[ludzik]-l--a--n--s--z--a

Odnośnik do komentarza
Udostępnij na innych stronach

JAK TO ZROBIĆ???

object1 jest przedstawiony jako lista.

Niezależnie gdzie pujdzie bohater i jak się przesunie ekran obiect1 ma być w lewym górnym rogu ekranu.

Na tej liście jest kilka objektów chce też aby te objekty nie zmieniały miejsca względem listy. Dajmy np. że bochater ma włączonego wiewa z opóźnieniem.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

A, ok, teraz rozumiem - no to jest już grubsza sprawa, bo szczerze powiedziawszy sam mam z tym zawsze problemy.

Najprosze rozwiązanie to zrobić dwa viewy - np. mając okno 800x600, robisz view[0] który zaczyna się na x = 100, width = 700px, y = 0, height = 600, natomiast view[1]: x = 0, width = 100px, y = 0, height = 600.

Teraz w obiekcie z listą, tam gdzie jest draw dajesz:

GML
if view_current != 1 then exit;

Niestety nadal rodzi to pewne problemy - otóż mouse_x i mouse_y są chyba liczone względem viewa, no i w view[1] tak naprawdę pod spodem nadal będzie widać normalną planszę - a więc i postać (lista musi mieć duży, ujemny depth aby je przsłonić) - więc w przypadku gdy będą jakieś akcje wciśnięcia myszy na postaci, to też się wykonają - lista zasłania obiekt, ale tylko się na nim "rysuje".

 

Sposób drugi - tworzyć plansze w grze tak, że pierwsze 100px które zajmuje lista, nie jest nigdy niczym zajęte, a samą planszę gry zaczynamy dopiero powyżej tej wartosci (trzeba tylko ustawić jakąś niewidzialną ścianę dla bezpieczeństwa).

 

Edit: Jak znajdę czas wieczorem, to pierwszy sposób mogę zrobić w GM8 i wrzucić na forum.

Odnośnik do komentarza
Udostępnij na innych stronach

Sposób pierwszy, jeśli się nie mylę, jest wolniejszy od drugiego.

 

mouse_x i mouse_y są liczone niezależnie od viewa (tzn. jeśli najedziesz kursorem na lewy górny róg okna, to mouse_x będzie równe view_xview - i tak samo z mouse_y).

 

W sposobie drugim barierę zrobić bardzo łatwo.

W End Step object1:

GML
with(all) if(x < 100) x = 100

x = xprevious

 

Ja kiedyś robiłem jeszcze inaczej, po prostu dawałem obiekt (u Ciebie listę) daleko poza planszą i tam ustawiałem viewa. Nie martwiłem się o żadne niewidzialne ściany, ale sposób to nie najszybszy.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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