Gooman Opublikowano 14 Czerwca 2004 Udostępnij Opublikowano 14 Czerwca 2004 Mam problem. A mianowicie stworzyłem prosty skrypt losowego tworzenia przeszkód na poziomie kod wygląda następująco: xx=32;yy=32*3; repeat(2) { do { i = round(random(28));j = round(random(23)) if !position_meeting(xx+32*i,yy+32*j,all) {instance_create(xx+32*i,yy+32*j,przeszkoda)} } until (!position_meeting(xx+32*i,yy+32*j,all)) } Jak chce wykorzystać ten sam skrypt do tworzenia bonusów to funkcja się zapętla, a gra w konsekwancji się zacina a jedyne co zmieniam w kodzie to obiekt który ma tworzyć. Zna ktoś może przyczyne tego ? :glare: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Choosen Opublikowano 15 Czerwca 2004 Udostępnij Opublikowano 15 Czerwca 2004 Przyjzyj sie dokladnie co napisales... xx=32;yy=32*3; // podejrzewam ze to szerokosc siatki i pozycja startowa repeat(2) // powtarzaj 2 razy zestaw instrukcji { do // zrob { i = round(random(28));j = round(random(23)) // wylosuj numer kratki if !position_meeting(xx+32*i,yy+32*j,all) // sprawdz czy pozycja jest wolna {instance_create(xx+32*i,yy+32*j,przeszkoda)} // jesli nie to zajmij pozycję } until (!position_meeting(xx+32*i,yy+32*j,all)) // rob to tak dlugo az pozycja bedzie wolna } Jesli pozycja była juz zajęta to w dane miejsce nic nie jest wstawiane.Jesli natomiast byla wolna, to wstawiamy tam obiekt czyniąc ją tym samym zajętą. Skrypt konczy się kiedy dana pozycja pozostaje wolna... czyli nigdy :blink: Sprubuj tak : xx=32;yy=32*3; repeat(2) { do { i = round(random(28));j = round(random(23)) if !position_meeting(xx+32*i,yy+32*j,all) {instance_create(xx+32*i,yy+32*j,dany_obiekt)} } until (position_meeting(xx+32*i,yy+32*j,dany_obiekt)) } Jesli na koncu skryptu sprawdzimy ze w danym miejscu jest obiekt jaki wstawiales, bedzie to oznaczac ze dana pozycja BYŁA a nie jest wolna i to własnie chciales sprawdzac pisząc ten skrypt. P.S. Zamiast dany_obiekt wpisz argument0 i wtedy obiekt jaki chcesz stworzyc bedziesz mogl podawac jako argument bez potrzeby ingerecji w kod. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gooman Opublikowano 15 Czerwca 2004 Autor Udostępnij Opublikowano 15 Czerwca 2004 Heh. Nie moge się z Tobą zgodzić Choosen. Oto opis funkcji until: The statement (which can also be a block) is executed until the expression is true. The statement is executed at least once. Be careful with your do loops. You can easily make them loop forever, in which case your game will hang and not react to any user input anymore. Jak widać w jej opisie skrypt jest wykonywany dopóki warunek jest spełniony. Czyli w moim wypadku gdy dana pozycja jest wolna. W przypadku gdy w danej pozycji jest utworzony obiekt warunek przestaje być spełniony i tym samym skrypt przestaje być wykonywany. Until w moim skrypcie upewnia sie, czy zdefinoiowana przeze mnie ilość obiektów została utworzona. Gdy wybrałem aby utworzyło 300 obiektów to właśnie taką ilość utworzyło przy moim skrypcie, a gdy sprawdziłem Twój zamiast 300 utworzyło mi 865 z pierwszą próba a za drugą gra się zacieła . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Choosen Opublikowano 15 Czerwca 2004 Udostępnij Opublikowano 15 Czerwca 2004 Ależ ja naprawdę wiem jak działa ta funkcja. Problem jest z Twoją until (!position_meeting(xx+32*i,yy+32*j,all)) Skoro w pozycji (xx+32*i,yy+32*j) stworzyles przed sekundą obiekt... to funkcja position meeting(xx+32*i,yy+32*j,all) zwróci TRUE natomiast funkcja !position_meeting(xx+32*i,yy+32*j,all) zwróci FALSE nakazując tym samym ponowne wykoannie pętli Moj skrypt moze nie dzialac dokladnie dlatego ze nie znam całosci programu. Trudno oczekiwac ze ktos znajdzie blad w skrypcie ktorego zmienne nie są objasnione a struktora programu ,w ktorym bedzie on zastosowany jest nieznana. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 15 Czerwca 2004 Filar Społeczności Udostępnij Opublikowano 15 Czerwca 2004 Tak jest, sprawdziłem, to co napisał Choosen i rzeczywiście to prawda, czyli pętla jest wykonywana aż warunek nie osiągnie true. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gooman Opublikowano 15 Czerwca 2004 Autor Udostępnij Opublikowano 15 Czerwca 2004 Choosen zwracam honor, miałeś racje. Znalazłem już w czym tkwił błąd i usunąłem go na swój sposób. Temat można uznać za zamknięty. Edit by BWO: I poraz kolejny nasz niestraszony Czołzen =] sprostał swemu zadaniu =]=] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi