Skocz do zawartości

Opisek

Użytkownicy
  • Postów

    72
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Opisek

  1. Witam w tym poście chciałbym zrobić poradnik, a w tym poradniku chciałbym wprowadzić nowych do gm'a. W tym poradniku pokażę wam sztuczną inteligencję, pieniądze oraz wszystkie możliwości okien dialogowych. A więc zaczynajmy! Po pierwsze tworzymy obiekt Gracz i dajemy mu jakiś obrazek. [Tworzymy 5 eventów w obiekcie Gracz Key Press Left Key Press Right Key Press Up Key Press Down Key Relase Any Key W Left wkładamy pierwszy klocek z zakładki Move w dziale Move czyli Move Fixed. Skoro to przycisk strzałki w lewo to w tym co nam się pokaże po przesunięcia klocka Move Fixed do eventu zaznaczamy strzałkę w lewo i pod tym ustalamy prędkość, ja ustalę 3. Z resztą eventów Key Press robimy to samo, w Right poruszanie się w prawo, w up w górę, a w down w dół. W event Key Relase Any Key wkładamy ten sam klocek, ale klikamy w nim klocek po środku strzałek, a prędkość ustalamy na 0. W ten sposób uzyskujemy podstawowe chodzenie] [Teraz tworzymy obiekt Kamien a w nim trochę pod nazwą klikamy Solid W obiekcie Gracz tworzymy event Colision -> Kamien. W tym evencie wstawiamy klocek z zakładki Move, z działy Jump czyli Bounce W ten sposób uzyskujemy odbijanie się od skały] [Teraz stworzymy mini-sklepik. U bohatera tworzymy event kliknięcia jakiegoś przycisku, a w nim z zakładki Control, z działu Code wybieramy Execute Code i do niego wklejamy to: GML wybor = 0; menu = show_message_ext("Co chcesz kupić?","Broń?","Teren?","Nic?"); if menu == 1 { wybor=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie"); if (wybor == 1) and (score>20) and (global.bron == 0) { global.bron = 1 wybor = 0 score -= 20; } } else if menu == 2 { wybor = show_message_ext("To będzie kosztowało 10 kryształów. Czy potwierdzasz zakup?","Tak","","Nie"); if (wybor == 1) and (score > 10) and (global.teren < 3) { global.teren += 1; wybor = 0; score -= 10; } } W evencie create bohatera do Execute Code wklejamy to: GML global.odstep=get_integer("Jaki ma być odstęp między strzałami wroga?","100") global.bron=0 wybor=0 global.teren=0 global.strzal Teraz tłumaczenie! get_integer to pytanie o numerek global.odstep,wybor, global.teren i global.bron to zmienne z początkową wartością 0 Gdy klikniemy przycisk sklepiku pojawi się pytanie z trzema przyciskami. Co chcesz kupić? [broń?] [Teren?] [Nic] Wywołuje to kod show_message_ext("","","","") Przed nim mamy menu= z czego wychodzi menu=show_message... To sprawia, że zmienna menu dostanie wartość po kliknięciu przycisku. [broń?] - 1 [Teren?] - 2 [Nic?] - 3 Po tym jest napisane if menu=1 {wybor=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie") If oznacza jeżeli, więc kod oznacza jeżeli menu=1.... if to komenda menu=1 to tekst logiczny a po tekście logicznym stawiamy akcję w tych nawiasach {} W nawiasach mamy ten sam kod, który nas pyta o to co chcemy kupić, ale tutaj mówi do nas To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup? i mamy dwa przyciski: Czy potwierdzasz zakup? [Tak] [Nie] W kolejnym if'ie game maker sprawdza czy mamy powyżej 20 monet oraz czy nie zakupiliśmy już tego produktu. Jeżeli wszystko się zgadza, kod odbiera nam 20 monet, a zmianną bron zamienia na 1. Dalej mamy tak samo tylko tym razem game maker sprawdza czy mamy ponad 10 krzyształów i czy nie mamy maksymalnego poziomu terenu. ] [ Skoro mamy sklepik, to czas na walutę. Tworzymy obiekt i dajemy mu obrazek. Tworzymy także drugi obiekt, ale jego teksturka powinna być nie widoczna, lecz jednak istnieć. U mnie to jest czarny piksel. W obiekcie punktu tworzymy event Colision --> Gracz, a do niego wsadzamy klocek z zakładki main1 z działu Objects na pierwszej pozycji z drugiego rzędu czyli Change Instance ---> Zamiennik_Kryształu (czyli ten piksel) oraz Execute Code w którym wpisujemy po prostu GML score+=1; W zamienniku kryształu dajemy natomiast Colision ---> Wrog, a w tym Change Instance --> Kryształ W ten sposób tworzymy kryształ, który po wejściu na niego znika i dodaje punkt, a gdy najedzie na niego wróg znów się pojawia ] [Czas na wrogów! Pierwszy krok sztucznej inteligencji, czyli chodzenie za graczem omijając przeszkody. GML mp_potential_step_object (Gracz.x, Gracz.y, 1, Kamien) Ten kod ^^^ wstawiamy do step. Słowo potential niektórym kojarzy się z inteligenncją. Kod mp_potential_step_object to podążanie do danego punktu omijając przeszkody. Pierwszy argument (Gracz.x) - koordynat x, do której ma podążać obiekt. Drugi argument (Gracz.y) - koordyt y, do której ma podążać obiekt. Trzeci argument (1) - prędkość z jaką ma podążać obiekt. Czwarty argument (Kamien) - obiekt, który ma omijać podczas podążania do podanej koordynacji. Teraz drugi stopień sztucznej inteligencji. Tworzymy event Begin Step, a w nim w Execute Code: GML if global.strzal == 1&&global.bron == 1&&distance_to_object(Gracz)<=100; { alarm[4]=1; } To spowoduje nam nadanie alarmowi 4 wartości 1, kiedy broń będzie aktywna, a gracz będzie przybliżony do wroga o minimum 99. Tworzymy event alarm 4 a w nim kod: GML global.strzal=2 alarm[4]=global.odstep; oraz alarm 5: GML instance_create(Wrog.x,Wrog.y,Strzal_Zly) global.strzal=1 Teraz tworzymy obiekt Strzal_Zly, a w nim dajemy to: Event Create > Zakładka main2 > Dział Timing > 1 czyli Set Alarm Pierwsze okienko - 100 Drugie okienko - Alarm 3 Alarm 3 > Zakładka main1 > Dział Objects > 2 w 2 rzędzie czyli Destroy the instance To wszystko spowoduje usunięcie się z planszy strzału po minięciu 100 kroczków. Step > Execute Code GML mp_potential_step_object (Gracz.x, Gracz.y, 2, object2) Zderzenie z obiektem t1,t1,t1 > odbicie * Te obiekty w następnych nawiasach W ten sposób uzykujemy sztuczną inteligencję wrogów! ] [Tworzymy jeszcze trzy obiekty; t1,t2 i t3, każdy z nich ma mieć zaznaczone solid, a ich tekstura, najlepiej żeby była taka sama jak kamień. W t1, w evencie Step, w Execute Code dajemy: GML if global.teren == 1 {instance_destroy();} To spowoduje czekanie aż zmienna global.teren będzie miała wartość 1 i wtedy usunięcie się z planszy. W t2 i t3 robimy to samo, lecz tym razem global.teren == 2, a w t3 == 3. U gracza i wroga robimy eventy Zderzenia z każdym z tych bloczków, a w nich odbicie jak w drugich nawiasach.] [ Tworzymy obiekt pocisk, a w nim: Create>Move>Move>Pierwsze czyli Move Fixed Zaznaczamy wszystkie strzałki i ustalamy prędkość. Colision ---> Kamien>main1>Objects>Destroy the instance ^^^ Robimy tak samo jak tutaj ^^^ przy zderzeniu z t1,t2,t3 Obiekt Gracz>Przycisk do strzału>Control>Code>Embed Code GML if global.bron == 1 {instance_create(Gracz.x,Gracz.y,pocisk)} I mamy strzelanie i tym samym całą grę! Jeszcze tylko u gracza przy zderzeniu ze złym pociskiem w kodzie score-=10, a u wroga przy zderzeniu z pociskiem score+=10 ] Przykład: (Oczywiście całkowity zakaz udostępniania projektu[chyba, że dosyć go przerobiliście, ale i tak dajecie mnie i ten post w creditsach]bez mojej wiedzy, zgody i w waszym imieniu) Klikunio :D P.S. Wprowadziłem sobie jeszcze prostą konsolkę do kodów pod eventem Key Relase Ctrl u Gracza, można sobie zobaczyć :)
  2. Thx, tylko musiałem jeszcze trochę pozmieniać, nie wszystkie get_string trzeba było zmienić o czym się domyśliłem, a w room'ach nie potrzeba było previous i next, ale dzięki za ten get_integer! A oto kod :) : GML global.pas = get_string("Please a password","") if global.pas = "Money&Lives" {global.ml = get_integer("Please a number","") score+=global.ml; lives+=global.ml} if global.pas = "Previous" {global.rp = get_integer("Please a number","") room-=global.rp} if global.pas = "Next" {global.rn = get_integer("Please a number","") room+=global.rn} if global.pas = "Money" {global.m = get_integer("Please a number","") score+=global.m} if global.pas = "Lives" {global.l = get_integer("Please a number","") lives+=global.l}
  3. Witam! Mam pewien problem, ale opiszę go po kodzie; GML global.pas = get_string("Please a password","") if global.pas = "Money&Lives" {score+=1000000; lives+=1000000} if global.pas = "Previous" {global.rp = get_string("Please a number","") room_goto_previous=global.rp} if global.pas = "Next" {global.rn = get_string("Please a number","") room_goto_next=global.rn} Powyższy kod jest w evencie Relase backspace, pierwszy if działa czyli kod na dodawnie monet i żyć, ale drugi i trzeci nie działają. Wygląda to tak: 1) Puszczam Backspace 2) Pojawia się napisz "Please a password" 3) Wpisuję a ) Next b ) Previous 4) Pojawia się napis "Please a number" 5) Wpisuję jakiś numerek 6) Nic się nie dzieje, a powinno a ) Przejść o taki numerek jaki dałem plansz do przodu b ) Przejść o taki numerek jaki dałem plansz do tyłu O co tutaj chodzi? Proszę o jak najszybszą pomoc, a z góry dzięki B) ---------------------------------------------------------------------------------------------- Zmieniłem to tak: GML global.pas = get_string("Please a password","") if global.pas = "Money&Lives" {global.ml = get_string("Please a number","") score+=global.ml; lives+=global.ml} if global.pas = "Previous" {global.rp = get_string("Please a number","") room_goto_previous=global.rp} if global.pas = "Next" {global.rn = get_string("Please a number","") room_goto_next=global.rn} if global.pas = "Money" {global.m = get_string("Please a number","") score+=global.m} if global.pas = "Lives" {global.l = get_string("Please a number","") lives+=global.l} i taka sama sytuacja w Money, Lives oraz Money&Lives Jakby co to mam Game Maker 8.0 Pro
  4. Na razie to zostawię... Dokończę rozmowę gdy to będzie konieczne, ale dzięki Danielus za info z tymi obiektami ;) Dzięki za chęć pomocy! @Danielus jeszcze trochę i trafisz do creditsów ;)
  5. Nadal nie działa... Nie rozumiem! Wszystko robię tak jak ty napisałeś, ale nic się nie dzieje!
  6. No właśnie w tym problem! Alarm nie chce odpalać zmiany ufa w bohatera! Mam tak: Z tym kodem w trzecim obrazku chodzi tylko o test. Chciałem sprawdzić czy zadziała stworzenie bohatera. --------------------------------------- Ok, potem tutaj zajrzę, jeśli ktoś wpadnie na pomysł, bardzo proszę udzielić odpowiedzi.
  7. No właśnie chodzi o to, że: 1. Mam w nich już bardzo dużo eventów z wieloma skryptami 2. Trudno do nich włożyć ify 3. Długo będzie się kopiowało eventy z ufa do bohatera 4. Mam 56 obiektów i się w nich jeszcze nie pomyliłem :D ---------- @up Ok posłucham cię, ale masz jakiś skrypt do tego? Bo z tym już będzie trudno. W dodatku zrobiłem w create ustalenie alarmu 1 na 3, a w alarmie 1 dałem zmianę sprite i to nie wypaliło. O co tutaj chodzi?
  8. Ok tylko, że już mam potworzone obydwa obiekty więc masz jakąś propozycję? Próbowałem z alarmami, ale się nie udało, lecz jeszcze popróbuję. Gdybyś na coś "wpadł" to napisz ok?
  9. Dołączam się do pytania, też mi to jest potrzebne, ale tylko skrypt strzelania do gracza, gdy jest w jakiejś odległości. Ten if: GML if (distance_to_object(x,y,cel)<=100) nie działa, więc nie mogę dalej robić, chociaż dalej to łatwo: Istance create dla kamienia, pocisku (czy czegoś tam). I lot pocisku w stronę gracza. No więc proszę o tego naprawionego ifa, lub podpowiedź jak go zrobić. ------------- Odkryłem w czym problem. Dla dociekliwych powinno być: GML if distance_to_object(o_bohater)<=100 { alarm[0]=5; } (Przynajmniej u mnie działa)
  10. O właśnie zrozumiałeś mnie! Oto mi w pytaniu chodziło! Tylko co do Danielus, obiekt nie chce się zmieniać, a zrobiłem wszystko jak napisałeś. W create GML alarm[0]=room_speed*15;, a w evencie alarm 0 zmiana obiektu na bohatera, lecz jak mówiłem nie działa. I jeszcze jedno ereg, na początku jest tak: Zderzenia bohatera z ufem Istance destroy dla ufa Istance change dla bohatera Więc jednak jest tak jak myślisz ;)
  11. Dzięki!!! Działa! Tylko jeszcze poprzestawiam gdzie ma się kliknąć i gotowe! Leci ocena! ;)
  12. Zrób dwa sprite. Jeden w lewo drugi w prawo. W evencie klawisza w lewo zrób tak: GML sprite_index=spr_bohater_l; //zmienia sprite yy=0; //zmienna pomocnicza - sprawdza jak wysoki jest schodem przed graczem ok=0; //zmienna pomocnicza - kończy działanie pętli w odpowiedniej chwili while(yy<=max_y&&ok=0) { if(place_free(x-v,y-yy)) //jeśli nic nie ma przed graczem... { x-=v; //...gracz może iść if(!place_free(x,y+1)&&vspeed=0) //tylko jeżeli gracz stoi (nie skacze)... y-=yy; //może wejść na schodek ok=1; //kończy działanie pętli } yy+=1; } if(!place_free(x,y+max_y)&&vspeed=0) //dzięki tym instrukcjom gracz gładziutko schodzi z górki zamiast tak "skokowo" move_contact_solid(270,max_y); kier=0; W evencie klawisza w prawo: GML //wyjaśnienie poszczególnych instrukcji w evencie <LEFT> sprite_index=spr_bohater_r; //zmienia sprite yy=0; ok=0; while(yy<=max_y&&ok=0) { if(place_free(x+v,y-yy)) { x+=v; if(!place_free(x,y+1)&&vspeed=0) y-=yy; ok=1; } yy+=1; } if(!place_free(x,y+max_y)&&vspeed=0) move_contact_solid(270,max_y); kier=1; W evencie klawisza w górę: GML if(!place_free(x,y+1)) //Jeśli gracz na czymś stoi... vspeed=-15; //...może podskoczyć;)</span> I w evencie step: GML if(place_free(x,y+1)) //jeśli gracz nic nie ma pod nogami... vspeed+=1; //...zaczyna opadać</span> Dzięki temu będzie się dało chodzić na boki z odbiciem gracza i... Skakać, oraz spadać dzięki grawitacji, tylko jeszcze skrypty dla drogi: W obiekcie kontrolera drogi (bez sprite, ale musisz go dawać do roomów): W evencie zderzenia z bohaterem: GML with(o_bohater) //wszystko w klamrach dotyczy wskazanego obiektu { if (vspeed>0&&!place_free(x,y+vspeed)) //jeśli gracz spada i ma coś tuż pod nogami move_contact_solid(270,vspeed); //zostaje na tym "postawiony" vspeed=0; //i przestaje opadać;) } Tylko jeszcze w obiekcie, drogi po której się idzie dajesz jako parent ten kontroler, o którym powiedziałem. Ogólnie wszystko masz tutaj: Kliknij ;) Dzięki tej stronce zapoczątkowałem moją grę, więc myślę, że ci się przyda. :)
  13. Ok, ale gdzie znajdę ten event? Jest w eventach other, czy po prostu Key Relase?
  14. Zrobiłem to w ten sposób: To: GML if(mouse_x>1 + view_xview and mouse_x<1 + view_xview+string_width(spr_zapisz)) {game_save("savegame.sav")}; Wsadziłem w event left button, lecz nadal nie działa. Dobrze myślę, czy nie? Podpowiedz :)
  15. Źle mnie zrozumiałeś... Jak patrzę na twoją odpowiedź widzę, że ma to działać tak: Stoper mierzy czas, gdy dojdzie do końca zresetuje się i zmieni sprite, a ma być tak: Bohater uderza w ufo, ufo się usuwa, a bohater zmienia OBIEKT na ufo <--- To już mam Odlicza się 15 sekund i ufo zmienia OBIEKT na bohatera <--- I z tym czasem mam problem Gdy spróbowałem zmienić twój skrypt, pojawił mi się błąd: GML ERROR in action number 1 of Step Event for object ufozbohaterem: Error in code at line 1: if _timer <= 1 ^ at position 4: Unknown variable _timer W create mam GML _timer=15; _time_pause=1; // pause sec</span> A w step mam: GML if _timer <= 1 { object_index=o_bohater; } Umiesz coś z tym zrobić?
  16. Ja mam podobny problem. Jak zrobić coś takiego: Gdy włącza się dany obiekt Czeka 15 sekund I zmienia ten obiekt na inny W moim przypadku jest tak: Bohater zderza się z ufo Ufo jest zniszczone, a gracz przemienia swój obiekt na ufo Po 15 sekundach znów jest bohaterem Proszę o pomoc! Wszędzie tego szukałem, nawet poza forum! Z góry dzięki.
  17. Ja tak na szybko. Zmień to: x=96*xm+10 Na to: x=96*xm+=10 Bzdura, nie wprowadzaj w błąd - Uzjel
  18. Witam! :bye1: Mam pewien problem, chcę, aby dało się kliknąć w miejsce z narysowanym obiektem przez draw, gdy się kliknie dzieje się akcja: GML game_save("savegame.sav"); Obrazek został narysowany skryptem: GML draw_sprite(spr_zapisz,567,1 + view_xview,567 + view_yview); Proszę o pomoc! Szukałem tego wszędzie i na forum, ale nigdzie tego nie znalazłem. :helpsmilie: Z góry dzięki B)
  19. Tak da się, wchodzisz w dana planszę następnie w niej w views i na samym dole masz ustawienia w ramce Obieckt Following, pod samym napisem Obieckt Following masz do wybrania objekt, wybierasz auto lub inny twój pojazd i gotowe! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Wiem, że ten temat jest stary, ale ktoś może na niego zaglądać. Nie wiem czy na Lite to zadziała, ale radzę spróbować i jeszcze jedno, twój post jest od 2008 roku i nikt ci nie odpisał??? Dziwne.
  20. Na voice chat to może nie, ale wejdź tutaj: http://kacperblogpl.blogspot.com/p/chat.html (porozmawiamy). Ok chyba trochę to ogarnąłem, ale nie wiem gdzie ustawić skąd ma pobierać i co ma uruchomić. Już zrozumiałem tylko gdy to włączam wyskakuje mi okienko w którym jest napisane: ___________________________________________ ERROR in action number 1 of Create Event for object obj_gamestart: Error defining an external function. Jeśli to zignoruję mam normalnie to żebym kliknął spację i zacznie pobierać, gdy ją kliknę nic się nie pobiera. (Skonfigurowałem już to skąd ma pobierać i jaki plik ma pobrać)
  21. [Do Photel] Właśnie ja mam największy problem z tą biblioteką plików ____.dll. Próbowałem już wielu; httpdownloader.dll, 39dll.dll, i wiele innych lecz nadal nie rozumiem jaką one mają rolę i jak dodać tego skrypt w game makerze. Robiłem według tego: Kliknij Potem według tego starszego tutoriala tej osoby, ale jak już mówiłem nic nie rozumiem.
  22. Witam! Chciałbym zapytać, czy da się zrobić (a jak tak to jak) launcher do własnej gry w Game Maker. Chodzi mi o taki launcher w którym są opcje Wejdź do gry, Updatuj Grę itp... Proszę o pomoc!
  23. Niestety nie zrozumiałem, lecz spróbuję, jeśli mi się nie uda napiszę to. Ok rozumiem, ale nie umiem tego znaleźć. Ok co do postu Ninja chyba zacząłem rozumieć tylko nie rozumiem nadal o co chodzi z tą zmienną kierunek? Triplepost. Ostrzeżenie - Uzjel
  24. Nie za bardzo cię zrozumiałem :blink: :huh: Możesz mi potłumaczyć w sposób bardzo prosty? (Masz utworzyć to w evencie tym i w tym co stworzyłeś masz napisać to: gbyftgfdsfgdgydgggygdgthgd potem tworzysz to w tym evencie i piszesz to itp. itd... ) ok? Pracuję z programem 2-3 dni nie za bardzo umiem się nim posługiwać :crying:
  25. Witam! Zastanawiam się jak zrobić w pewnym rodzaju bota/npc'ta do gry. Stworzyłem takie coś: Objekt o nazwie ufo. Jego ewenty: Step - W środku jest: z zakładki move move towards - w środku jest: x= 288, y= 304, speed= 3 Begin Step - W środku jest: z zakładki move move towards - w śroku jest: x= 91, y= 114, speed= 3 Objekt ufo po postawieniu na planszy leci na pierwsze kordy (288,304) i na nich się zacina i nie chce dalej lecieć. Czy ktoś może mi pomóc zrobić tak, aby ufo latało z jednych kordów do drugich przez cały czas puki gracz nie wejdzie do następnej planszy?
×
×
  • Dodaj nową pozycję...