Skocz do zawartości

Threef

Moderatorzy
  • Postów

    2 911
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    14

Treść opublikowana przez Threef

  1. Może gdzieś indziej, na przykład w draw, używasz zmiennej i? Tworząc jakąkolwiek DS do zmiennej przypisujesz jej wewnętrzne ID.GML list_id = ds_list_create()Jest to normalna zmienna przechowująca jakiś numer. Jeżeli chcesz się odwołać do tej DS innego obiektu musisz znać ten numer. Najnormalniej możesz zrobić to jak z innymi zmiennymi.GML ds_list_add(obiekt_ktory_stworzyl_ten_DS.list_id, obj_blue)
  2. Yo! Skasowałeś już screeny? To nie słaba jakość screenów tylko przeogromna domyślna kompresja renderu. Skopiuj mencoder.exe do folderu który ma się złożyć na film i odpal przez konsolę: mencoder.exe "mf://*.png" -mf fps=30 -o output.avi -ovc xvid -xvidencopts bitrate=9999999 Oczywiście pierw musisz przenieść się w konsoli do tego folderu, albo zrobić shift+click na folderze ze screenami i wybrać "Otwórz wiersz poleceń tutaj". No i nie zapomnij zmienić argumenty fps i rozszerzenie plików. Poprawa jakości jest nieporównywalna. Edit: A łączenie nagrania z muzyką: mencoder.exe output.avi -o output_so.avi -ovc copy -oac mp3lame -audiofile GMC.wav
  3. Tak możesz zainstalować na większej ilości komputerów. Nie pamiętam czy jest to 3 czy 5. Tylko nie kombinuj i nie korzystaj z nich w tym samym czasie. ;)
  4. Yo kt, maska kolizji też się obraca. Da radę to zrobić bez kombinowania. ;)
  5. Trochę mało napisałeś ale ruch wahadła najłatwiej odwzorujesz sinusem. Nie ważne na jaki sposób to robisz, ta jakoś uda Ci się to podpiąć pod twoje rozwiązanie. GML licznik+=0.3//Szybkość wahadła odchyl=22//Jak bardzo ma się odchylać image_angle=sin(licznik)*odchyl //albo //x=xstart+sin(licznik)*odchyl
  6. No to pokaż może jakieś fragmenty kodu gdzie coś się dzieje z hp? Na ślepo to możemy wieki rozmyślać.
  7. Na początek powiem że skłamałem niemiłosiernie. Podane czasy to nie była średnia, a mediana wzięta na oko. Po prostu z około 25 wyników wybrałem te które nie były skrajnie wielkie czy skrajnie małe, a te które miały przybliżoną wartość. Nigdzie nie widzę aby MaxGaming pytał o zamianę na system dwójkowy. Wręcz przeciwnie, pytał o optymalniejsze rozwiązanie od tego które sam używał. Niestety robisz z siebie teraz głupka bo sam zaproponowałeś wyliczanie pojedynczych znaków i rysowanie je pojedynczo z przesunięciem o szerokość znaku. Ja zoptymalizowałem twoją propozycję by w ogóle miała szansę być porównana z innymi metodami, bo samo użycie draw_text() 10 razy sprawia że nie mamy o czym gadać. Jeżeli zrobiłem to źle to proszę, masz wolna rękę w poprawieniu mnie i udowodnieniu że jestem w błędzie. Nikt Ci tego nie zabroni. Ja mogę się mylić i sam nigdy nie będę mieć pewności, ale zawsze będę wiedzieć gdy ktoś próbuje mi wciskać taki bullshit. Przypomnę też że nie można już wykonywać operacji draw, w tym rysowania na surface, nigdzie poza eventami draw. Tak, w większości będą one działać, ale nie wszystkie a nawet będę mogły powstawać artefakty. Cała sztuczka polega na tym aby przechowywać w pamięci string (nawet jeżeli jest on wyliczany co step) niż wykonywać 10 operacji podnoszenia do potęgi i dzielenia. No i zostawiając na koniec: Nokia 3310 dłużej trzyma baterię od iPhone 6. I co z tego skoro nie o to pytamy? Kolejna prowokacja do warna za odbieganie od tematu? Jeżeli chcesz spróbować znaleźć optymalniejszy sposób, bo przypominam o to pytał MaxGaming, to proszę bardzo. Jeżeli nie to dalsza dyskusja będzie traktowana jako off topic. I to się tyczy każdego, nie tylko 3r3se7ven. Ten problem został rozwiązany. Zapraszamy do dalszych pytań.
  8. GML l=10 n=123 rep=10000 //Threef timer=get_timer() repeat(rep) { draw_text(0,0,string_repeat("0",l-string_length(n))+string(n)) } show_debug_message("string_repeat(): "+string(get_timer()-timer)) //kt1117 timer=get_timer() repeat(rep) { draw_text(0,0,string_copy(string(10000000000+n),1,l)) } show_debug_message("string_copy(): "+string(get_timer()-timer)) //3r3se7ven timer=get_timer() repeat(rep) { var nsi = 10; var s=""; for(p = l; p >= 0; p--) { var dts = floor(n/power(nsi, p)) mod nsi; s+=string(dts) } draw_text(0,0,0) } show_debug_message("Seven: "+string(get_timer()-timer)) Średnie czasy wykonania każdego z proponowanych sposobów (w mikrosekundach): string_repeat(): 533634 string_copy(): 384585 Seven: 1332550 @3r3se7ven: niestety nie udało mi się zoptymalizować twojego przykładu bardziej. p.s.: Nawet nie sprawdzałem czy wyniki są poprawne. Przy sposobie kt1117 może być źle.
  9. Kłamczuszki! Internetu nie maja a na forum piszą! xD A tak na poważnie to nie podałeś co jest źle. Zdiagnozuj pierw czy tracisz połączenie pomiędzy komputerem a routerem, routerem a dostawcą (Multimedia czy co tam masz), czy może od dostawcy do hosta. P Start => Uruchom => "cmd" => Enter => "tracert www.google.com" Zobacz adresy.
  10. Domyślnie tło samo się zapętla a swój początek ma w punkcje 0,0 room. Wszystko teraz zależy od tego co chcesz zrobić. Czy to ma być paralax czy może jakiś inny efekt. Wszystkie funkcje i zmienne dotyczące teł zaczynają się od background_*, a zmienne są tablicami (bo możesz ustawić sobie kilka teł w room). Tak więc background_x[0] to zmienna pozycji x pierwszego tła. Możesz do niej np przypisać pozycje gracza pomnorzoną przez jakaś wartość aby otrzymać paralaksę. GML background_x[0]=gracz.x*1.1
  11. OK, dziękuję za wyjaśnienie. Więc od początku wiedziałeś w czym jest problem ale postanowiłeś drążyć nie powiązany z tym temat. Pierwszy Warn. Witamy na forum.
  12. Zacytuję żebyś przypadkiem nie zedytował i się nie wykręcał. Input myszy i klawiatury (poza kilkoma specjalnymi funkcjami) odbywa się wewnątrz silnika. Jest tak jak napisałem. Problem był w banalnych obliczeniach i uważam temat za zamknięty. Dalsza dyskusja będzie juz traktowana jako off topic bo nie jest to miejsce na takie dyskusje. A żebyś mógł zobrazować:
  13. Wiec ja może wytłumaczę Chell z czym był problem. Sam na początku nie zauważyłem, a był dość prosty. Event wykonywał się dobrze, ale druga akcja przesunięcia y korzystała już z nowego przesuniętego x. @3r3se7ven: Nie mam pojęcia co chciałeś pokazać ostatnim postem. Jest późno i nie chce mi się zastanawiać więc ułatw mi to. Czy użyłeś argumentu potwierdzającego to co ja pisałem tylko po to aby wyszło na to że i tak masz rację, czy może po prostu starałeś się kolejny raz wywołać dyskusję nie na temat i zarobić w końcu warna?
  14. Nie jest synchroniczna, ale już drugi raz poprawiam Cię bo GM jest silnikiem wysokopoziomowym. Pozycje myszy pobiera na początku pętli gry i aktualizuje ją dopiero przy następnym kroku. Tutaj nic nie odbędzie się asynchronicznie. Nie ma to nic związku z problemem.
  15. Twój błąd jest w obliczeniach. Warunek gdzie sprawdzasz x jest bardzo dziwny i zajęło mi chwilę samo go rozszyfrowanie a to przecież zwykłe porównanie. Spróbuj napisać sobie po polsku w jakich warunkach ma się akcja sprawić. Wtedy mozę zrozumiesz w czym masz problem.
  16. Threef

    PGA 2015

    Wiem, przecież byłem z wami na tym piwie. :D To wtedy była sobota gdzie ja taryfami pomiędzy trzema imprezami latałem.
  17. Threef

    PGA 2015

    No wtedy to było trochę nie ładne. Argument że na twoją ostatnią prelekcję przyszło mało ludzi był trochę nie na miejscu... bo w tym samym czasie prelekcję miał Sos. Ale z wejściówkami to raczej twoja wina. :/ I know that feel. Przecież na pierwsze ZTG jakim byłem w Łodzi nie dopytaliśmy się z kumplem gdzie mamy nocleg. :D Pierwszą noc kitraliśmy się a drugą waletowaliśmy w pokojach Exigo i Jakima. xD To wciąż moja ulubiona historia do opowiadania przy piwie. Tak dobrze się bawiliśmy że zapomnieliśmy że musimy się dowiedzieć gdzie nas zakwaterowano... 2 dni pod rzad!
  18. No to dawaj temat zapowiedzi the Parszywa Dwunastka remake żeby potem było do Community Awards 2015!
  19. Acha. Chyba rozumiem. Jeden obiekt chce sprawdzić czy pomiędzy nim a innym obiektem oWarrior są inne obiekty oWarrior? Ok, więc problem jest taki że koniec lini jest w punkcie x/y obiektu oWarrior. Twój pomysł ze skróceniem linii jest dobry, ale wydaje mi się że można to obejść małym trikiem. Nie testowałem tego ale w teorii powinno być ok. GML var xx=_nearestPlayer.x, yy=_nearestPlayer.y; _nearestPlayer.x-=10000 _nearestPlayer.y-=10000 //test !collision_line(xx, y, xx, yy, oWarrior, false, true) _nearestPlayer.x+=10000 _nearestPlayer.y+=10000 Zmiana pozycji odbywa się raz po raz w jednym step więc nie powinno być tego widać. ;)
  20. Piaty argument to ID obiektu albo instancji z którą chcesz sprawdzać kolizję. collision_line() nie sprawdza kolizji z solidami a każdym obiektem o jaki pytasz. W czym jest problem?
  21. Ciężko jest mnie wywrócić z równowagi ale tobie się udało. Gratuluję. Twoje dwa posty z tego jednego tematu wydaja się zaprzeczać same sobie. Poza tym kolejny raz nie zrozumiałeś problemu i starałeś się, wykorzystując swoją dużą wiedzę którą szanuję, podsunąć rozwiązanie które w zupełny sposób nie pasuje do problemu. I nie przypominam sobie żeby którykolwiek z twoich ostatnich postów na forum w ogóle w jakiś sposób ukierunkowywał w stronę rozwiązania. Za każdym razem odbiegasz od tematu jakby twoim jedynym celem było pochwalenie się wiedzą. Niestety ale kolejne takie posty będą już karane.
  22. Metoda jest taka: Pierw tworzysz mp_grid dla całej mapy zawierający tylko nie ruchome obiekty. Funkcje mp_grid podczas tworzenia zwracają ds_grid który możesz sobie zapisać. To jest jeden który nie będzie się nigdy zmieniał i musisz go wygenerować tylko raz. Potem jeżeli tworzysz ścieżkę dla jakiegoś przeciwnika to możesz stworzyć nową tymczasową mp_grid i dodać do niej już wcześniej wygenerowany. A mp_grid nie używa się co step tylko od czasu do czasu, bo on zwraca gotowy path. Ale nie używaj w takim wypadku mp_grid bo nie ma on dla Ciebie żadnych korzyści. Ruchy są nie naturalne i wyrównane do siatki, a samo użycie go będzie sprawiało masę problemów. Drobnych ale jednak. Jedyny plus byłby taki jeżeli robiłbyś sporą sieczkę pokoi i chciałbyś aby przeciwnik który nie widzi swego celu doszedł do niego. Ale wtedy w momencie gdy cel jest widoczny trzeba wyłączyć poruszanie przez mp_grid i z powrotem przejść na mp_potential_step. A wracając do mp_potential_step: Ostatni punkt z poprzedniego mojego posta będzie działać. Podczas poruszania sprawdzaj czy na pozycji x+hspeed i y+vspeed nie dojdzie do kolizji. Jeżeli tak to niech oba obiekty skomunikują się i rozwiążą spór. Na początek dobrym sprawdzeniem będzie czy w ogóle któryś ma wolna drogę. Jeżeli jeden ma a drugi nie to drugi ma czekać. To bardzo prosty warunek. Jeżeli obaj mają zablokowaną przez siebie drogę to maja sprawdzić czy jeżeli się wycofają o krok to odblokują drogę drugiemu. Jeżeli oba mogą to zrobić to trzeba jakoś wybrać który ma to zrobić. Na przykład ten szybszy, albo ten bliżej, albo ten z więcej HP. Jeżeli jednak żaden z nich po zrobieniu kroku wstecz nie odblokuje drogi to musisz szukać innych akcji. Np 2 kroki wstecz.
  23. Nawet jeżeli to gra akcji to musisz myśleć jakby to była gra turowa. Jeżeli np jeden przeciwnik wejdzie w korytarz to pozostali powinni wiedzieć o tym i szukać innej drogi, albo poczekać aż ten pierwszy przejdzie. Możesz to robić na wiele sposobów. Najprostsze będzie tworzenie nowego mp_grid co step uznając każdy ruchomy obiekt za przeszkodę, ale to nie ma sensu. Innym rozwiązaniem będzie tworzenie nowego mp_grid pod jakimiś warunkami. Na przykład gdy obok będzie inny ruchomy obiekt który może się poruszyć i zablokować mi zaraz drogę. Musisz przeanalizować co się u ciebie dzieje w grze i szukać odpowiednich rozwiązań. Może w momencie gdy dwaj przeciwnicy idą do tego samego celu w wąskim korytarzu musisz zapytać obu który powinien iść przodem? Wyliczyć na podstawie odległości, szybkosci, ilości HP, siły ataku i innych warunków który powinien mieć pierwszeństwo. Wtedy ten drugi wystarczy że się zatrzyma na moment a potem ponownie wygeneruje sobie drogę. Edit: Pisząc zapomniałem że pytasz o mp_potential_step a nie mp_grid. :D
×
×
  • Dodaj nową pozycję...