Skocz do zawartości

I am Lord

Moderatorzy
  • Postów

    4884
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    35

Odpowiedzi społeczności

  1. I am Lord odpowiedź w Wydajność gry levele został oznaczony jako odpowiedź   
    Wstaw na końcu Draw 
    show_debug_message( string(instance_number(obj_ulepszenie_9))+", "+string(instance_number(obj_ulepszenie_10)) );  
    I zobacz w konsoli Output czy liczby się będą zwiększać. Jeżeli tak to znaczy że nonstop tworzysz te obiekty, w nieskończoność.
     
    Instancje obiektu usuwa się za pomocą instance_destroy()
  2. I am Lord odpowiedź w adresowanie zmiennych został oznaczony jako odpowiedź   
    No to się robi 
     
    Różnie można adresować, to też zależy w którym evencie to robisz.
     
    Ogólnie są dwie formy adresowania, pierwsza formą jest adresowanie podając pojedynczą kropkę a druga forma to użycie keyword with
    W obu przypadkach podajesz nazwę obiektu albo id instancji albo keyword other/self np:
    obj_mojObiekt.z inst_4DB70D2.z // (w GMS2) (100012).z // (w GMS1 i niżej) other.z self.z za pomocą formy obj_mojObiekt.z odnosisz się do wszystkich instancji o nazwie podanego obiektu, dlatego w tej formie jest to mało użyteczne. Bo gdybyś chciał odczytać zmienną 'z' to odczytałoby ci zmienną z instancji o największym id ze wszystkich obiektów tej nazwy dlatego że GM próbował by kolejno 'zaglądać' do każdej takiej instancji więc nadpisywał by wynik tak długo aż zostanie mu ostatnia i zwróci wartość właśnie tej ostatniej instancji.
    Ta forma ma większy użytek gdy chcesz zmienić zmienną we wszystkich obiektach tej nazwy jednocześnie np:
    obj_mojObiekt.z = 100 // i teraz każdy obiekt obj_mojObiekt ma 'z' o wartosci 100 to samo działanie z użyciem with wygląda następująco:
    with (obj_mojObiekt) { z = 100 } gdybyś jednak chciał użyć with do odczytania zmiennej 'z' to sprawa się komplikuje, zrobiłbyś to na dwa sposoby:
    // sposób pierwszy var tymczasowaZmienna; with (obj_mojObiekt) { tymczasowaZmienna = z } show_debug_message(tymczasowaZmienna) // konsola wyswietli wartość 'z' // sposób drugi jakasZmiennaLokalna = 0 with (obj_mojObiekt) { other.jakasZmiennaLokalna = z } // przypisałeś wartość zmiennej jakasZmiennaLokalna do wartosci 'z' obiektu obj_mojObiekt  
    Jednak to tylko jest mało użyteczne adresowanie po nazwie obiektu, dużo bardziej użyteczne jest adresowanie bezpośrednio po id instancji ale takie id najpierw trzeba znać.
    Musisz sobie zwracać uwagę na to jakie funkcje zwracają id instancji, do tych najpopularniejszych należą
    instance_create(x, y, obj); instance_create_depth(x, y, depth, obj); // tylko dla GMS2 instance_create_layer(x, y, layer_id, obj); // tylko dla GMS2 instance_nearest(x, y, obj); // grupa funkcji z kolizji wykrywania kolizji: collision_*(); // np. collision_circle( x1, y1, rad, obj, prec, notme );  
    Tak więc, podam kilka praktycznych przykładów:
    1.
    // EVENT STEP var ID; ID = instance_nearest(x, y, obj_skrzynka); show_debug_message(ID.z) // konsola zacznie wyświetlać wartość 'z' skrzynki do której jesteś najbliżej 2.
    // EVENT STEP var ID; ID = collision_circle( x, y, 128, obj_skrzynka, 0, true ); if (ID != noone) { show_debug_message(ID.z) // konsola zacznie wyświetlać wartość 'z' skrzynki która jest w zasięgu okręgu } /* ten if jest tutaj potrzebny poniważ funkcje collision_* zwracają także keyword noone w przypadku gdy do kolizji nie dojdzie w dodatku gdy w zasięgu jest więcej skrzynek to odczyta wartość z instancji o najwyższym id czyli tego obiektu który ostatni nadpisze zmienną ID*/ 3.
    // EVENT PRZYCISKU STRZAŁU var ID; ID = instance_create(x, y, obj_bullet); ID.z = z+64; /* nowo utworzona instancja obiektu pocisków: obj_bullet będzie miała na start przypisaną wartość 'z' do wartości 'z' gracza + wysokość gdzie znajduje się pistolet*/  
    Kolejną najciekawszą sprawą adresowania zmiennych jest użycie keywordu other
    Jak mogłeś wcześniej zobaczyć, użyłem słówka other wewnątrz with, w tym przypadku other będzie miało wartość id instancji z którego wywołujesz with. 
    Jednak gdyby użyć other w którymś z eventów kolizji to wtedy other przyjmuje wartość id instancji z którą kolizja nastąpiła i tutaj mogę np podać przykład niszczenia się pocisku o ścianę z którą się zderza, będzie to wyglądało tak:
    // EVENT COLLISION WITH obj_sciana if (z > other.z && z <other.z+other.wysokosc_sciany) { instance_destroy(); }  
  3. I am Lord odpowiedź w HitBox - GMS2 został oznaczony jako odpowiedź   
    użyj layer
    W room editorze stwórz nowy layer zapamiętaj jego nazwę i w tej funkcji podajesz tą nazwę.
×
×
  • Dodaj nową pozycję...