Skocz do zawartości

Ice Cube

Użytkownicy
  • Postów

    208
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    2

Aktywność reputacji

  1. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w collision circle   
    Cześć, funkcja collision_circle (jak każda funkcja zaczynająca się od collision_*) zwraca ID instancji, także other Ci tutaj nie zadziała. Musisz zapisać ID do zmiennej tj.
    var potwor = collision_circle(x, y, 100, obj_potwor, false, true); while (potwor != noone) { with (potwor) { instance_destroy(); } potwor = collision_circle(x, y, 100, obj_potwor, false, true); } Dałem funkcję w pętli, ponieważ funkcje collision_* zwracają Ci tylko ID jednej instancji. 
     
    Dla GMS1.4+ zamiast with(potwor) można zapisać instance_destroy(potwor)
  2. Lubię (+1)
    Ice Cube przyznał(a) reputację dla gnysek w collision circle   
    Jak chcesz zniszczyć wszystko w promieniu 100px, to nie korzystasz z collision_circle. Collision_circle zwraca informację, czy w kole o danym promieniu zachodzi kolizja z innym podanym obiektem.
     
    1) w gms2 można użyć collision_circle_list
     
    2). pozostałe sposoby
    with (obj_potwor) { if (distance_to_point(other.x, other.y) < 100) { instance_destroy(); }}
  3. Lubię (+1)
    Ice Cube przyznał(a) reputację dla I am Lord w collision circle   
    Tutaj dorzucę taką drobną informację bo zapewne @Ice Cube nie będzie wiedział. 
    distance_to_point() które Gnysek podał zwraca odległość od punktu do najbliższej krawędzi bounding boxa obiektu zaś funkcja
    point_distance() którą także możesz tutaj użyć zwraca już odległość między jednym punktem a drugim.
  4. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w adresowanie zmiennych   
    W większości przypadków self praktycznie Ci się nie przyda, osobiście sam nie stosowałem tego rodzaju odwołania i nie potrafię powiedzieć, do czego byłoby to użyteczne, ponieważ i tak blok kodu jest wykonywany w kontekście self.
  5. Lubię (+1)
    Ice Cube przyznał(a) reputację dla I am Lord w adresowanie zmiennych   
    Fakt, niepotrzebnie wspomniałem o self bo sam go nie użyłem ani razu w życiu
    Także nim sobie głowy nie zaprzątaj.
  6. Lubię (+1)
    Ice Cube przyznał(a) reputację dla exp w adresowanie zmiennych   
    zamiast z napisz other.z (albo o_NazwaObiektu.z)
  7. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w adresowanie zmiennych   
    Cześć, mi to wygląda na to, że Twój obiekt obj_krew nie ma zmiennej 'z'. Zmienne przeważnie tworzy się w Create Event, bo jest to event, który jest wykonywany wraz z funkcją instance_create i potem te zmienne są dostępne w referencjach na instancję zaraz po jej stworzeniu (np. "other.zmienna = 10", czy "var inst=instance_create(x,y,obj_krew); inst.zmienna = 10"). Artykułów dot. zmiennych na GMClan jest kilka, np. https://gmclan.org/index.php?czytajart=30 , przejrzyj listę artykułów na stronie https://gmclan.org/index.php?artykuly=17 mogą Ci się przydać w zrozumieniu zmiennych, argumentów, funkcji, operacji na nich itd.
     
    EDIT: v
  8. Lubię (+1)
    Ice Cube przyznał(a) reputację dla I am Lord w adresowanie zmiennych   
    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(); }  
  9. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w Strzał 3d   
    Wyrażenie other jest tak jakby referencją na instancję, także każdy parametr instancji jest dostępny poprzez other.parametr_instancji, polecam przejrzeć dokumentację:
    https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml language overview/keywords.html
  10. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w Strzał 3d   
    Jeżeli używasz tego kodu na obj_pocisk co Ci przesłałem, to ten pocisk nie używa zmiennej direction, dlatego direction zawsze będzie równe 0. Spróbuj odczytać kierunek pocisku od jego zmiennych motion_xyz. Jest to wektor lotu pocisku i można za jego pomocą policzyć wektor normalny w którym kierunku leci pocisk na płaszczyźnie 2D tj.:
    // normalizujemy wektor 2D motion_xy var motionlen = sqrt(other.motion_x*other.motion_x + other.motion_y*other.motion_y); var xdir = other.motion_x / motionlen; var ydir = other.motion_y / motionlen; // teraz przesuwamy wroga x += xdir * 5; y += ydir * 5;  
  11. Super (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w Strzał 3d   
    Funkcja place_meeting bierze pod uwagę maski obu instancji, maskę obj_pocisk i obj_wrog. Jeszcze istnieje taka funkcja jak position_meeting do sprawdzania kolizji tylko punktowo
  12. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w Strzał 3d   
    Ewentualnie możesz zachować opcję z solid, ale w obiekcie obj_pocisk, w Step Event musiałbyś dodać kod odpowiedzialny za sprawdzanie kolizji zamiast w Collision Event:
    // sprawdzamy kolizje z wrogami with (obj_wrog) { if (place_meeting(x, y, other.id)) { // kolizja nastąpiła, ale w 2D, sprawdźmy wysokość pocisku if (other.z < 24) { with (other) { // niszczymy pocisk instance_destroy(); } // niszczymy wroga instance_destroy(); // przerywamy blok 'with' break; } } }  
  13. Lubię (+1)
    Ice Cube przyznał(a) reputację dla I am Lord w Strzał 3d   
    Może ci się tak wydawać bo masz pewnie okrągłe maski kolizji. Ale one zupełnie inaczej działają
     
    place_meeting > https://docs2.yoyogames.com/index.html?page=source%2F_build%2F3_scripting%2F4_gml_reference%2Fmovement and collisions%2Fcollisions%2Fplace_meeting.html
     
    collision_circle > https://docs2.yoyogames.com/source/_build/3_scripting/4_gml_reference/movement and collisions/collisions/collision_circle.html
     
    Co ważniejsze, place_meeting zwraca true lub false a collision_circle zwraca id obiektu z którym nastąpiła kolizja
  14. Lubię (+1)
    Ice Cube przyznał(a) reputację dla I am Lord w instance_destroy()   
    instance_destroy(obj_zloto) 
     
    zadziałałoby w GMS2
  15. Lubię (+1)
    Ice Cube otrzymał(a) reputację od Konrad-GM w instance_destroy()   
    dobra już mam !  
     
    with(obj_zloto) instance_destroy();
  16. Super (+1)
    Ice Cube przyznał(a) reputację dla Konrad-GM w instance_destroy()   
    Cześć, możesz użyć wyrażenia with i wewnątrz bloku wywołać funkcję instance_destroy:
    with (obj_zloto) { instance_destroy(); }  
  17. Super (+1)
    Ice Cube przyznał(a) reputację dla Wojzax w ai Wroga   
    https://www.yoyogames.com/blog/64/using-motion-planning
    http://docs.yoyogames.com/source/dadiospice/002_reference/movement and collisions/motion planning/index.html
     
    Najprościej użyć do ruchu wroga wbudowanej funkcji 
    mp_potential_step(xgoal, ygoal, stepsize, checkall)
     
    gdzie:
    xgoal, ygoal - współrzędne gracza
    stepsize - szybkość ruchu w pixelach na klatkę
    checkall - tutaj true (jeśli wróg ma omijać wszystkie obiekty po drodze) lub false (jeśli wróg ma omijać obiekty solid po drodze)
     
    Oczywiście nie jest to idealne rozwiązanie, funkcja polega na tym że program sprawdza przeszkody w najbliższym otoczeniu i zmienia kąt wroga tak aby je omijał, ale nie ma tutaj ogólnego planu więc wróg będzie się często zacinał lub chodził w kółko. Plusem jest mało obliczeń na klatkę.
     

    użycie mp_potential_step daje niezłe wyniki przy prostych przeszkodach
     
    Lepsze jest użycie funkcji z serii mp_grid, za pomocą funkcji takich jak mp grid_add_cell,  add_rectangle, czy add_instance tworzysz mapę kwadracików i dodajesz informację które kwadraciki omijać. Potem dzięki mp_grid_path ustalasz dla obiektu optymalną trasę omijającą przeszkody (oczywiście wróg będzie się poruszał wzdłuż kratek czyli w ośmiu kierunkach).
     
    To podejście jest trudne do zoptymalizowania, jak masz dużą mapę, dużo przeciwników i każdy z nich na poczekaniu aktualizuje sobie pozycję gracza i ciągle oblicza nową trasę może być to mocno niewydajne, ale z drugiej strony będziesz miał pewność że przeciwnik się nie zatnie (ew. uzna że np. nie ma możliwości dojścia do gracza)
     
  18. Lubię (+1)
    Ice Cube przyznał(a) reputację dla Threef w email   
    Nie Chell, to nie będzie już działać.
     
    Żeby wykorzystać to co pisałem potrzebujesz podstawowej znajomości PHP, jakiegoś serwera WWW z PHP i tylko kilku funkcji.
    W GM wysyłasz mail funkcją http_get() na adres twojego skryptu z parametrami GET. Wygląda to tak:
    wiadomosc = "Test maila" http_get("http://www.mojastrona.pl/skrypty/slijmail.php?wiadomosc="+string(wiadomosc)) Potem twój slijmail.php musi umieć to odtworzyć czyli odczytać parametry GET. http://php.net/manual/en/reserved.variables.get.php
    $message = $_GET['wiadomosc']; Ostatnia rzecz to podstawienie odebranych wiadomości pod funkcję mail() http://php.net/manual/en/function.mail.php
    mail('caffeinated@example.com', 'Temat', $message);  
  19. Lubię (+1)
    Ice Cube przyznał(a) reputację dla PsichiX w Test wydajnosci komputera   
    niektore gry, takie jak Ostateni TOmb Raidery na przyklad, maja w menu zakladke Benchmark i odpala ona scene gry z oczekiwanym maksimum elementow sceny i efektow, ktore moga wystapic w grze na raz, dziala to minute-dwie i po tym tescie user dostaje info jakie ustawienia jakosci sa najlepsze dla tego sprzetu i gra tez sama je zwykle aplikuje.
  20. Ooooj (-1)
    Ice Cube otrzymał(a) reputację od Uzjel w Show_Question   
    Yo!
     
    Czy idzie zmienic YES/NO  na TAK/ NIE   w show_question?
     
    pozdro
     
  21. Lubię (+1)
    Ice Cube otrzymał(a) reputację od Uzjel w zmienne w instancji nie dzialaja   
    juz mam!
    mialem dwa obiekty o takiej samej nazwie wszystko poprawilem i działa
    dzieki wielkie za pomoc!
     
×
×
  • Dodaj nową pozycję...