Skocz do zawartości

odex

Użytkownicy
  • Postów

    42
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Treść opublikowana przez odex

  1. Najpierw zacznę po prostu od przykładu by nie przedłużać - https://www.youtube.com/watch?v=FU425Ah3qWU...eature=youtu.be (patrzymy na prawą stronę ekranu). Jak widać jeden statek zachowuje się poprawnie, natomiast drugiego nagle potrzebują jego ludzie. Problem jest taki taki, że kod na poruszanie się obu obiektów jest taki sam (z wyjątkiem szybkości poruszania ale to raczej nie to jest powód jak sądzę). Create: GML grid = mp_grid_create(0, 0, room_width div 54, room_height div 54, 54, 54); mp_grid_add_instances(grid, obj_block, false); mp_grid_add_instances(grid, obj_block_tinted, false); mp_grid_add_instances(grid, obj_door, false); mp_grid_add_instances(grid, obj_blockbutton1, false); mp_grid_add_instances(grid, obj_blockbutton2, false); path = path_add(); Step: GML if canmove = 1 and stop2 = 0 //poruszanie sie { if mp_grid_path(grid, path, x, y, obj_hitbox.x, obj_hitbox.y, 1) { path_start(path, 1.1, 3, 0); } } Domyślam się, że gdzieś coś musi być inaczej, problem jest, że nie do końca wiem na co mam zwrócić uwagę, mimo wczorajszych długich poszukiwań. Obj_hitbox to gracz, obj_blockbutton1 i 2 to te kolorowe klocki. Z góry dzięki każdemu za jakąś sugestię co może być nie tak i gdzie szukać rozwiązania.
  2. Jeśli mowa o samym kodzie na kolizję to na oficjalnym forum GM widziałem ideę, którą wprowadziłem po swojemu tutaj, więc można powiedzieć, że mój udział jest tak pól na pół. Co do reszty kodu to prócz jednego kodu na obliczanie dystansu między pociskami, który ktoś mi podał tutaj na forum, i prócz jednego skryptu na obliczanie dystansu między dwoma punktami, który sobie po prostu "pożyczyłem" z neta, to wszystkie kody są bezpośrednio ode mnie. Pewnie jakby ktoś zajrzał pod maskę to złapałby się za głowę jak to wygląda ale jakoś działa :) Dla mnie najważniejsze przy tym nie jest 'zrobienie gry' ale droga by tam dotrzeć i satysfakcja kiedy udaje Ci się samemu coś ułożyć w głowie a potem to nawet działa :)
  3. Tytuł: Path of the X Gatunek: Roguelike shooter (bullethell) Opis: Jesteś kosmicznym przestępcą, który podąża w pogoni za swoim największym wrogiem, jednocześnie wykradając nowe patenty policji, która teraz także go poszukuje (aka bądźmy szczerzy - ta gra nie ma fabuły). To moja pierwsza gra jaką kiedykolwiek zrobiłem. Nie jestem programistom, nigdy nie będę, celem tego tworu było oderwanie mojej głowy i zajęcia po pracy. Gra jest to mix Nuclear Throne i Binding of Isaac. Przechodzimy poszczególne plansze i pokoje, zdobywając ulepszenia po drodze, zbierając doświadczenie i pokonując bossów i jednocześnie unikając tysięcy pocisków na ekranie . Gra ma 5 poziomów + jeden do odblokowania (który jest totalnie nieskończony, jednak można go normalnie ukończyć). Wiem, że gra ma fatalną grafikę ale nic na to nie poradzę. Nie jestem grafikiem i nie będę nigdy nim pewnie, więc póki co jest jak jest. Mam nadzieję, że z góry nie odrzuci 90% osób. Konstruktywna krytyka mile widziana - co nie działa, co można poprawić i tak dalej. Z góry dziękuje każdemu kto poświęci 5 minut by spróbować swoich sił. Jeśli ktoś lubi gry jak Isaac czy NT myślę, że może parę minut w to nawet pograć :) W grze znajdziecie: - ponad 100 przedmiotów - ponad 20 przeciwników - ponad 300 roomów - 8 bossów - 5 statków do wyboru Sterowanie: WSAD - poruszanie Mysz - celownik LMB - strzał RMB - bomba Spacja - użycie aktywnego przedmiotu Q - więcej danych w HUD Enter - aktywacja sklepu ESC/P - pauza Download: DOWNLOAD Rozmiar pliku: 31MB Autorzy: Programowanie: ja Fabuła: ja Grafika: 90% ja, reszta to darmowe obrazki z neta Muzyka: darmowe sample Screeny:
  4. Witam ponownie, na wstępie zaznaczę, że szukałem podobnego tematu wcześniej na forum ale nie znalazłem nic co by zaspokoiło moją ciekawość :) Sprawa jest dosyć prosta, prosiłbym was, zdecydowanie bardziej doświadczonych koderów, o parę słów porad jak zbudować prostu ale funkcjonalny system audio w swojej grze. Właśnie robię swoje pierwszą produkcję, robię to głównie dla rozruszania głowy, czytam też dużo dokumentacji jednak nie chcę się tutaj porywać z motyką i potem przebudowywać wszystko od podstaw po 5 razy. Najpierw może napiszę jak ja to widzę: po pierwsze chciałbym mieć osobne ustawienia głośności dla muzyki i efektów dźwiękowych. Od jakiejś tam wersji wiem, że GMS nie odróżnia obu i traktuje jako tą samą kategorię. Domyślam się, że musiałbym używać w takim razie funkcji audio_sound_gain dla każdego dźwięku i dwie osobne zmienne dla muzyki i efektów. Dodatkowo jeśli chciałbym zmieniać głośność podczas pauzy (zrobionej na zasadzie instance_deactivate_all), to czy musiałbym mieć dodatkowy obiekt monitorujący w stepie głośność muzyki? Dodatkowo czy funkcja audio_master_gain jest mi do czegokolwiek przydatna jak chcę mieć osobne dźwięki dla muzyki i efektów? I czy przy każdej zmianie muzyki mogę użyć po prostu audio_stop_all, czy lepiej wyciszać konkretny track sprawdzając który aktualnie gra? To tak parę podstawowych spraw z mojej strony. Jak mówię - jestem ciekaw jak inni budują system audio w swoich grach i jak ktoś może rzucić jakąś poradę czy też dwie to będę bardzo wdzięczny :)
  5. O kurde, wielkie dzięki za dedykację i poświęcony czas. Nawet nie chodziło tutaj o kwestię niezrozumiałości do robi dana funkcja (od tego jest dokumentacja), tylko jak ona rzeczywiście się przekłada na kolejny krok dotarcia do celu. To właśnie w takich momentach podziwiam osoby zajmujące się na poważnie programowaniem za umiejętność dotarcia z punktu A bo punktu B. Powiedziała to osoba, która zajmuje się tym głównie jako odstresowacz po pracy :) Jeszcze raz wielki dzięki, pewnie jeszcze kiedyś się tutaj pojawię z kolejnym dziwolągiem :)
  6. Zmieniłem kąt z 15 na 10, poprawiłem nazwy obiektów i... działa perfekcyjnie ze wszystkim, dokładnie tak jak ja próbowałem to zrobić więc wielkie dzięki. Aczkolwiek jestem trochę niezadowolony bo nie bardzo rozumiem kod. Rozumiem z dokumentacji, że pętla FOR polega na inicjacji w pierwszym warunku, sprawdzaniu poprawności w drugim, trzeci warunek wykonuje akcje, po czym pętla wraca do początku. Reszta to już matematyka + logiczne myślenie jak mniemam :) Jeszcze tylko dopowiem na swoją obronę, że miałem pełną świadomość, że w niektórych przypadkach te wartości są kompletnie niepotrzebne, jednak miał to być system uniwersalny więc, jak jak pisałem potem, do jednych działało to, do innych to więc dlatego zostały oba :)
  7. Oczywiście, że pomogłeś. Próbowałem już wcześniej różne kombinację z taką metodą ale nie przynosiły rozwiązania. Jednak chyba znalazłem problem. w Create obiektu obj_laser (czyli naszego lasera nieszczęsnego) dałem angle = image_angle. Problem jest tylko taki, że ta zmienna zwraca wartość jak sprawdziłem w debuggerze. Ma to sens bo bez znaczenia czy ją potem dodaje, odejmuje czy cokolwiek to i tak lasery są zawsze w tym samym miejscu. Jakiś pomysł czego znów nie rozumiem w kwestii przypisywania wartości do zmiennej?
  8. Po pierwsze chciałem z góry przeprosić za temat pod tematem bo nie chcę być "tym gościem", jednak chyba potrzebuje waszej pomocy. W każdym razie do rzeczy. Gra typu top-down twin stick shooter. Sterujemy osobno postacią (klawiatura) i celownikiem/strzelaniem (myszka). W grze oczywiście są różne przedmioty ala Isaac, które zmieniają nasze możliwości strzelania. Jednym z nich jest laser, który jest jedyną bronią strzelający ciągłą wiązką (usuwanie obiektu po puszczeniu klawisza). Inne to przedmioty dodające możliwość strzelania kilku pocisków (2, 3, 4) na raz. Problem w tym, że o ile inne pociski albo pojawiają się na parę klatek, albo są wytrzeliwane, tak laser mieć cały czas kontakt ze statkiem i jednocześnie się z nim obracać. Problem polega, że gdy chce wystrzeliwać kilka laserów jednocześnie powinno one się obracać ze statkiem. Wiem, że wtedy potrzebuje po prostu ustalać pozycję tego laseru w stepie i tutaj pojawia się problem ponieważ nie mam pojęcia jak zatrzymać ich pierwotny kąt względem siebie i jednocześnie je przesuwać. Jeśli dam coś w stylu image_angle = statek.image_angle to zamiast np 4 laserów mam jedną wiązkę co jest logiczne. Domyślam się, że trzeba pewnie pobierać pierwotną pozycję i jakoś ją potem przeliczać w stepie ale jak - nie mam pojęcia. Docelowo powinno to wyglądać tak: http://i.imgur.com/1VoRsLC.png a mam tylko jedną wiązkę gdy obraca się laser za statkiem. Kod tworzenia laseru: GML switch (global.bron) { case 1: aktualnabron = obj_bullet; break; case 2: aktualnabron = obj_beam; break; case 3: aktualnabron = obj_laser; break; } if global.iloscpociskow = 4 // 4 pociski { pocisk1 = instance_create(x, y, aktualnabron); pocisk2 = instance_create(x, y, aktualnabron); pocisk3 = instance_create(x, y, aktualnabron); pocisk4 = instance_create(x, y, aktualnabron); pocisk1.direction = direction+10; pocisk2.direction = direction+5; pocisk3.direction = direction-5; pocisk4.direction = direction-10; pocisk1.image_angle = direction+10; pocisk2.image_angle = direction+5; pocisk3.image_angle = direction-5; pocisk4.image_angle = direction-10; canshoot = 0 alarm[0] = global.szybkoscstrzalu; } Z góry dzięki za pomoc, mam nadzieję, że mój opis jest stosunkowo jasny, czasami trudno przelać na papier swoje myśli.
  9. U mnie działa bez problemu, tak jak na pierwszym screenie. Nie ma jakichkolwiek artefaktów. Wysyłałem identyczną kompilację do wszystkich miejsc. Ten sam plik, ten sam build. Śmiem wątpić, gdyż ta osoba ma prawdę dobry sprzęt i nigdzie, w jakiejkolwiek innej grze nie pojawiają mu się artefakty czy jakiekolwiek problemy graficzne.
  10. Witam ponownie! Ostatnio postanowiłem wrócić do GM i przerobić swoją starą grę w nowej koncepcji. Wszystko idzie okej ale mam jeden problem. Poprosiłem kumpla o przetestowanie jak wszystko działa. Problem polega na tym, że na jego komputerze kompletnie rozjeżdżają się sprity. Grafika kompletnie odchodzi od pierwowzoru. Testowałem to u siebie, u innego kumpla, na 2 komputerach w pracy i wszędzie było dobrze, tylko u tej jednej osoby jest z tym problem. Strzelam więc, że pewnie nie trafiłem na jedynego kompa na święcie, który ma z tym problem, tylko inne osoby też mogą mieć taką sytuację, więc wole się dowiedzieć już na starcie o co chodzi, niż potem się z tym męczyć. Robione w GMS. Z góry dzięki za pomoc! Przykładowe screeny: jak powinno wyglądać: jak wygląda:
  11. Okej, rozumiem. Jeszcze więc ostatnie pytanie bo próbuję rozgryźć tajemnicę dlaczego tworzy mi w pewnym momencie jeszcze jeden obiekt gracza. Z moich obserwacji wynika, że im jesteśmy bliżej końca puli tym coraz większe szansę, że zamiast przedmiotu dostaniemy duplikat statku. Czy to przez to, że funkcja ds_list_delete po prostu usuwa daną wartość, jednak ona sama może znów być wylosowana przez irandom i wtedy pobiera pierwszy możliwy obiekt jaki jest dostępny normalnie z drzewka game makera? W przykładzie - losujemy wartość 15 i pod nią jest tworzy przedmiot jej przypisany. Potem losuje drugim raz 15 ale obiekt już został usunięty przypisany tej pozycji więc zamiast tego dostajemy duplikat statku. To chyba jedyne logiczne wytłumaczenie jakie na ten moment jestem w stanie z tego wyciągnąć. Poza tym wszystko działa bez problemu.
  12. Fakt, nie pomyślałem kompletnie, że przecież mogę usuwać na raz przedmiot z kilku list. Ok, to pozostaje mi tylko jeszcze rozwikłać zagadkę dlaczego dupluje mi się gracz. Wielkie dzięki jeszcze raz za pomoc.
  13. HuderLord: dzięki za odpowiedź, zrobiłem to Twoim i sposobem i... chyba działa? Główny problem jaki tutaj widzę, że to grze zdarza się teraz zduplikować czasami obiekt gracza. Po prostu pojawiają się nagle dwa statki (potem 4, potem 8 itd). Sprawdziłem w kodzie czy nie dodałem czasem jak głupi po prostu obiektu gracza do listy ale nie ma go tam na pewno. Plus jakbym chciał zrobić mniejszą jakąś pule przedmiotów z tych obecnie używanych do da się to zrobić jakimś prostym sposobem jak ten powyżej? Np w sekretnym pokoju możemy dostać każdy możliwy przedmiot ale już np boss może rzucić tylko kilka wybranych z listy wszystkich możliwych przedmiotów.
  14. Yyyy, okej. To znaczy rozumiem konceptualnie pomysł ale by to przelać na kod - no way :) Jak mówię, nie traktuję game makera jakoś super serio, po prostu jako formę treningu dla mózgownicy. Ale widocznie będę musiał trochę podnieść swój poziom bo zgaduje, że nie ma jakiegoś prostszego rozwiązania, które nie będzie kompletnie tandetne i zamknie się w gigantycznej ścianie kodu.
  15. Witam ponownie. W dalszym ciągu pracuje nad moją małą gierką w ramach ćwiczenia umysłu. Jest to roguelike bullet heel space shooter. Jak wiadomo, skoro jest to roguelike to mamy wiele do czynienia z losowym generowaniem powerupów. Działa bardzo podobnie do Binding of Isaac (pewnie każdy zna), zdobywamy jakiś przedmiot i ruszamy dalej. Chciałbym tylko by tak samo jak w tej grze, przedmiot który już mamy w inwentarzu nie mógł zostać wylosowany ponownie. Na ten moment wybór przedmiotów to zwykła komenda choose w choose (przedmiotów jest około 50 na ten moment). Wiem, że pewnie musiałbym jakoś porównywać czy wylosowany przedmiot jest już przez nas dotknięty wcześniej i jeśli tak to wylosować go ponownie. Przedmiot pojawia się poprzez obiekt, który losuje dany przedmiot, tworzy jego instancje w roomie i kasuje sam siebie. Mam nadzieję, że jakoś to logicznie wytłumaczyłem. Liczę na jakieś sugestie jak można to zrobić.
  16. Dzięki wszystkim za pomoc :) Funkcja keyboard_check() niestety nie działa, jednak już keyboard_check_direct() działa bez problemu, co jest ironią bo to jedyna komenda chyba, której wcześniej nie próbowałem. Generalnie wiedziałem jak to zakodować, tylko nie wiedziałem, którą funkcje dokładnie użyć by działało płynnie z przejścia room-room. Dzięki jeszcze raz, jak coś się jeszcze pojawi to na pewno się przypomnę :)
  17. Po pierwsze witam. Po drugie zapewne gdzieś już na forum istnieje rozwiązanie tego problemu ale nie mogłem tego znaleźć wpisując różne kombinacje słów więc z góry przepraszam w razie czego. Po trzecie do rzeczy: Od jakiegoś czasu robię grę, głównie dla siebie na rozgrzanie własnych komórek, bo proces od pomysłu do wykonania nie wiedząc nic o programowaniu jest naprawdę ciekawe. W każdym razie tej kwestii nie potrafię rozgryźć od dłuższego czasu. Moja gra skupia się na bardzo dużej ilości roomów i przechodzenia między nimi. Problem jest taki, że jeśli trzymam np PRAWO i wpadam w obiekt przenoszący mnie do innego roomu chciałbym by moja postać dalej kontynuowała ruch w prawo w nowym roomie bez konieczności puszczania przycisku PRAWO. Kombinowałem już w najróżniejszymi metodami, z wszystkimi praktycznie kodami z działu keyboard i nic. Jakby ktoś mógł podrzucić rozwiązanie to byłbym wielce wdzięczny. Z góry dzięki za pomoc!
×
×
  • Dodaj nową pozycję...