-
Postów
2 728 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
44
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez Konrad-GM
-
Bohater jak zginie za szybko pokazany jest wynik w highscore
Konrad-GM odpowiedział(a) na pankracy temat w Pytania zaawansowanych
Bezmyślne kopiowanie kodu jest Twoim największym wrogiem teraz Postaraj się, powoli ale do przodu, zrozumieć jak działa Twój kod i dlaczego on tam w ogóle jest. Sprawdź każdy skrypt, każde wywołanie funkcji, gdzie masz przechodzenie do następnego poziomu room_goto, prześledź, co i dlaczego Ci wykonuje ten skrypt. Ja tu widzę dwa główne problemy: 1. W obj_game_controler w evencie Step masz taką linijkę: if (global.life > 0) { global.life -=1; } // (...) Czy to Cię nie niepokoi? Przecież co Step tracisz życie, czyli 60x na sekundę tracisz życie. Czy na pewno tak to powinno wyglądać? 2. Nie trzymasz żadnego formatowania kodu, co dzieląc się kodem tutaj z nami na forum, to kompletnie nie mam ochoty tego czytać, ale pewnie inni też tak mają Szanuj nas i nasz czas w zrozumieniu Twojego kodu, jeżeli Ty nie możesz tego zrobić/nie chcesz, to tym bardziej komuś się nie będzie chciało. -
Ja też spróbuję coś wyciosać, w Godocie pewnie, ale czasu nie mam praktycznie więc będzie coś durnie prostego A ten FPP AoE fajny jest nawet x)
-
Problem obiektów poruszających się po okręgu
Konrad-GM odpowiedział(a) na godegode temat w Pytania początkujących
Kod jest jak najbardziej poprawny, ale kolejność wykonywania zdarzeń Step tutaj Ci już przeszkadza. Zrób poruszanie planetą (keyboard_checki) w Begin Step zamiast Step. Kolejność wykonywanych zdarzeń w tym wypadku jest ważna, ponieważ wygląda to tak: 1. Aktualizuj Drzewa - ustaw pozycję i użyj stary obrót planety 2. Aktualizuj Planetę - ustaw nowy obrót planety 3. Rysuj scenę - rysuje Ci Drzewa i Planetę, ale Drzewa pamiętają tylko stary obrót Planety Jak w obiekcie Planeta zmienisz Step na Begin Step, to będzie wyglądać to tak: 1. Aktualizuj Planetę - ustaw nowy obrót 2. Aktualizuj Drzewa - ustaw pozycję i użyj nowy obrót planety 3. Rysuj scenę - Drzewa jak i Planeta już są dobrze rysowane -
Pytanie odnośnie zastosowania większych scenerii w grze.
Konrad-GM odpowiedział(a) na pankracy temat w Pytania zaawansowanych
Przetestuj różne ustawienia, które najlepiej będą działać dla Twojego projektu. Tutaj nie ma najlepszego, jedynie słusznego wyboru, staraj się, żeby wykonywać jak najmniej tzw. "draw calls", jeżeli chcesz optymalizować rendering oczywiście. Rozmiar tekstur do potęgi dwójki ma na celu zoptymalizowanie rysowania jak i zachować kompatybilność z prawie każdym GPU. Większość nowszych GPU wspiera tekstury NPOT, ale najwyraźniej GM idzie bardziej w kompatybilność sprzętową. -
Pytanie odnośnie zastosowania większych scenerii w grze.
Konrad-GM odpowiedział(a) na pankracy temat w Pytania zaawansowanych
Nie zostaną pewnie nawet podzielone na texture pages, bo dwie tekstury 3840x2160 (i więcej oczywiście) nie mieszczą się w atlasie o rozmiarze 4096x4096. Chyba, że inne sprite dołączą się do tego samego texture page. Tła musiałyby być podzielone na 2048x2048 (a właściwie to 2046x2046, ale to poniżej dlaczego), żeby zmieściły się 4 w jednym atlasie, bądź po prostu trzymaj się rozmiarów 4096x4096 na tła. To już decyzja którą sam musisz podjąć mając na uwadze wymagania projektu. Jeszcze pozostaje kwestia obramowania - jeżeli zmieścisz więcej jak jedną teksturę na atlasie, to pozostaje problem z wrapowaniem pikseli przy interpolacji. Defaultowo GM2 używa opcji 'clamped' co rozwiąże Ci większość problemów z interpolacją pikseli. A więc wynikowy rozmiar wrzucony do texture page i tak będzie większy niż 3840x2160 (zapewne zostanie rozszerzony do 3842x2162): Opcję tę można wyłączyć wymuszając ładowanie tła na oddzielnym texture page. Pamiętaj również, że jak tekstura będzie większa jak texture page, to zostanie zeskalowana w dół. -
Pytanie odnośnie zastosowania większych scenerii w grze.
Konrad-GM odpowiedział(a) na pankracy temat w Pytania zaawansowanych
1. Tekstura i tak zapewne zostanie przydzielona do texture page 4096x4096, ale trzymałbym się pociętych tekstur, żeby w razie zmniejszenia texture page (każdy export ma inny limit) GM nie rzygał błędami przy kompilacji. 2. Nie widzę przeciwwskazań. 3. Texture page jest inaczej zwanym atlasem tekstur, a rozmiar ograniczony jest na każdy export ponieważ niektóre GPU nie obsłużą Ci tak dużych rozmiarów tekstur. https://docs2.yoyogames.com/source/_build/1_overview/3_additional_information/texture_pages.html -
Backgrounds wyrzucili z drzewka zasobów oraz usunęli powiązanie z tłami API background_index, background_colour itd.. Przy imporcie tła powinny być skonwertowane na warstwy i w razie używania backgroundowych API, powinno Ci automatycznie podmienić również kod na API warstw. https://help.yoyogames.com/hc/en-us/articles/231719468-Porting-A-GMS-1-4-Game-To-GameMaker-Studio-2
-
Jest to prosty shader, wystarczy większość kodu po prostu skopiować do fragment shadera. Port zrobiony w 5min: https://gmclan.org/up1717_16_FogShader.html
-
To tak jeszcze dodam od siebie przy postinkrementacji (ta sama zasada przy postdekrementacji) var a = 3; show_message(string(a++) + ", " + string(a++)); show_message(a); Da wynik "3, 4" i "5", ponieważ postinkrementacja (jak i również postdekrementacja) działa jak funkcja, bo po każdym a++ zwracana jest stara wartość i dopiero dodawana 1. Gdyby w GM istniały referencje, to wyglądałoby to mniej-więcej tak (kod dla przykładu w C): int postinc(int &var) { int temp = var; var += 1; return temp; } I wywołanie postinc wygląda tak: // A tutaj kod w pseudo-C, więc też nie do kopiowania :) int a = 3; show_message(string(postinc(a)) + ", " + string(postinc(a))); show_message(a); Dlatego czasami może być szybsze używanie ++a zamiast a++ (względem wykonywania kodu, nie jego tworzenia ), bo pomijamy etap kopiowania wartości do zmiennej tymczasowej. Chociaż taka mikro-optymalizacja w GM jest bezużyteczna, z wiadomych chyba względów. Oraz warto pamiętać, że używanie kilka razy a++ w jednym wywołaniu skryptu/funkcji może dać nieoczekiwany wynik.
-
Globalna zmienna, tak jak to opisuje @SimianVirus7, jest jak najbardziej spoko opcją, ale dodatkowo zrobiłbym to jak @gnysek proponuje, wystarczy dodać stałe do projektu difficult_easy, difficult_medium i difficult_hard. Ale zrezygnowałbym ze switchy, są mega brzydkie
-
Nie do końca, a++ nie da wyniku 4, a 3. var a = 3; show_message(a++); show_message(a);
-
Panowie, a co z window.addEventListener? Można przecież podpiąć eventy tj. 'beforeunload' albo/i 'unload'. Jeżeli chodzi o attachEvent, to IE i canvasy to i tak odpadają, więc można pominąć w ogóle.
-
Cześć, podeślij jeszcze konfigurację GM Web-api. Znak '%' oznacza po prostu "dowolny ciąg znaków" w tym wypadku adres klienta kończący się na ".devil" (to pewnie jakiś wewnętrzny DNS MyDevila). Jeżeli @gnysek używał MyDevila to powinien wiedzieć jak odpowiednio skonfigurować bazę.
-
[C#] Jak pozbyć się informacji o wyjątkach
Konrad-GM odpowiedział(a) na MaxGaming temat w .NET Framework (C#, ASP.NET itp.)
Niestety sporo drobnych, acz użytecznych funkcji brakuje Visual Studio, które by mi ułatwiły z pisaniem w C++ i TypeScript/JavaScript. Dlatego w większości czasu i tak korzystam z VisualStudio Code. Chociażby wyświetlanie białych znaków, żeby nie commitować tabulatorów zamiast spacji (ofc. linter przed commitem też może pomóc, ale jakoś wygodniej mi mieć bieżący podgląd co robi IDE), albo zamiana zakończeń linii z CRLF (Windows) na LF (Uinx like) to po prostu koszmar pod Visual Studio, to samo dotyczy się kodowania znaków na UTF-8... -
[C#] Jak pozbyć się informacji o wyjątkach
Konrad-GM odpowiedział(a) na MaxGaming temat w .NET Framework (C#, ASP.NET itp.)
A więc to "problem" z IDE a nie samym językiem czy kodem. Z tą globalną funkcją to zasugerowałem się Twoim ostatnim pytaniem więc stąd ta nadinterpretacja Podejrzewam, że używasz Visual Studio - IMO w takim razie jedyne co możesz zrobić, to wyłączyć wyświetlanie wyjątków (PPM na "Output Window", odznacz "Exception Messages") a informacje które Cię interesują wypisywać do konsoli samemu, np. możesz użyć klasy System.Diagnostics.Debug żeby pisać do strumienia "Output Window". Nie widzę, żeby Visual Studio miał jakąś funkcję do filtrowania wyjątków np. po nazwie, niestety. -
Przekierowanie domeny to akurat nie problem. Jeżeli masz domenę wykupioną na dhosting to możesz dalej ją tam opłacać (poza hostingiem) albo kupić/przenieść gdzieś indziej np. nazwa.pl czy godaddy.pl - jedyne co musisz zrobić, to dodać domenę (virtual host) na swoim hostingu www i zmienić DNS żeby przekierowały na nowy hosting.
-
[C#] Jak pozbyć się informacji o wyjątkach
Konrad-GM odpowiedział(a) na MaxGaming temat w .NET Framework (C#, ASP.NET itp.)
Zapewne niewłaściwie podchodzisz do łapania wyjątków. Globalna funkcja łapiąca WSZYSTKIE wyjątki to chyba najgorsze rozwiązanie na które mogłeś wpaść - właśnie przez to masz ten problem. Jeżeli API zapewnia rzucanie wyjątkami, powinieneś je obsługiwać z poziomu swojego kodu już w aplikacji, podczas wykonywania jakiejś funkcji, zwłaszcza jeżeli nie chcesz "pewnych" wyjątków propagować w górę. Minimalizuj korzystanie z globalnej funkcji do łapania wyjątków. -
[GMS1.4] Pobranie danych z przeglądarki
Konrad-GM odpowiedział(a) na doctor temat w Pytania początkujących
Jeszcze natknąłem się na taki artykuł o js. Dodając prefix gmcallback_ do skryptów w GMie można wywoływać te skrypty z poziomu innych javaskryptów na stronie, np. gml_Script_gmcallback_moj_skrypt(); powinien odpalić Ci skrypt z gry. -
[GMS1.4] Pobranie danych z przeglądarki
Konrad-GM odpowiedział(a) na doctor temat w Pytania początkujących
Cześć, można się dostać do zasobów przeglądarki poprzez rozszerzenia. Żeby strona miała dostęp do ciasteczek czy localstorage, to musi pochodzić z tej samej domeny co Twój skrypt logowania, bo inaczej przeglądarka Ci nie pozwoli dostać się do ciasteczek czy zasobów innych witryn. Dotyczy to chociażby Facebooka czy Google, jak pojawia Ci się popup z logowaniem to musisz je obsłużyć po stronie swojego serwera i wtedy możesz wymienić się danymi, ale równocześnie nie możesz się dostać bezpośrednio do zasobów Fb czy Google (chociażby przez sesję). -
Cześć, nie widzę, żeby w GMie były takie opcje z drag & drop, ale to dość łatwo osiągnąć kodem, wystarczy, że dodasz klocki z takim kodem: Kod na końcu gry (np. ekran game over) aby dodać gracza do tabeli w obiekcie obj_koniec np. w Create Event: /// Dodaj gracza do tabeli wynikow var imie = get_string("Wprowadz swoje imie", ""); highscore_add(imie, score); Kod w obiekcie obj_tabela do wyświetlania tabeli wyników w Draw Event: /// Rysuj tabele wynikow draw_highscore(100, 100, room_width - 100, room_height - 100);
-
Tak, w drag and drop masz bloki od IF. Powinno to mniej-więcej tak wyglądać:
-
Cześć, chyba najprościej będzie zrobić zmienną np. w Create Event obiektu obj_gracz: has_gun = false; Po zebraniu broni ustawiasz zmienną has_gun na Prawda: has_gun = true; A jak masz już strzelanie, to dajesz ten kod do bloku IF, np.: if (has_gun) { // kod na strzelanie }
-
Nie przejmuj się, że gra będzie "brzydko" wyglądać, lepiej popróbować z różnymi rozwiązaniami a przy tym pouczyć się środowiska.
- 10 odpowiedzi
-
[c#] Kontrolka webbrowser w trybie incognito
Konrad-GM odpowiedział(a) na MaxGaming temat w .NET Framework (C#, ASP.NET itp.)
Używa IE w rzeczy samej, ale chyba żadna wersja IE nie miała trybu porno, przynajmniej ja nie widzę takiej opcji w IE11 na Win10. A czy to koniecznie musi być M$-owy WebBrowser? Ja bym próbował szczęścia z innymi browserami jak np.http://cefsharp.github.io/ CEF więcej opcji ma i powinien ogólnie lepiej działać imo. -
Cześć, możesz użyć funkcji instance_place w obiekcie nadrzędnym np. o_dashboard (o mniejszym Depth, żeby zawsze rysowało tekst na pierwszym planie). Funkcja ta zwraca ID instancji pod danymi współrzędnymi X,Y - mogą to być też współrzędne kursora. Można cały kod zamieścić w Draw Event obiektu o_dashboard: var inst = instance_place(mouse_x, mouse_y, o_gwiazda); if (inst != noone) { draw_set_halign(fa_center); draw_set_valign(fa_bottom); var text = 'Star at ' + string(inst.x) + ', ' + string(inst.y); draw_text_colour(inst.x, inst.y - 16, text, c_white, c_white, c_white, c_white, 1.0); draw_set_valign(fa_top); draw_set_halign(fa_left); } Jeżeli obiekty o_gwiazda nie mogą mieć z jakiegoś powodu większej maski (żeby nie musieć precyzyjnie myszką nakierowywać), to możesz użyć funkcji instance_nearest w ten sposób: var inst = instance_nearest(mouse_x, mouse_y, o_gwiazda); if (inst != noone && point_distance(mouse_x, mouse_y, inst.x, inst.y) < 10.0) { draw_set_halign(fa_center); draw_set_valign(fa_bottom); var text = 'Star at ' + string(inst.x) + ', ' + string(inst.y); draw_text_colour(inst.x, inst.y - 16, text, c_white, c_white, c_white, c_white, 1.0); draw_set_valign(fa_top); draw_set_halign(fa_left); }