Skocz do zawartości

instrukcja With, kilka pytań


pabluuz

Rekomendowane odpowiedzi

Witam.

 

Mam kilka pytań nt. pętli instrukcji with.

 

1. Jeśli w obiekcie gracz zrobię pętle

with (sciana)
{
i=i+1;
}

to zmieni się zmienna i w każdej instancji obiektu ściana, czy zmienna i w obiekcie gracz?

 

2. Porównywanie zmiennych. Mam kilka instancji obiektu gracz i kilka instancji obiektu sciana, chce sprawdzic czy zmienna pos_x obiektu gracz jest rowna jakiejs zmiennej pos_x obiektu sciana

with (sciana)
{
if (gracz.pos_x == pos_x ) //tak? jesli tak, to jeszcze problem w tym ze obiekt gracz ma kilka instancji :)
{
  to cos zrob
}
}

mogl by mi ktos to wytlumaczyc? z wiki game_maker_language wyczytalem ze zmienne w pętli instrukcji with są "object independent" i nie za bardzo wiem jak to rozumieć :)

 

Z góry dzięki za pomoc i miłego dnia!

Odnośnik do komentarza
Udostępnij na innych stronach

with używasz wtedy, jak chcesz aby kod wykonał się w jakimś innym obiekcie niż w którym został wywołany( jak chcesz konkretną instancje to musisz podać bodaj jej id ). I wtedy wszystko między klamrami będzie dotyczyć tylko tego obiektu czy instancji, którą podałeś w nawiasach.

Odnośnik do komentarza
Udostępnij na innych stronach

1. SAMO WITH NIE JEST PĘTLĄ! (Chociaż wykonuje takową pętlę podczasz wykonywania kodu w każdym obiekcie)

2. Zmieni się tylko obiekcie ściana, ale nie pisz i=i+1 tylko i+=1 tak jest szybciej ;)

Narazie tyle nad drugim pomyśle

 

@ED1: Spóźniełem się :P

co do drugiego to jak chcesz, żeby porównywało w with pos_x tego gracza, do którego należy zmienna (nie logicznie to napisałem wiem :P ) to zapisz w jakiejś zmiennej własne id np. swojid=id; i później zamiast gracz.pos_x dajesz swojid.pos_x.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

with to nie jest pętla, to jest instrukcja służąca do wykonania kodu przez inny obiekt :) Pętle to: REPEAT, FOR, WHILE, DO/UNTIL

 

WIth działa tak, jakbyś kod wykonał z obiektu podanego w nawiasie, a nie z obiektu w którym ten kod jest. Np.

 

GML
with (mama) { x = 12; }//to samo co mama.x = 12;</span>

 

other w tym przypadku posiada ID obiektu który kod WITH wywołał.

Odnośnik do komentarza
Udostępnij na innych stronach

A ja dodam od siebie, że with w przypadku podania obiektu a nie instancji wykonuje się tyle razy, ile jest aktywnych instancji danego typu w roomie, czyli jeśli masz w roomie 100 obj_cegla, to kod w nim wykona się tyle razy, ile jest tych cegiełek.

 

Przykład zastosowania:

GML
global.count = 0; //Ustawiam globalna zmienna count na 0

with(obj_cgela)

{

global.count += 1; //Dodaje do zmiennej 1 - a skoro kod ten wykona się tyle razy, ile jest cegielek w roomie, wiec w praktyce

//zmienne ta bedzie tak duza, ile owych cegiel jest.

{

show_message("Cegielek w roomie jest: "+string(global.count));

 

Oczywiście, ten od jest czysto abstrakcyjny, aby łatwiej Ci było zrozumieć with - nie korzystaj z niego do liczenia instancji :P

 

Ed: :[

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