Skocz do zawartości

Amaterasu

Użytkownicy
  • Postów

    390
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Amaterasu

  1. Zamiast y-15 użyj y+15*image_xscale. Wtedy gdy xscale jest równe -1, postać obróci się w lewo i pocisk pojawi się na lewo od postaci, podobnie dla xscale=1. Jeżeli działa odwrotnie, niż powinno, zmień na y-15*image_xscale BARDZO PÓŹNY EDIT (02:53): jestem kretynem, chodziło mi o x+25*image_xscale zamiast 15*image_xscale, co się ze mną dzieje D:
  2. Możesz np. zrobić tak, że twoja tablica dwuwymiarowa jesz szerokości 5 i wysokości <tyle, ile masz różnych tekstów>. W pierwszej kolumnie masz dany tekst, a w kolejnych czterech - numer wiersza, w którym znajdują się dane dla kolejnego okna dialogowego (-1 jeżeli nie ma się pojawić nic). Przykład (pseudokod): showdialog(n): opcja=show_message(dialog[n,0]) //twoja funkcja do wyswietlania dialogu na ekranie if(opcja=-1) exit showdialog(dialog[n,opcja]) dialog[0,0]="tekst1", dialog[0,1]=1, dialog[0,2/3/4]=-1 dialog[1,0]="tekst2", dialog[1,1/2/3/4]=-1 showdialog(0) W tym przypadku pojawi się dialog z tekstem "tekst1" - po kliknięciu pierwszej opcji powinien się wyświetlić dialog z tekstem "tekst2", po kliknięciu jakiejkolwiek innej opcji kończy się pokazywanie dialogów. Coś w ten deseń.
  3. @Danielus: Chyba źle wyraziłem to, co mam na myśli. Gdy boty działają w jednym wątku, nie ma żadnego czasu oczekiwania dla procesora, on pracuje ciągle. Gdy boty działają za pośrednictwem serwera, albo w osobnych wątkach, to proces odpowiadający za działanie bota może wejść w tryb oczekiwania pasywnego. Wg mnie na tym polega różnica między grą czasu rzeczywistego a grą turową. Gdyby boty w grze, która dla graczy ludzkich była grą turową, pracowały w jednym wątku, i proces bota nie miałby czasu na odpoczynek, nie różniłoby to się niczym w stosunku do gry, która dla graczy była grą czasu rzeczywistego.
  4. @Sutikku: Jeżeli boty działają w jednej aplikacji, na jednym komputerze, bez serwera, to dla botów nie ma żadnego odstępu czasu pomiędzy kolejnymi turami - tak jak w grze z czasem rzeczywistym. Natomiast jeżeli istnieje serwer w osobnej aplikacji, z którym boty się komunikują i który koordynuje pracę całej gry, to wtedy można mówić o różnicy między grą turową a grą czasu rzeczywistego. Gdy boty działają w jednej aplikacji, to nie jest tak, że gdy jeden coś robi, to drugi nic nie robi - one są traktowane przez komputer jako jeden duży bot działający na całą grę, więc albo cały bot coś robi, albo cały bot nic nie robi. To oznacza, że żaden bot nie czeka na jego ruch, gdyż każdy bot cały czas coś robi - to, że robią to po kolei, nie gra żadnej roli. Gdy boty komunikują się poprzez serwer, wtedy jeden bot czeka, aż serwer pozwoli na jego ruch, a w tym czasie działa drugi bot. Niezależnie od tego, czy gra jest turowa, czy nie, bota pisałoby się tak samo.
  5. Turowo byłoby tak samo, jak real-time, w końcu w obu przypadkach budujesz optymalną strategię na podstawie dostępnych informacji, percepcja czasu dla takiego bota nie istnieje
  6. No bo paletka ma na starcie szerokość 256, a i to nie jest za dużo - moja np. dąży do szerokości 454.9
  7. Ja okomentowałem swój kod, ale nadal jest koszmarem dla kogoś czytającego to pierwszy raz
  8. Taa, sprite_part wyświetla tylko wybraną część sprite'a, a sprite_ext rozciąga danego sprite'a do podanych wielokrotności bazowych wymiarów (niekoniecznie całkowitych)
  9. Mój nie ma nazwy, ale może to właśnie to go wyróżnia
  10. lengthdir_x(len,dir) := len*dcos(dir) lengthdir_y(len,dir) := -len*dsin(dir) W dużych grach takie coś jest bezużyteczne, bo funkcje sin i cos są bardzo wymagające pod kątem mocy obliczeniowej(*), zamiast tego używa się wektorów do obliczania takich rzeczy. Na tym trzeba się niestety trochę znać. Lengthdiry są w porządku, jeżeli nie zależy ci na wydajności, a chcesz uzyskać efekt szybko. (*)Mam na myśli, że jeżeli co klatkę używasz funkcji sin(x) tysiące razy, to rzeczywiście jest to dużo mniej wydajne od stosowania wektorów, natomiast jesli używasz tych funkcji, powiedzmy, 20-30 razy na klatkę, to nic złego się nie dzieje. Po prostu żeby było wiadomo, że dla małych projektów lengthdiry są spoko, a dla dużych są be. Lengthdiry są wykorzystywane do parametryzacji pewnych krzywych, np. okręgu (czyli tego, co zrobiłeś), a to ma trochę zastosowań, np: -obliczenie wektora prędkości dla pocisku, który ma być skierowany w kierunku pewnego punktu; -umieszczanie obiektów w stałej odległości od pewnego głównego obiektu, ale w zmiennym kierunku (mniej więcej to, co u ciebie)
  11. Oczy powinny pozostać w pewnej odległości od kursora, ale powinny kierować się w jego kierunku. Funkcja point_direction(x1,y1,x2,y2) da ci kierunek od głowy do kursora Funkcja lengthdir_x(length,direction) zwróci odpowiednią współrzędną wektora o długości length, zaczepionego w punkcie (0,0) i skierowanego w kierunku direction. To samo dla lengthdir_y. Twoim zadaniem jest narysować oczy w pewnej odległości od środka głowy i skierowane w stronę kursora.
  12. Lewy górny róg I działają współrzędne wymierne, jeśli się nie mylę
  13. Amaterasu

    Dungeon Crawl

    Nawet po przejściu tutoriala będziesz miał niejedną okazję pogubić się w sytuacji na screenie, jeżeli o to ci chodzi
  14. Amaterasu

    Dungeon Crawl

    Dyskusja na temat gry Dungeon Crawl: Stone Soup. A co to w ogóle jest Dungeon Crawl: Stone Soup? Jest to gra z gatunku roguelike, która łączy w sobie przystępny interfejs, głęboką choć czasem frustrującą rozgrywkę i syndrom "jeszcze jednego poziomu". Wcielamy się w rolę poszukiwacza przygód, którego zadaniem jest wydobycie na powierzchnię potężnego artefaktu, Orb of Zot. Ten jest ukryty w najgłębszych czeluściach podziemi, a tam czają się najróżniejszego rodzaju stworzenia nienastawione do ciebie przyjaźnie. Podczas podróży możesz znaleźć między innymi następujące obiekty (w dowolnej częstości): -ołtarze bogów, którzy gotowi są dać ci wielką moc w zamian za przystąpienie do ich religii -przedmioty, których moc waha się od zwyczajnych gratów do przesiąkniętych magią artefaktów -zwoje i mikstury, które należy zidentyfikować, zanim pozna się ich działanie -księgi czarów różnych szkół magii, które ułatwią (?) osiągnięcie celu podróży -pułapki, które zostały przygotowane specjalnie na twoje przybycie -poboczne krainy, których ukończenie owocuje zdobyciem run pozwalających na odblokowanie bariery otaczającej krainę Zot, gdzie schowany jest cel gry i zdecydowanie najczęściej: -kolejną głupią śmierć (bo sztylet tego goblina kopnął prądem za 5d17 obrażeń, bo trafiłem na Sigmunda na D:3, bo pułapka teleportacyjna przeniosła mnie do komnaty pełnej opancerzonych orków). Oczywiście, jak to w każdych roguelike'ach, jedna śmierć kończy rozgrywkę (chyba że gra się Felidem), zatem trzeba być naprawdę roztropnym i uważnym, aby przejść tę grę. Dlaczego miałbym w to grać, skoro tak łatwo zginąć? Każda rozgrywka w tej grze jest unikalna - nie ma szans (do pewnych granic), żeby dwie kolejne gry rozegrały się tak samo. Gra została tak skonstruowana, że w miarę optymalne wykorzystanie dostępnych zasobów pozwoli w większości uniknąć przykrych wypadków zdarzających się w early game. Ogromna ilość strategii do wykorzystania (chcesz iść ciężkim wojownikiem? może magiem żywiołów? albo magicznym łucznikiem? albo zwinnym i cichym zabójcą? albo kapłanem? albo przywoływaczem? a może chcesz połączyć dostępne strategie i stworzyć własną? każda opcja jest dostępna!) w połączeniu z głębią, długością i szerokością rozgrywki (mimo iż sama gra jest w 2D) pozwalają dobrze się bawić nawet pomimo wiedzy, że drobny błąd może kosztować życie i utratę postaci. Download: http://crawl.develz.org/download.htm Tutoriale szeroko dostępne w internecie.
  15. Lepiej korzystać z dsin(x), dcos(x), dtan(x), jako x podajesz kąt w stopniach.
  16. @bLaze: Możliwe, że nie będę miau czasu wszystkiego zaimplementować, więc nadal masz szansę : P
  17. Ja już wyliczyłem, gdzie i kiedy piłka wyląduje na paletce, jak wyznaczyć pozycję x paletki, i gdzie/kiedy wyląduje który bonus step it up E: Rank to ilość punktów na sekundę - im więcej, tym lepiej. Najlepszy wynik wygrywa.
  18. @bLaze: Jedynymi wartościami, które można zmieniać (poza dodanymi przez siebie w bar_int) jest pozycja X paetki. Możesz z tą wartością robić, co ci się żywnie podoba (w bar_ai), gra sama reguluje tę pozycję, aby była zgodna z zasadami.
  19. @Sutikku: Maksymalna szybkość paletki jest równa szerokości paletki dzielonej na dwa. Ja mam pytania: czy w losowo generowanych mapach podczas testu klocki będą miały te same wymiary, co w dostępnym projekcie? Czy te klocki mogą dochodzić do samego brzegu mapy? Czy klocki zawsze będą ułożone w pozycjach będącymi wielokrotnościami liczby większej od 1 (ewentualnie przesuniętych o pewną stałą)?
  20. Dezaktywacja obiektu ukrywa jego egzystencję dla wszystkich mechanizmów w GM-ie. Nie możesz się odwoływać do obiektu i jego danych. Zatem with() wykona się tylko w aktywnych obiektach.
  21. GML switch( msgid ) { case 1: //Zmiana pozycji graczy var num=buffer_read( buffer, buffer_u8 ); for(var i=0; i<num; i++) { var iid=buffer_read( buffer, buffer_u8 ); //... var down=buffer_read( buffer, buffer_bool ); break; } Zjadłeś klamrę przy kopiowaniu kodu, powinno wyrzucić błąd albo powinno przerwać pętlę zanim "i" osiągnie wartość 1. Przy tworzeniu buffera (bufora?) precyzujesz parametr "alignment", co może mieć znaczenie przy używaniu buffer_seek, gdy używasz buffer_write z różnymi typami danych (np. bool i u32). Typowo ma on wartość 1.
  22. Pokaż kod, w którym wysyłasz i odbierasz pakiety, o ile nie jest to jakieś tajne
  23. SI to jedna z nielicznych rzeczy, które mnie totalnie fascynują. Nie mogę się doczekać.
  24. Istnieje sposób (teoretycznie, o ile GM działa tak, jak myślę, że działa) Wyłącz automatyczne rysowanie Stwórz surface o rozmiarach okna gry (nazwijmy go s_main) Na początku każdej klatki gry czyść go używając draw_clear_alpha Rysuj na nim wszystko poza tłem (czyli światła też rysuj) Stwórz surface o rozmiarach okna gry (nazwijmy go s_mask) Na początku każdej klatki gry maluj go na czarno Rysuj na nim wszystko co rysujesz normalnie (bez tła i świateł), ale z ustawionym blendingiem bm_subtract Na surface s_main rysuj s_mask z blendingiem bm_subtract Pozostało tylko rysować w oknie gry: najpierw tło, potem s_main Jeżeli tylko bm_subtract odejmuje też alphę z surface'ów, to powinno działać.
  25. W Create dodaj zmienną "dowolna_nazwa" i ustaw ją na 0 W Mouse Left Pressed: GML if(dowolna_nazwa==0) { dowolna_nazwa=1 score += 2 } To jest "zmienna sterująca", od jej wartości zależy, czy wykonałeś jakąś akcję (w tym przypadku - kliknięcie myszą)
×
×
  • Dodaj nową pozycję...