Skocz do zawartości

candy

Użytkownicy
  • Postów

    491
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez candy

  1. Jak gadałem z tym wielkim kubkiem na lewo, to w ciągle wyskakiwał mi ten komunikat. Dopiero gdy trzymałem ciągle klawisz odpowiedzialny za ruch oraz co chwila klikając na ok, udało mi się to wyłączyć. Postać zacina się na drzewach. Skorzystaj z maski. Plus to co post wyżej, na mapie nic się nie dzieje. Dodaj bonusy, więcej przeszkód oraz jakieś elementy dekoracyjne (nie tylko same drzewa). Przydałoby się także ładne menu.
  2. Masz pliczek: https://gmclan.org/up4155_12_spawn.html Wszystko wytłumaczyłem w komentarzach.
  3. Gdy mobków jest maksymalnie 16, to można skorzystać z funkcji choose: GML //===ALARM o_spawn zmieniamy funkcję instance_create() instance_create(tab[_a].x,tab[_a].y,choose(mob1,mob2,mo3,...mob16)) A gdy jest ich więcej niż 16, tworzysz nową tablicę (tymczasową), która będzie przechowywać object_index mobków: GML //===ALARM o_spawn var _tab2; _tab2[0]=mob1; . . ._tab2[xxxx]=mob(xxx+1); //znowu zmieniamy instance_create() instance_create(tab[_a].x,tab[_a].y,_tab2[floor(random(xxx+1))]) Kod _a=floor(random(i)); w pierwszym kodzie zamień na _a=floor(random(i+1)); Inaczej nigdy nie będzie brany pod uwagę ostatni dodany o_spawn_2.
  4. Tworzymy obiekt odpowiedzialny za spawn mobków, np o_spawn. Tworzymy n obiektów o_spawn_2. GML //=== CREATE o_spawn_2=== o_spawn.tab[o_spawn.i]=id; o_spawn.i+=1; Stworzyliśmy tablicę tab w o_spawn, która przechowuje id obiektów o_spawn_2. Oczywiście wcześniej w o_spawn trzeba zadeklarować zmienną i. Teraz idziemy do o_spawn. Załóżmy, że wywołanie alarm[0] powoduje stworzenie mobka. Teraz piszemy w alarmie: GML //=== ALARM o_spawn=== // tworzymy zmienną tymczasową _a var _a; // teraz będziemy losować liczbę całkowitą z przedziału od 0 do i // poczytaj w helpie co te funkcje dokładnie robią // wylosowana liczba będzie odnosić nas do jakiejś komórki tablicy tab _a=floor(random(i)); // tworzymy mobka o współrzędnych takich samych jakie ma o_spawn_2, którego id znajduje się w komórce o indeksie _a (tablicy tab) instance_create(tab[_a].x,tab[_a].y,o_mob) Zakładam, że na mapie będzie co najmniej jeden obiekt o_spawn_2. Kod ten pozwoli Ci obsłużyć dowolną ilość spawnów.
  5. 1. Stwórz zmienną text. Przechowuj w niej nazwę pliku wraz z rozszerzeniem, na przykład: GML //===create=== text="jsakjdk.txt"; //===wczytywanie pliku=== file_text_open_append(text) 2. string_length(zmienna) E: Źle zrozumiałem pierwsze.
  6. Co do kolejnego pytania. Możesz zrobić to podobnie jak napisałem kilka postów wyżej albo tak: GML with all if(variable_local_exists("nazwa zmiennej")) nazwa_zmiennej= coś; Ważne, aby argument funkcji variable_local_exists() był stringiem.
  7. Co dokładnie Ci nie działa? Może po prostu nie zmieniłeś wartości zmiennej amax?
  8. Czyli musisz stworzyć dwa obiekty jeden w dużym view, a drugi w małym. Wtedy kod powinien zadziałać.
  9. Ponieważ pod quest[0] masz string, a ja myślałem, że ma być liczba. Dlatego się krzaczy. Masz pliczek, mam nadzieję, że o to Ci chodziło: https://gmclan.org/up4155_12_questy.html. Musisz to później przerobić na własne potrzeby.
  10. Czy to działa tak? Masz dwa viewy na sobie i możesz przechodzić z jednego do drugiego, na przykład, po naciśnięciu jakiegoś klawisza?
  11. Może tak: GML //===step if(x>view_xview[2]) visible=false; else visible=true; Nie gwarantuję, że kod jest poprawny. Nigdy czegoś takiego nie robiłem.
  12. GML // create a=false; //aktualna pozycja amax=10;//wymiar tablicy (tablica ta ma 11 elementów od (0 do 10) //klawisz w lewo if(keyboard_check_pressed(vk_left)&&quest[0]) { a+=1; if(a>amax)// jeżeli przekroczymy tablicę, to wróć na początek tablicy a=false; while(!quest[a]) { a+=1; if(a>amax) a=false; } } &&quest[0]- to jest po to, aby pętla nie była wykonywana w nieskończoność gdy wszystkie jej elementy mają wartość zero. Jeżeli mają być jakieś questy, to będą one w końcu dopisywane od komórki z indeksem 0, przynajmniej tak jest dla mnie logicznie. Gdy pierwsza komórka ma wartość zero, to nie ma żadnych questów i tablica nie będzie sprawdzana. Pod zmienną a masz numer indeksu interesującej Ciebie komórki. Resztę zostawiam Tobie.
  13. GML //event rysowania/wyswietlania questlog'a j=false; for(i=0;i<5;i+=1)//robimy pętle { if(quest)//sprawdzamy czy quest jest dostępny { draw_text(x,y+j*20,text_quest)//wyświetl text j+=1; } } Dzięki zmiennej j, text jest wyświetlany jeden pod drugim.
  14. Możesz jeszcze przerzucić draw_set_font() do create. Po co ma w kółko powtarzać tę linijkę, jeżeli i tak nic nowego to nie wnosi. Wystarczy, że raz wywołasz tę funkcję. Font się nie zmieni, jeżeli nie wywołasz znowu taj funkcji z innym argumentem.
  15. karolo320 Pytanie pierwsze: GML with all if(sqrt(pow((x-global.x),2)+pow((y-global.y),2)))<=50) { if(object_index!=nazwy obiektów których nie da się rozwalić) zmienna-=xxx; else instance_destroy() } Co do drugiego. Może spróbuj rysować kwadrat za pomocą DRAW, nie będzie potrzeby tworzenia nowego sprite'a. GML draw_rectangle(x,y,x+200,y+200,0)
  16. LionX Dagger, masz rajcę, rozwali wszystko. Ale zawsze można dodać if, w którym sprawdzi się jaki jest object_index obiektu: GML with all if(object_index!=object_nieniszcz1&&object_index!=object_nieniszcz2 idt) //cała reszta kodu</span> Przy większej ilości obiektów, których nie da się rozwalić, if będzie stosunkowo długi, ale jeżeli jest ich kilka to nie ma problemu. Elevator Równanie okręgu: x^2+y^2=r^2. Z tego wynika, że odległość r wynosi: r=PIERWIASTEK(x^2+y^2). Interesuje nas całe pole (wraz z obwodem) zakreślone przez tą krzywą, dlatego PIERWIASTEK(x^2+y^2)<=r. Po prostu czysta matematyka. karolo320 Powinno być power(), sry.
  17. Czyli , ustawiasz w create dynamitu dynamit=false, gdy się wysadza ma dynamit=1. Potem sprawdzasz jakieś tam inne obiekty czy mają kolizję z dynamitem gdy ten jest wysadzany. Załóżmy, że w grze jest 200 obiektów, jakie możemy wysadzić. Wyobraź sobie ile to linijek kodu jeżeli mamy sprawdzać każdy obiekt z osobna. Po za tym sprawdzanie kolizji jest wykonywane co krok (jeżeli używasz eventu collision). Po co dodatkowo sprawdzać taką ilość kodu co krok. Ja tam myślę, że lepiej wykonać kod tylko raz, podczas wysadzania dynamitu. To tylko 4 linijki kodu. I jeszcze jedno, co jest niezrozumiałego w kodzie, którym podałem?
  18. GML //kod podczas wysadzania global.xx=x;//przypisz x dynamitu do globalnej global.yy=y; with all if(sqrt(pow((x-global.x),2)+pow((y-global.y),2)))<=50)//sprawdź odległość instance_destroy()
  19. GML if(instance_number(object1)) { view_xview[0]=xxxx; view_yview[0]=yyyy; } else if(instance_number(object2)) { view_xview[0]=xxxx2; view_yview[0]=yyyy2; } //itd</span></span> To będzie tak mniej więcej wyglądało.
  20. Najprościej to będzie sprawdzać jaki jest direction przed zderzeniem z kwadratem, a następnie nadanie mu nowej, odpowiedniej wartości: GML if(direction==xxxx) direction=yyyy; else if(direction==xxxx2) direction=yyyy2; //itd</span> Potem możesz spróbować skrócić kod (znaleźć jakieś zależności pomiędzy kolejnymi if'ami).
  21. Podpowiem Ci tak: Teraz spróbuj pomyśleć jak to wykorzystać.
  22. Możesz jeszcze zrobić tak. Nazywasz obiekt "guziki" (albo inaczej). Ustawiasz mu sprite, w którym będą wszystkie grafy guzików. Wstawiasz obiekt ten, na przykład, jeden pod drugim co 32 px. W CREATE dajesz kod: GML image_speed=false; image_index=(y-yyyyyy)/32; Pod yyyyyy wstawiasz y obiektu guzik, który jest najwyżej w roomie. Jak widzisz pod image_index będą wpisywane liczy 0,1,2,3... .Potem w evetcie z naciskaniem myszy: GML if(image_index==0) { //akcja 1 } else if(image_index==1) { //akcja 2 } //itd</span> Musisz tylko pamiętać, że ustawienie guzików, względem siebie, musi być liniowe. To znaczy, że muszą być oddalone od siebie o tą samą wartość x albo y, bo inaczej kod nie zadziała.
  23. https://gmclan.org/index.php?pliki=4&s1...=DESC&s4=id ostatni z dołu
  24. W "przykładach" jest przykład. Poszukaj.
  25. Create jest wykonywany tylko raz, podczas tworzenia obiektu. Musisz przerzucić if do STEP albo do eventu z kolizją.
×
×
  • Dodaj nową pozycję...