Itsuma Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Witam, mam następujące dwa problemy: - mam obiekty, które są "child"ami innego obiektu (kulki różnego koloru są pochodnymi obiektu "kula"), chcę im nadać ruch w zależności od odległości od innych obiektów tego typu, czyli jeśli kula zbliży się do innej kuli na wskazaną odległość to ma się zatrzymać. Problem polega na tym, że te obiekty również siebie traktują jako obiekt, który je blokuje i się nie ruszają. Jak zrobić, żeby każda kula "widziała" tylko inne kule, nie siebie. kod: if(distance_to_object(obj_kula)) > 48{ self.y += 5; } else{ self.y += 0; } - jak policzyć obiekty danego typu, ale tylko te, które znajdują się tylko w linii z x = 80? kod, który nie działa (produkuje nieskończoną ilość kul): if(instance_number(obj_kula.x = 80) = 8){ instance_create(80, 0, obj_kula_czerwona) } Z góry dziękuję. Ps.: na sugestię Uzjela edytowałem. Dzięki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Dla ułatwienia komunikacji polecam dołączyć kod który zastosowałeś. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Na drugie pytanie mogę odpowiedzieć: GML c=0 for(var i=0;i<instance_number(obj);i+=1) in=instance_find(obj,i) if(in.x==80) { c+=1 } if(c=8){instance_create(80, 0, obj_kula_czerwona)} Na pierwsze stwierdzam że w bardzo zły sposób robisz kolizje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Threef, - na pierwsze - a co dokładnie? Wiesz, nowy jestem, mi trzeba dokładnie; - na drugie - podałem kod, który wyjaśni po części o co mi chodzi Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Jeżeli kulki nie różnią się niczym poza grafiką to nie rób osobnych obiektów, a kolor (grafikę) określ jako własciwość obiektu (sprite_index). Zedytowałem kod w poprzednim poście żeby robił to co chcesz. No ale w pierwszym pytaniu Ci nie pomożemy. Nie dałeś żadnych informacji. ten kawałek kodu może dotyczyć wszystkiego. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Jeżeli kulki nie różnią się niczym poza grafiką to nie rób osobnych obiektów, a kolor (grafikę) określ jako własciwość obiektu (sprite_index). Zedytowałem kod w poprzednim poście żeby robił to co chcesz. No ale w pierwszym pytaniu Ci nie pomożemy. Nie dałeś żadnych informacji. ten kawałek kodu może dotyczyć wszystkiego. Dzięki za kod, sprawdzę i dam znać. Kulki niestety oprócz kolorów będą miały różne cechy. :( Nie wiem co więcej mogę napisać. Jeśli wpisuję ten kod np. do kuli czerwonej i daję reakcję na kulę np. niebieską to wszystko jest ok. Problem pojawia się jeśli zamiast niebieskiej dam obiekt parent lub też kulę czerwoną. Wtedy kula która ma być w ruchu nie rusza się, sama się blokuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 No bo robisz w bardzo zły sposób wykrywanie kolizji. Sprawdzanie dystansu nie ma w ogóle sensu bo musiałbyś sprawdzać z najbliższym obiektem. Kule są idealnie okrągłe? Jeżeli tak to: W GM:S popróbuj z fizyką GM8 zrób zwykłe kolizje. Ustaw maskę na okrąg, odznacz 'precise collision checking' i sprawdzaj przez event collision albo place_free() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 No bo robisz w bardzo zły sposób wykrywanie kolizji. Sprawdzanie dystansu nie ma w ogóle sensu bo musiałbyś sprawdzać z najbliższym obiektem. Kule są idealnie okrągłe? Jeżeli tak to: W GM:S popróbuj z fizyką GM8 zrób zwykłe kolizje. Ustaw maskę na okrąg, odznacz 'precise collision checking' i sprawdzaj przez event collision albo place_free() Czyli nie ma sposobu, żeby określić, że obiekt ma brać pod uwagę inne obiekty a nie siebie? Można to ominąć, wiem o tym, ale boję się, że później i tak będzie mi to potrzebne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Używanie distance_to_object(parent)) do takich rzeczy jest głupie. I nie robie się tego w ten sposób. Możesz w podobny sposób do tego co zrobiłem w pierwszym poście przeiterować przez wszystkie instance danego obiektu (dzieci też) i wykonywać swoje operacje. Np sprawdzać czy in.id!=id Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 http://www.gmlscripts.com/script/collision_circle_list Powinno pomóc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Używanie distance_to_object(parent)) do takich rzeczy jest głupie. I nie robie się tego w ten sposób. Możesz w podobny sposób do tego co zrobiłem w pierwszym poście przeiterować przez wszystkie instance danego obiektu (dzieci też) i wykonywać swoje operacje. Np sprawdzać czy in.id!=id Rozumiem, że pod pojęciem "jest głupie" masz na myśli - robią tak mniej doświadczeni użytkownicy GM, tak? ;) A drugie zdanie po polsku poproszę ;) Mam losowo pojawiające się kule o różnych kolorach, spadają one na dół, jednak gdy zbliżą się do kuli leżącej już na dole na daną odległość, zatrzymują się. Co powinienem sprawdzić za pomocą tego kodu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 GML if(place_meeting(x,y+48,parent)){y+=5} Widzisz, powiedziałeś o co chodzi i po kłopocie. A z tym że głupie to chodziło mi o to że są o wiele prostsze sposoby, które są przy okazji optymalniejsze i mniej zawodne. distance_to_object() powinno się stosować tylko pomiędzy 2 znanymi obiektami, walenie w parenta to bardzo zły pomysł. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Jeśli potem chcesz sprawdzać właściwości kul to nie możesz użyć place_meeting bo to nie zwraca id kolidowanej kuli tylko true lub false (jest kolizja albo jej nie ma) Więc zrób tak: GML var colizja = instance_place(x+hspeed, y+vspeed, kula); if (colizja != noone) { speed = 0; // zatrzyma się kula w której ten kod się wykonuje colizja.speed = 0; // zatrzyma się ta druga kula } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Niestety Panowie, nadal jest problem. Jeśli dam: if(place_meeting(x,y+48,obj_kula_niebieska*)){ y += 0; } else{ y += 5; } *lub inny kolor oprócz koloru kuli której kod dotyczy to kod działa i jest ok. Jeśli jednak dam: if(place_meeting(x,y+48,obj_kula*)){ self.y += 0; } else{ self.y += 5; } *lub obj_kula_czerwona, czyli parenta lub taki kolor jak kula której dotyczy to kula stoi i się nie rusza. :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Jakie ku*wa self? Gdzie ty ten kod wsadzasz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Jakie ku*wa self? Gdzie ty ten kod wsadzasz? Spokojnie. Self faktycznie nie jest potrzebne, źle wpisałem, ale nic nie zmienia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Ale bardzo dużo zmienia to w jakim obiekcie masz ten kod. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Ale bardzo dużo zmienia to w jakim obiekcie masz ten kod. Próbowałem i w parencie i w konkretnym kolorze kuli Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Maja 2014 Udostępnij Opublikowano 9 Maja 2014 Coś musisz mieć nie tak. Wsadź ten kod do parenta i pokaż zawartość tego co Ci wyskoczy po naciśnięciu przycisku "Show information" pod parent i mask. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 9 Maja 2014 Autor Udostępnij Opublikowano 9 Maja 2014 Coś musisz mieć nie tak. Wsadź ten kod do parenta i pokaż zawartość tego co Ci wyskoczy po naciśnięciu przycisku "Show information" pod parent i mask. Proszę: Information about object: obj_krysztal Sprite: Solid: true Visible: true Depth: 0 Persistent: false Parent: Mask: No Physics Object Step Event: execute code: if(place_meeting(x,y+48,obj_krysztal)){ y += 0; } else{ y += 5; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 10 Maja 2014 Udostępnij Opublikowano 10 Maja 2014 Zrób tak jak ja. Nadaj kulce ruch w dół vspeed = 1; w create a w stepie GML var colizja = instance_place(x+hspeed, y+vspeed, kula); if (colizja != noone) { speed = 0; } Tylko sprity piłki muszą mieć zaznaczone precise collisions Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 10 Maja 2014 Udostępnij Opublikowano 10 Maja 2014 @HuderLord Nie muszą mieć. Mogą mieć okrągłą maskę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 10 Maja 2014 Udostępnij Opublikowano 10 Maja 2014 A zapomniałem xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 10 Maja 2014 Autor Udostępnij Opublikowano 10 Maja 2014 A zapomniałem xD Niestety, nadal brak ruchu. Problem nie polega na tym jak nadać ruch i jak określić kolizję, tylko, że obiekt sam siebie traktuje jako przeszkodę. Kiedy dałem mu, żeby ignorował obiekty o x i y równym sobie, wtedy wszystko gra. Tylko wiem, że to działanie na około. Gdzieś wyszukałem, że w takich sytuacjach należy zastosować "call parent event", ale jeszcze nie wiem jak to się je. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 10 Maja 2014 Udostępnij Opublikowano 10 Maja 2014 No przecież instance_place ignoruje siebie. A nawet gdyby jakimś cudem nie ignorował to można dopisać if (colizja != noone && colizja != id) i po kłopocie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 10 Maja 2014 Udostępnij Opublikowano 10 Maja 2014 proponuje bys zrobil sobie extra gm przyklad, wedlog tego co ci radzili wyzej. jesli bedzie problem(a niewierze) to mozesz pokazacs ten pryklad a wtedy v zaraz bedzie jasne kdzie jest problem :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Itsuma Opublikowano 12 Maja 2014 Autor Udostępnij Opublikowano 12 Maja 2014 proponuje bys zrobil sobie extra gm przyklad, wedlog tego co ci radzili wyzej. jesli bedzie problem(a niewierze) to mozesz pokazacs ten pryklad a wtedy v zaraz bedzie jasne kdzie jest problem :) Witam, dziwna rzecz, zrobiłem wszystko od początku w nowym pliku, ale tak jak poprzednio i działa :) Nie wiem co to mogło być. Dzięki wszystkim za pomoc. Jak będę miał chwilę czasu, to wrócę do mojego 2 pytania, ale to za jakąś chwilę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę