Skocz do zawartości

candy

Użytkownicy
  • Postów

    491
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez candy

  1. Ponieważ masz vspeed nie jest wyzerowane. Będzie ciągle przesuwał się o xx pikseli w dół. Musisz dopisać kod, który sprawdzi czy postać ma kontakt z podłożem i wyzerować vspeed. Następnie korzystasz z move_contact_solid(argumenty), żeby ustawić postać na podłożu. E: Jeżeli postać jest na schodach, to musisz wyłączyć grawitację.
  2. Tutaj masz kod, aby postać się nie zapadała w podłoże: GML if(keyboard_check(vk_up))//idzie do góry { if(collision_point(x,y+15,obj_schody,1,0))// jeżeli ma kolizję ze schodami (15 punktów poniżej Origin Y) y-=5;//to idź do góry } else if(keyboard_check(vk_down))//analogiczna sprawa. { if(collision_point(x,y+20,obj_schody,1,0)) y+=5; } Jeżeli chodzi o sterowanie, to ja zawsze wklejam to do STEP END. Collision with obj_sciana możesz usunąć. Postać może poruszać się w lewo i w prawo wchodząc po schodach, co może spowodować, że zacznie chodzić w powietrzu jak za bardzo wyjdzie. Dopisz kod, który to uniemożliwi (coś podobnego do tego, ale w kierunku X). Możesz jeszcze zrobić tak, że gdy naciśniesz strzałkę w górę, to postać będzie iść do góry do momentu, w którym skończą się schody. Analogicznie w dół. Gdy idzie blokujesz sterowanie i spokojnie czekasz, aż postać osiągnie swój cel.
  3. Ja bym to zrobił tak. Wczytać kolejne linijki tekstu do tablicy. Stworzyć zmienną linijka=0 (zmienna będzie mówić, od której linijki (komórki w tablicy) ma być wyświetlany tekst). Po kliknięciu strzałki góra/dół dodajemy/odejmujemy 1 w zmiennej linijka. Tekst będzie wyświetlany np. z trzech kolejnych komórkach.
  4. 2. Ja bym dał w STEP czapki: x/y=hero.x/y+jakaś wartość Gdy hero spada w dół, to czapka nie musi mieć z nim kolizji i wszystko się krzaczy. 3. Jeżeli masz grafikę w jpg, to zamień ją na gif.
  5. Trzeba się troszkę zastanowić. Chcesz aby gracz powrócił w to samo miejsce. Jak można określić położenie punktu w układzie prostokątnym? Do zmiennych globalnych wpisz odpowiednie wartości (global.zmienna1=o_gracz.zmienna1 i global.zmienna2=o_gracz.zmienna2). Jak chcesz wracać, to musisz zrobić operację odwrotną i tyle.
  6. Fizyka się kłania. Wzór na siłę grawitacji wygląda tak: GML F=GMm/r^2 //(wartość siły) F'=GMmr'/r^3 //(zapis wektorowy- ' oznacza wektor)</span> Liczysz siłę wypadkową wszystkich sił działających na rakietę i z tego wyznaczasz przyspieszenie a rakiety. Potem korzystasz ze wzorów z kinematyki żeby wyznaczyć przemieszczenie. Dla uproszczenia możesz pominąć wpływ oddziaływania grawitacyjnego Księżyca i większości planet. Siły te będą znacznie mniejsze niż siła pochodząca od Słońca.
  7. Najpierw room_goto(poz_miasto) potem player.x=global.xx i player.y=global.yy.
  8. Żeby nie było, że nic nie robię, to wrzucam kolejną wersję dema. Dostępnych jest 10 map (w tym, nazwijmy to "mapa boss"). Dodatkowo mamy możliwość obejrzenia powtórki z rozgrywki, dzięki opcji Replay. Jak na razie opcje "Art map" i "Edytor map" są niedostępne. Nie oznacza to, że jeszcze nie są zrobione. Po prostu muszę napisać jakąś instrukcję do edytora, która wszystko wytłumaczy co i jak. Wszystkie mapy stworzone w edytorze są zapisywane do folderu "edytormaps". Umożliwia to wysyłanie innym graczom zrobionej przez siebie mapy. Po przejściu 10 mapy (World 1-10), nie można dokonać zapisu powtórki, jak na razie. Trzeba troszkę zmodyfikować system powtórek. Teraz wrzucam screen, który pokazuje jak wygląda edytor map. Oto link: http://img143.imageshack.us/i/edytor.png/. Włączenie mapy World 2-1, spowoduje wyjście do menu (nie ma więcej poziomów). Teraz coś o sterowaniu (domyślnie) A- tworzenie/niszczenie bloczka czekolady, potwierdzenie opcji, zmiana wartości opcji (np z On na Off itp) S- popchnięcie bloczka, wycofanie się z opcji (jeżeli jest to możliwe) D- przeskakiwanie "filmików", "PRESS START", wejście do opcji w czasie gry Strzałka Góra- wskakiwanie na wyższy poziom, wybór opcji Strzałka Lewo i Prawo- bieg Strzałka Dół- wybór opcji Wszystkie klawisze można zmienić w opcji "Klawiszologia" Kilka screenów na zachętę: http://img534.imageshack.us/i/map1mx.png/ http://img651.imageshack.us/i/map2r.png/ I najważniejsze rar z demkiem: Demo Jak zwykle komentarze mile widziane. Sry, za double posta. Edit: Trzeba jeszcze ściągnąć jeden plik i wgrać go do folderu music: https://gmclan.org/up4155_8_m_music1.html
  9. Jedynie co mi przychodzi do głowy jest, że object_index pierwszego kolesia jest mniejsze niż object_index obiektu rozmowa. Z drugim kolesiem jest na odwrót. GM sprawdza po kolei wszystkie obiekty według ich object_index. Skoro drugi koleś miał większe object_index niż rozmowa, to najpierw była wykonywana akcja w obiekcie rozmowa (zamknięcie rozmowy), a potem akcja w drugim kolesiu (rozpoczęcie rozmowy). Ale nie jestem co do tego pewien, że tak jest.
  10. Co z if, to masz rację, miało być if(moze). Teraz co do rozmowy. Zamień kupiec.gada=false;/kolo1.gada=false; na kupiec.alarm[0]=1;/kolo1.alarm[0]=1;. Dodaj event, w kupcu i kolo1, alarm[0] i tam wpisz gada=false;. Problem tkwi w tym, że gdy naciskasz SPACE, aby wyłączyć rozmowę, to działa jeszcze ona na kupca (czy na inne obiekty). Zmienia się zmienna gada na false i natychmiast rozpoczynana jest rozmowa na nowo.
  11. 1. Korzystamy z global.xx: GML //===wchodzimy do pomieszczenia global.xx=x; //===wychodzimy (kod dajemy po utworzeniu obiektu bohater) x=global.xx; Można to także zrobić za pomocą pliku ini albo txt. Zasada jest ta sama. Najpierw zapisujemy współrzędną x, potem ją odczytujemy i zamieniamy położenie x bohatera.
  12. Zdefiniowałeś już położenie paska życia. Trzeba to wykorzystać: GML //===DRAW(obiektu, który rysuje pasek życia)=== if(mouse_x>=(view_xview[0]+10) && mouse_x<= (view_xview[0]+100) && mouse_y>=(view_yview[0]+10) && mouse_y<=(view_yview[0]+20)) draw_text(mouse_x+10,mouse_y+10,"HP: "+string(hero.hp)+"/"+string(hero.maxhp))
  13. candy

    Pole

    GML //===tworzymy drzewko=== //Załóżmy, że y=const, room ma małą szerokość (np 480 px) oraz, że drzewa zawsze są oddalone od siebie o 40 px. //Na samym początku sprawdzamy czy są jeszcze jakieś wolne pola, aby można stworzyć drzewko. //Skorzystamy z zmiennej tworz. //Jeżeli tworz równa się 1, to można tworzyć drzewo, jeżeli 0, to nie można. //Na starcie zakładamy, że nie można tworzyć. tworz=0; //Teraz robimy pętle. Warunki pętli wynikają z założeń. Jeżeli przechodząc po linii y nie natrafimy na drzewo i nie ma //tego "określonego pola", to znaczy, że można tworzyć drzewo. Przerywamy działanie pętli. //Nie ma sensu dalej sprawdzać. for(i=40;i<=480;i+=40) { if(!collision_point(i,y,o_drzewo)&&!collision_point(i,y,o_okreslone_pole)) { tworz=true; break } } //Sprawdzamy czy zmienna tworz równa się 1. Jeżeli tak, to tworzymy drzewo. W tym celu losujemy położenie x. //Potem sprawdzamy, czy na wylosowanym polu jest drzewo albo "okreslone pole". //Jeżeli są to losujemy jeszcze raz. Losujemy do skutku, aż natrafimy na pole, //na którym możemy zasadzić drzewko. Na końcu tworzymy drzewko. if(tworz) { a=choose(40,80,120,160,200,240,280,320,360,400,440,480); while(collision_point(i,y,o_drzewo)||collision_point(i,y,o_okreslone_pole)) a=choose(40,80,120,160,200,240,280,320,360,400,440,480); instance_create(a,y,o_drzewo) } Teraz musisz cały przykład dopasować do swoich potrzeb. Możesz jeszcze jakoś pokombinować, aby zmniejszyć ilość losowań. Bo tutaj to nie jest szczyt optymalizacji.
  14. Mówisz i masz: https://gmclan.org/up4155_12_gadu_gadu.html Mam nadzieję, że to rozwiąże Twój problem.
  15. Musisz najpierw wywołać rozmowę. Podchodzisz do kolesia i klikasz "klawisz X". Wtedy tworzy Ci się nowy obiekt (o_rozmowa): GML //=== event Key Press "klawisz X" w kolesiu, z którym chcemy porozmawiać /* Musimy sprawdzić, czy koleś stoi blisko bohatera. Głupio będzie jeżeli będziemy gadać z kolesiem, który stoi na drugim końcu planszy. Zróbmy to przez collision_point. Oczywiście możesz to zrobić korzystając z innych funkcji.*/ if(collision_point(x,y,o_bohater,1,0)) { o_bohater.stop=true; instance_create(xx,yy,o_rozmowa) o_rozmowa.text=xyz; } Teraz zajmijmy się tekstem (kod dotyczy obiektu o_rozmowa): GML //===create=== text=false;// zmienna ta mówi, który tekst ma być wyświetlony //===draw=== if(text==0) draw_text(xx,yy,"AAAA") else if(text==1) draw_text(xx,yy,"BBBB") else if(text==2) draw_text(xx,yy,"CCCC") else . . . //=== Key Press jakiś klawisz=== text+=1;//zmienia wyświetlany tekst if(text==jakaś wartość)//kończymy rozmowę { o_bohater.stop=false; instance_destroy() } Z grubsza to wygląda mniej więcej tak. Musisz zrobić jakieś ładne okienko i nałożyć tekst nad okienko. Jeżeli rozmów w grze ma być dużo, to dobrym rozwiązaniem będzie przerzucenie wszystkich rozmów do plików txt. Każdemu kolesiowi odpowiada jeden txt. Wtedy musiałbyś byś napisać kod, który będzie otwierał odpowiedni txt i wczytywał odpowiednie linijki tekstu.
  16. Dodaj do bohatera zmienną stop: GML //===gdy włącza się rozmowa o_bohater.stop=1; //===gdy kończymy o_bohater.stop=0; //===sterowanie bohatera if(!stop) { //cała reszta kodu na sterowanie } Albo możesz dać taki warunek: GML //===sterowanie bohatera if(!instance_number(o_okienko_z_rozmową)) { //cała reszta kodu na sterowanie }
  17. Pomocna może się okazać funkcja move_towards_point(x,y,sp).
  18. Zmieniasz sprite za pomocą sprite_index (sprite_index=nazwa sprite). Żeby powrócił do wcześniejszego sprite'a, możesz skorzystać z eventu Animation End (sprite_index=sprite wcześniejsczy).
  19. candy

    Warfog 2 - OxGames

    Czym się różni "zapas amunicji" od "zapas rakiet"? Rakiety to nie amunicja? Po screenach wnioskuje, że pod amunicją kryją się naboje do karabinka. To samo dotyczy "ładowania amunicji" i "ładowanie rakiet".
  20. Stwórz mu dodatkową zmienną, na przykład pausa. Gdy gracz ma się nie ruszać, to pausa=1, w przeciwnym wypadku pausa=false. Dopisujesz we wszystkich eventach odpowiedzialnych za ruch: GML if(!pausa) { // reszta kodu } A żeby wyświetlało Ci jakiś sprite. Wystarczy, że stworzysz nowy obiekt (z tym ustawionym spritem) i nadasz mu odpowiednie x i y.
  21. To będzie mniej więcej tak. GML //===event strzał w hero with all if( (object_index==mob1||object_index==mob2||...||object_index=mobn) && collision_line(x-100,y,x+100,y,hero,1,0)) hp-=10;
  22. GML //===klikamy w map=== zamknij.visible=true; //===klikamy w zamknij zamknij.visible=false; O to chodzi?
  23. @up, wtedy raczej GM wywalałby błąd. Może to po prostu źle przepisana linijka kodu. Jeżeli otwieramy i zamykamy mini mapę tym samym klawiszem, to problem może tkwić właśnie tutaj. Ściągnij plik, odpal przez F6=>Tools=>Show instances. Klikając Lewo powinien się utworzyć obiekt obiect1, jednak dalej jest obiekt0 (widać to w kolumnie object name). Przy okazji id zwiększa się o 2, co oznacza, że faktycznie tworzony jest obiekt0, ale zaraz wykonywany jest event Left Pressed. Prowadzi to do zniszczenia obiekt0 i utworzenia obiektu obiect1. Teraz dodaj do eventu Left Pressed (w obu obiektach) klocek "if" i wpisz moze (to nazwa zmiennej). Teraz wszystko działa poprawnie (możesz to sprawdzić, F6=>Tools=>Show instances). Wniosek jest bardzo prosty. Jeżeli dwa obiekty tworzą się nawzajem po przez naciśnięcie tego samego klawisza, należy w jakiś sposób (na przykład tak jak z poniższego pliku) spowodować, aby akcja naciskania klawisza nie była od razu dostępna, tylko po jakimś czasie. Plik:https://gmclan.org/up4155_12_problem.html Klocki można w łatwy sposób przerobić na kod. Oczywiście mogę się mylić i błąd może tkwić gdzie indziej.
×
×
  • Dodaj nową pozycję...