Skocz do zawartości

Konrad-GM

Użytkownicy
  • Zawartość

    2642
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    15

Ostatnia wygrana Konrad-GM w Rankingu w dniu 21 Czerwiec

Konrad-GM posiada najczęściej lubianą zawartość!

Reputacja

33 Mała Cegła Społeczności

O Konrad-GM

  • Tytuł
    Legendary Hobo
  • Urodziny 07/31/1992

Contact Methods

  • Website URL
    https://lethiandev.github.io/

Previous Fields

  • Steam
    samael_x92
  • Użytkownik GameMaker Studio 2
    Nie
  • Użytkownik GameMaker Studio
    Tak
  • Użytkownik GameMaker 8
    Nie
  • Użytkownik GameMaker 7 i wcześniejszych wersji
    Nie
  • Użytkownik Unity
    Nie
  • Uytkownik Godot
    Tak

Profile Fields

  • Płeć
    Mężczyzna

Ostatnie wizyty

21943 wyświetleń profilu
  1. A czy zapis/odczyt pliku nie jest przypadkiem synchroniczny? BTW. Często też widziałem metodę, która chroniła stary zapis gry tworząc plik tymczasowy na czas zapisu i dopiero po wykonaniu zapisu usuwał stary plik i podmieniał nazwy.
  2. Temat zbiorczy na drobnostki

    To może znajdź, na którym etapie występuje u Ciebie ten problem, potem staraj się go naprawić. BTW. Zapisujesz tekst w bazie, musisz się upewnić, że format JSONa też jest poprawny. Edit. Albo timeout dostajesz od serwera, albo za mało pamięci masz przypisane do Nginxa/Apache i też przerywa połączenie. Sprawdź to Postmanem albo w przeglądarce (musisz formularz POST stworzyć, albo przerób skrypt na GETy), czy to samo dostajesz.
  3. Temat zbiorczy na drobnostki

    A zrób requesta Postmanem i upewnij się, czy Ci ten skrypt zwraca całość tekstu i go nie ucina, to wtedy będzie ewidentnie gdzieś problem po stronie GMa. Raczej ten kod echo json_encode($response); Nie powinien powodować ucinania znaków, ale możesz na wszelki wypadek sprawdzić to funkcją json_last_error_msg.
  4. Temat zbiorczy na drobnostki

    Cześć, a dostajesz jakiś błąd, czy string jest niepełny? Jakiego typu jest to pole do którego zapisujesz jsona?
  5. Maska kolizji ataku bohatera

    Co do zapętlania animacji, to jak @gnysek wspomniał już, GM je zapętla bo tak działa w nim animacja Może dodaj limit jakiś na image_index, np. coś takiego: if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_speed = 0; image_index = clamp(89-(zegarAtaku), 0, 89); zegarAtaku -= 0.5; } Co do drugiego problemu, to może spróbuj warunkowo clamp-ować image_index: if wPowietrzu == true && drabina == false { sprite_index = spr_player_air; var cmin = 0, cmax = 0; if vspd <= -1 { cmin = 0; cmax = 5; } else if vspd >= 1 { cmin = 5; cmax = 10; } else { cmin = 5; cmax = 5; } klatkaAnimWPowietrzu = clamp(klatkaAnimWPowietrzu + 0.5, cmin, cmax); image_index = klatkaAnimWPowietrzu; } Dodałem zmienną klatkaAnimWPowietrzu to musisz ją dać w Create i resetować (klatkaAnimWPowietrzu = 0) zawsze przy skakaniu.
  6. Znana gra w innym wydaniu

    Też nie miałem czasu nawet zacząć, mam tylko rozplanowane co chciałem zrobić, ale prawie nic okodowane. Głównie teraz praca czas mi zabiera, ale jak będzie 2nd edycja to odświeżę swój pomysł pewnie
  7. A może wystarczy vy + view_hview - 120 + 5
  8. draw_rectangle(view_xview + 10, (view_yview + view_hview) - 120, (view_xview + view_wview) - 10, (view_yview + view_hview) - 30, false); Rozłóżmy tę funkcję na parametry: view_xview + 10 to parametr liczący nam od lewej krawędzi ekranu + 10 pikseli (view_yview + view_hview) - 120 ten parametr liczy nam już od dolnej krawędzi ekranu - 120px (view_xview + view_wview) - 10 ten parametr teraz liczy nam od prawej krawędzi ekranu - 10px (view_yview + view_hview) - 30 a ten parametr już liczy nam ponownie od dolnej krawędzi ekranu - 30px false po prostu rysuje nam pełny prostokąt A teraz funkcję na rysowanie tekstu: draw_text_ext(vx+12,vy+586-20-100-2,string_copy(string(text),1,round(leght)),-1,596); Rozbijemy na: vx+12 liczymy pozycję tekstu od lewej krawędzi ekranu + 12px vy+586-20-100-2 liczymy pozycję tekstu od górnej krawędzi ekranu + 586px - 20px - 100px - 2px, w skrócie + 464px string_copy(string(text),1,round(leght)) zapewne kasujesz nadmiar tekstu, nie wiem ale to nie wpływa na pozycję tekstu a jego długość -1 odległości pomiędzy liniami w pikselach 596 przesunięcie tekstu do następnej linii gdy przekroczy ono tę długość Teraz przyjrzyj się parametrom i zauważ, że liczysz pozycję tekstu od górnej krawędzi ekranu, a nie powinieneś tego robić, policz pozycję od dolnej krawędzi ekranu jak w pierwszym przypadku. Poczekaj aż będzie Ci przełamywać tekst w ramce za wcześnie, to dopiero mind fcuk.
  9. Ale to nie ma żadnego znaczenia, skoro tylko obsługuje Ci jeden przypadek. Musisz też obliczyć pozycję tekstu od wysokości ekranu, a nie od górnej jego krawędzi.
  10. Zauważ, że ten kod: draw_rectangle(view_xview + 10, (view_yview + view_hview) - 120, (view_xview + view_wview) - 10, (view_yview + view_hview) - 30, false); A ten kod: draw_text_ext(vx+12,vy+586-20-100-2,string_copy(string(text),1,round(leght)),-1,596); Inaczej liczą Ci pozycje, bo drugi kod ma kompletnie gdzieś wysokość i szerokość ekranu.
  11. No bo jak ma Ci to działać, skoro tekst dalej rysujesz w ten sam sposób? Nic z tym nie zrobiłeś to się nie dziw, że Ci nie działa W linii: draw_text_ext(vx+12,vy+586-20-100-2,string_copy(string(text),1,round(leght)),-1,596); Popraw pozycjonowanie tekstu razem z ramką.
  12. Albo użyj funkcji display_set_gui_size i ustaw tam stałą wartości dla np. 1024x600, albo zamiast na stałe ustawiać pozycję jak np. draw_rectangle(30, 400, 994, 570, false) to przelicz pozycję od ramek ekranu, np. używając display_get_gui_width i display_get_gui_height, coś takiego: var w = display_get_gui_width(); var h = display_get_gui_height(); var x1 = 30; var y1 = h - 230; var x2 = w - 30; var y2 = h - 30; draw_rectangle(x1, y1, x2, y2, false);
  13. Racja, nie mam możliwości żeby w backendzie coś zmienić teraz, dlatego pozostanę przy tej opcji z tworzeniem sekwencji requestów i dodam jakiś modal w razie problemów. Ale chyba tak zrobię jak proponujesz, dodam przycisk np. "Renew save" w modalu "Failed to save survey" Ok, stworzyłem w TS generic "diff" modeli. kompletnie pomija mi pozycje elementów w tablicy, ale chyba na moje potrzeby będzie działać ok. export enum DiffResultAction { Create = 'create', Update = 'update', Delete = 'delete' } export interface DiffResult<T> { action: DiffResultAction; from: T; to: T; } export function diff<T>(from: T[], to: T[], hasSameId: (from: T, to: T) => boolean): DiffResult<T>[] { return to.map(dest => diffElement(dest, from, hasSameId)).concat(diffReduce(from, to, hasSameId)); } function diffElement<T>(dest: T, sourceArray: T[], hasSameId: (from: T, to: T) => boolean): DiffResult<T> { const foundElement = sourceArray.find(element => hasSameId(element, dest)); if (foundElement) { return { action: DiffResultAction.Update, from: foundElement, to: dest }; } else { return { action: DiffResultAction.Create, from: null, to: dest }; } } function diffReduce<T>(from: T[], to: T[], hasSameId: (from: T, to: T) => boolean): DiffResult<T>[] { return from.filter(source => !to.some(dest => hasSameId(source, dest))).map<DiffResult<T>>( removedElement => ({ action: DiffResultAction.Delete, from: removedElement, to: null }) ); }
  14. Hej @gnysek dzięki za odpowiedź. Problem z rozpoznawaniem zasobu po GUID rozwiązuje mi posiadane przez każdy zasób ID wygenerowany AUTO_INCREMENT-em już po stronie serwera, więc chyba zastosuję się do Twojej propozycji i będę trackował zmiany po ID tych zasobów zamiast pozycji jak w `diff`. W zasadzie wtedy nowe elementy mogę też identyfikować po tym, że ID mają ustawione na 0. Kolejność zasobów też mam w bazie oznaczone polem 'order' więc w jakiej kolejności będę aktualizował same dane to chyba też bez znaczenia, bo nie muszę znać kolejności zasobów na serwerze a jedynie ustawiać pole `order`. Tylko tutaj stworzenie jakiejś metody generic diff chyba odpada, bo nie każdy model danych może mieć pole o nazwie `id`. może jakaś lambda/arrow function jako parametr by ten problem rozwiązała. Generalnie rozbiłem też trochę swój problem na mniejsze elementy, bo sprawdzam `diff`em tylko Pytania i tworzę RxJS-em obserwatory, do każdego zasobu Pytanie dołączam drugi `diff` ale już dla modyfikacji zasobów Odpowiedzi i łączę je do tego samego strumienia obserwatora RxJS co zasób Pytanie. Stąd mi też będzie trzymać kolejność wykonywanych requestów. Tylko, że problem z tym jest taki, że w razie jakby w połowie przesyłania danych coś się nie udało wysłać, np. serwer odrzuci któryś request POST, PATCH, czy DELETE, to wtedy przerwie mi zmiany w połowie aktualizacji. Będę musiał to pewnie rozwiązać jeszcze implementując jakiś mechanizm obsługi błędów który wznawiałby przerwane requesty
  15. Cześć, mam pewien problem z tworzeniem a zwłaszcza edycją zagnieżdżonych zasobów w usłudze podobnej do RESTa. Otóż tworzę pewien panel z podstawowymi funkcjami CRUD, w którym mam zagnieżdżone zasoby, które to wyglądają mniej-więcej tak: Ankieta <1-N> Pytanie <1-N> Odpowiedź Gdzie <1-N> to relacja 1 do wielu. I mój problem polega na tym, że tworzę formularz: [Tytuł] [Opis] [Pytanie[]] - [Odpowiedź[]] - [Odpowiedź[]] - [Odpowiedź[]] [Pytanie[]] - [Odpowiedź[]] - [Odpowiedź[]] itd. I przy tworzeniu to jest ok, wysyłam najpierw Ankietę, dostaję ID zasobu, tworzę kolejne zasoby - pytanie i dostaję kolejne ID zasobów a na koniec tworzę odpowiedzi, następne pytanie itd. a wygląda to tak: (ANKIETA => SERWER) [SERWER => ANKIETA => ZAPISZ DO ZMIENNEJ] (PYTANIE => SERWER) [SERWER => PYTANIE => ZAPISZ DO ZMIENNEJ] (ODPOWIEDŻ => SERWER) [SERWER => ODPOWIEDŹ => ZAPISZ DO ZMIENNEJ] (ODPOWIEDŻ => SERWER) [SERWER => ODPOWIEDŹ => ZAPISZ DO ZMIENNEJ] (ODPOWIEDŻ => SERWER) [SERWER => ODPOWIEDŹ => ZAPISZ DO ZMIENNEJ] (PYTANIE => SERWER) [SERWER => PYTANIE => ZAPISZ DO ZMIENNEJ] (ODPOWIEDŻ => SERWER) [SERWER => ODPOWIEDŹ => ZAPISZ DO ZMIENNEJ] (ODPOWIEDŻ => SERWER) [SERWER => ODPOWIEDŹ => ZAPISZ DO ZMIENNEJ] Gdzie (...) to request, a [...] to response. Teraz mam problem przy edytowaniu takich zasobów, otóż dodam kilka pytań, odpowiedzi, niektóre usunę i muszę potem przeszukać starą listę i nową, tworząc tak jakby `diff` zmian, np.: {action: "select", type: "survey", from: {...MODEL ANKIETY}} {action: "remove", type: "question", from: {...MODEL PYTANIA}} {action: "remove", type: "question", from: {...MODEL PYTANIA}} {action: "add", type: "question", from: null, to: {...NOWY MODEL PYTANIA}} {action: "update", type: "question", from: {...MODEL PYTANIA}, to: {...NOWY MODEL PYTANIA}} {action: "select", type: "question", from: {...MODEL PYTANIA}} {action: "add", type: "answer", from: null, to: {...NOWY MODEL ODPOWIEDZI}} Tylko, ze to wygląda mega skomplikowanie i ciężko potem wprowadzać modyfikacje czy nawet debuggować w razie problemów. Czy ktoś może pomóc mi z rozwiązaniem takiego problemu z designem? Może z doświadczenia ktoś zna rozwiązanie, albo po prostu ma pomysł jak z takim czymś sobie poradzić. Dzięki.
×