H2S04 Opublikowano 6 Listopada 2020 Udostępnij Opublikowano 6 Listopada 2020 Bry. Walczę z tym shitem, i już nie wiem ocb. WG debug_message omija mi Goto = true {...}... Ale po kolei. Chcę by itemki łączyły się jak np. w Graveyard Keeper, po prostu leciały do siebie, i zwiększały ilość. Poniekąd kod działa, jednak jest mały problem... Czasami obiekty są blisko siebie i nie chcą się połączyć, dopiero jak stworzę dwa lub trzy nowe i któreś się złączą, to w tedy reszta może się połączyć. Coś chyba pokićkałem w kodzie. Pozdrawiam if FindMultiple2 == true{ // Aktywowanie szukania var i, obj; for (i = 0; i < instance_number(o_Wood); i++){ obj[i] = instance_find(o_Wood,i); // Ustalenie numeru szukanego obiektu if obj[i].Amount >= Amount{ // #1 Jezeli Ilosc w danym obiekcie jest wieksza lub rowna FindMultiple2 = false; // Wylacz szukanie Mx = obj[i].x; // Pobierz x My = obj[i].y; // Pobierz y GoTo = true; // Wlacz ruch obiektu timer = 30; // ustaw timer na 30; } else { FindMultiple2 = true; // #1 Jeżeli nie to szukaj od nowa } } } if GoTo = true{ // Jeżeli ruch jest wlaczony if point_distance(x,y,Mx,My) > 10 and point_distance(x,y,Mx,My) < 250{ // Jezeli odleglosc od obiektu jest wieksza od 10 i mniejsza od 250 direction = point_direction(x,y,Mx,My); // obroc sie w jego strone speed = 20; // idz } else { // jezeli nie if point_distance(x,y,Mx,My) <= 10 { // jezeli jest mniejsza od 10 GoTo = false; // wylacz ruch speed = 0; // wylacz speed col = collision_circle(x,y,10,o_Wood,false,true); // ustal kolizje if col{ // jezeli jest kolizja col.Amount += Amount; // dodaj do kolizji swoja ilosc Amount = 0; // ustal ja na wszelki wypadek na 0 instance_destroy(); // zniszcz sie } } } } // tutaj wiadomo ocb if timer >= 0 { timer -= 1; } else { FindMultiple2 = true; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Listopada 2020 Administratorzy Udostępnij Opublikowano 7 Listopada 2020 Jak dasz show_debug_message("cokolwiek"); przy "GoTo = true; // Wlacz ruch obiektu" to pokazuje, że ten kod się wykonuje ? Nie bardzo też wiem co jest w zmiennej "Amount", może problem leży właśnie tutaj - porównujesz wszystko z jakąś jedną wartością. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 7 Listopada 2020 Autor Udostępnij Opublikowano 7 Listopada 2020 EDIT: Po napisaniu inwentarza, nie idzie czasami podnieść obiektu bo fiksuje. Będę musiał napisać to od nowa -.- A jak nie będzie działać, to po prostu z tego zrezygnuje... Amount to po prostu zmienna, która przechowuje ilość. Przy stworzeniu obiektu jest to 1, bo jest jeden obiekt i tyle ma pobrać przy łączeniu się chyba, że po złączeniu ma więcej. Właśnie po napisaniu show_debug_message, pokazuje mi, że kod GoTo = True, się nie wykonuje, mimo, że timer działa... Zaraz napiszę wszystkie debugi i eytuję post dla wglądu. (czy mi się wydaje, czy timer dostaje szału? bo widzę po debugu, tu ma 30 tu nagle 17 tu nagle 30...) (Kurła, wszytko się rozwala tutaj, dlatego wrzucam debug do pliku tekstowego i tutaj kod, by nie walnąć posta na całą stronę, bo spoiler wszystko psuje, a nie chce robić śmietnika...) show_debug_message(" Start Step "); show_debug_message(" Nastepe if FindMultiple 2 == true"); if FindMultiple2 == true{ // Aktywowanie szukania show_debug_message(" If Find multiple2 == true "); var i, obj; show_debug_message(" Ustal var i, obj, "); show_debug_message(" start 'FOR' "); for (i = 0; i < instance_number(o_Wood); i++){ show_debug_message(" ustalanie obj[i] "); show_debug_message(" [i] ="+string(i)); obj[i] = instance_find(o_Wood,i); // Ustalenie numeru szukanego obiektu show_debug_message(" obj[i] ="+string(obj[i])); show_debug_message(" Przejscie do szukania obiektu z iloscia (if obj[i].Amount >= AMount "); if obj[i].Amount >= Amount{ // #1 Jezeli Ilosc w danym obiekcie jest wieksza lub rowna show_debug_message(" Jezeli obiekt z iloscia > od mojej ilosci: obj[i].Amount, obj[:"+string(i)+"]."+string(obj[i].Amount)); FindMultiple2 = false; // Wylacz szukanie show_debug_message(" Zmien FindMultiple z true na false "); Mx = obj[i].x; // Pobierz x show_debug_message(" ustal MX = obj[i].x "); My = obj[i].y; // Pobierz y show_debug_message(" ustal My = obj[i].y "); GoTo = true; // Wlacz ruch obiektu show_debug_message(" GoTo = true "); timer = 30; // ustaw timer na 30; show_debug_message(" Ustaw timer na 30 "); show_debug_message(" Koniec If Amount >= Amount "); } else { show_debug_message(" Else "); FindMultiple2 = true; // #1 Jeżeli nie to szukaj od nowa show_debug_message(" FindMultiple = True // szukaj od nowa "); } show_debug_message(" Koniec For "); } show_debug_message(" Koniec Multiple2 == true "); } show_debug_message(" KONIEC SZUKANIA "); show_debug_message(" . "); show_debug_message(" . "); show_debug_message(" . "); show_debug_message(" Przejscie do GoTo = true // nastepna linijka powinna byc jezeli GoTo = true "); if GoTo = true{ // Jeżeli ruch jest wlaczony show_debug_message(" jezeli GoTo = True "); show_debug_message(" Przejscie do obliczania odleglosci "); if point_distance(x,y,Mx,My) > 10 and point_distance(x,y,Mx,My) < 250{ // Jezeli odleglosc od obiektu jest wieksza od 10 i mniejsza od 250 show_debug_message(" Jezeli odleglosc > 10 i < 250 "); direction = point_direction(x,y,Mx,My); // obroc sie w jego strone show_debug_message(" uslal dira "); speed = 20; // idz show_debug_message(" ustal speed "); show_debug_message(" Koniec GoTo = True "); } else { show_debug_message(" ELSE ");// jezeli nie show_debug_message(" Przejscie do point distance "); if point_distance(x,y,Mx,My) <= 10 { // jezeli jest mniejsza od 10 show_debug_message(" Jezeli Point Distance < 10 "); GoTo = false; // wylacz ruch show_debug_message(" GoTo = false "); speed = 0; // wylacz speed show_debug_message(" speed = 0 "); col = collision_circle(x,y,10,o_Wood,false,true); // ustal kolizje show_debug_message(" Ustalam col= colision "); show_debug_message(" Przejscie do Col "); if col{ // jezeli jest kolizja show_debug_message(" If Col "); col.Amount += Amount; // dodaj do kolizji swoja ilosc show_debug_message(" Pobierz ilosc i dodaj do col "); Amount = 0; // ustal ja na wszelki wypadek na 0 show_debug_message(" Ulstal na 0 "); instance_destroy(); // zniszcz sie show_debug_message(" usun sie "); show_debug_message(" kONIEC COL "); } show_debug_message(" KONIEC IF POINT DISTANCE "); } show_debug_message(" KONIEC ELSE "); } show_debug_message(" KONIEC GOTO przed nawiasem }"); } show_debug_message(" KONIEC CALEGO KODU GO TO "); show_debug_message(" . "); show_debug_message(" . "); show_debug_message(" . "); // tutaj wiadomo ocb show_debug_message(" Przescie do timera "); if timer >= 0 { show_debug_message(" Jezeli Timer >= 0 "); show_debug_message(" Timer = "+string(timer)); timer -= 1; show_debug_message(" Odejmij -1 "); show_debug_message(" koniec odejmowania timera "); } else { show_debug_message(" else // jezeli timer <= 0 "); FindMultiple2 = true; show_debug_message(" szukaj obiektu // FindMultiple2 = true "); show_debug_message(" koniec Else "); } show_debug_message(" Koniec Timera "); show_debug_message(" KONIEC STEPU "); DEBUG MESSAGE.rtf Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Listopada 2020 Administratorzy Udostępnij Opublikowano 8 Listopada 2020 To już nie jest drobnostka Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 8 Listopada 2020 Autor Udostępnij Opublikowano 8 Listopada 2020 1 godzinę temu, gnysek napisał: To już nie jest drobnostka E tam, nie odblokowywało itemu do zebrania, na razie borykam się z innym problemem ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Listopada 2020 Administratorzy Udostępnij Opublikowano 9 Listopada 2020 Wydzieliłem osobny temat, za długie posty były. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 11 Listopada 2020 Autor Udostępnij Opublikowano 11 Listopada 2020 Nie ma problemu, jeszcze do tego wrócę Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Listopada 2020 Administratorzy Udostępnij Opublikowano 11 Listopada 2020 Generalnie to trzeba też znaleźć sposób, by do tego zagadnienia podejść. Ja bym od razu odrzucił szukanie w każdej klatce, przez każdy z obiektów, jakiegoś innego najbliższego. Czemu? Bo to od razu powoduje taki problem, że kilka obiektów na raz znajdzie siebie i każdy poleci w inną stronę. Ugryzł bym to inaczej. Takiego połączenia chcesz przecież dokonać, gdy pojawią się dwa przedmioty blisko siebie - nigdy, gdy jest jeden. Kluczem jest właśnie tutaj "pojawią się". Ja bym w momencie tworzenia nowego obiektu sprawdzał, czy w granicy X od niego, za pomocą collision_circle albo collision_circle_list, które mają argument NOTME wykluczający obecną instancję (w tym przypadku - świeżo stworzoną). var near = collision_circle(x,y,300,drewno,false,true); if (near > 0) { near.amount += amount; instance_destroy(); } I po sprawie. Jak chcesz animować, że one się przyciągają, to nieco wiecej zabawy i wtedy collision_circle_list się przyda, żeby znaleźć wszystkie w tej samej strefie, oraz wykluczać np. te które się już "animują" (o ile tak chcesz). H2S04 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 31 Grudnia 2021 Autor Udostępnij Opublikowano 31 Grudnia 2021 Brak czasu tamten projekt zabił, ale dało mi to trochę nauki, i teraz bawię się kolejnym, ale dało to zawsze jakaś naukę ? Uzjel 1 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ę