Skocz do zawartości

Konrad-GM

Użytkownicy
  • Zawartość

    2585
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    8

Ostatnia wygrana Konrad-GM w Rankingu w dniu 13 Luty

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

Reputacja

23 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

20926 wyświetleń profilu
  1. Dobra, rozwiązałem swój problem, ale głupotę zrobiłem, aż mi wstyd xD No ale może ktoś taki sam problem będzie miał, to dla potomnych podaję rozwiązanie: Otóż na stronie view.page, uwaga, importuję moduł rodzica session.module i dlatego router ponownie przekierowywał na list.page bo jest zdefiniowany w session.module i tak w kółko. Chciałem wcześniej importować komponenty rodzica, ale wyczytałem wcześniej już, że do tego potrzebny jest shared.module, tylko zapomniałem usunąć z view.page importu modułu session.module, kek.
  2. Cześć, ktoś się może zajmuje tutaj Angular-em? Bo prosiłbym o pomoc kogoś, kto miał jakieś doświadczenie z Router-em. Otóż Angular dziwnie się zachowuje, jak buduje routing aplikacji, chodzi dokładniej o child Routers w modułach. Podzieliłem podstrony aplikacji na moduły, które importują routing poprzez RouterModule.forChild i przekierowanie z modułu sessions.module na list.page działa, ale gdy przekierowuję na view.page z modułu sessions.module, to kompletnie się psuje routing i przekierowuje mnie znowu na list.page z dość dziwnym linkiem. Struktura aplikacji wygląda tak: src\app |- app-routing-module |- \home |- home.page |- \intro |- intro.page |- \sessions |- sessions.module |- \list |- list.page |- \view |- view.page |- \shared |- shared.module Kod głównego modułu app-routing.module: import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; const routes: Routes = [ { path: '', redirectTo: 'intro', pathMatch: 'full' }, { path: 'home', loadChildren: './home/home.module#HomePageModule' }, { path: 'intro', loadChildren: './intro/intro.module#IntroPageModule' }, { path: 'sessions', loadChildren: './sessions/sessions.module#SessionsModule' } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule {} Kod modułu session.module wygląda tak: import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; const routes: Routes = [ { path: '', redirectTo: 'list', pathMatch: 'full' }, { path: 'list', loadChildren: './list/list.module#ListPageModule' }, { path: 'view', loadChildren: './view/view.module#ViewPageModule' } ]; @NgModule({ imports: [ CommonModule, RouterModule.forChild(routes), ] }) export class SessionsModule {} Przekierowuję na stronę view.page dyrektywą: [routerLink]="['/sessions', 'view']" Link przed przekierowaniem wygląda tak: http://localhost:8100/sessions/list Po kliknięciu na link, przekierowuje mnie do tej samej strony list.page, ale link wygląda już tak: http://localhost:8100/sessions/view/list Zauważyłem, że jak usunę kod odpowiedzialny za przekierowanie w module sessions.module: const routes: Routes = [ // { // path: '', // redirectTo: 'list', // pathMatch: 'full' // }, { path: 'list', loadChildren: './list/list.module#ListPageModule' }, { path: 'view', loadChildren: './view/view.module#ViewPageModule' } ]; To wtedy działa jak powinno, ale nie przekierowuje mnie na list.page jak przejdę na link /sessions (trzeba przekierowywać bezpośrednio na /sessions/list) Może ktoś ma jakiś pomysł, dlaczego w taki właśnie sposób zachowuje się Angular?
  3. [GMS1.4] Przeglądarki

    Ok, poświęciłem trochę czasu i zrobiłem "brudny" przykład jak można to zrobić z Google Drive. Przykład tworzy przykładowy plik na drive. Ale nie widzę możliwości, żeby przeglądarka sama otwierała okno gry żeby wrócić :/ https://gmclan.org/up1717_16_OAuth2.html Przykład działa tak jak opisałem, otwiera url z oauth i tworzy bardzo mikro serwer "http". Potem czeka aż przyjdą dane z tym wymaganym parametrem `code`
  4. Mnożnik punktów

    Cześć, możesz stworzyć np. zmienną globalną tj.: global.score_multiplier = 0.0; Potem np. przy zderzeniu z bonusem w Collision Event dodawać do tego mnożnika jakąś wartość i uruchamiać alarm u gracza bo bonus po usunięciu poprzez instance_destroy nie wywoła Ci alarmu, np: global.score_multiplier += 0.20; other.alarm[0] = room_speed * 60; W alarmie gracza odejmuj bądź resetuj mnożnik. Zależy też, czy chcesz obsługiwać kilka mnożników na raz, to wtedy zamiast alarmów możesz wykorzystać Step Event i ds_list/ds_grid jako timery bonusów. global.score_multiplier -= 0.20; Do dodawania punktów możesz stworzyć skrypt, który ułatwi Ci obsługę mnożnika w różnych miejscach projektu: /// scr_add_score(score) score += argument0 * (1.0 + max(0, global.score_multiplier));
  5. [GMS1.4] Przeglądarki

    Tak naprawdę to interesuje Cię pierwsze logowanie OAuth2 w przeglądarce, ponieważ Twoja aplikacja wymaga odebrania odpowiedzi od serwera autoryzującego, dokładniej chodzi o parametr `code`. Potem z poziomu już aplikacji w GMie puszczasz POST (poprzez http_request) do tego serwera autoryzującego, żeby otrzymać `access_token` oraz `refresh_token`, które umożliwiają Ci dostęp do zasobów już bez konieczności dalszej ingerencji użytkownika. (https://alexbilbie.com/guide-to-oauth-2-grants/) Znalazłem coś takiego - https://developer.okta.com/blog/2018/07/16/oauth-2-command-line. Wygląda na dość legitne rozwiązanie, o ile na stronie w której tworzysz aplikację OAuth2 umożliwia Ci ona przekierowanie po localhoście (ustawienie parametru `redirect_uri` na localhost). Generalnie wygląda to tak (poza użyciem PHP ofc.) - otwierasz lokalny serwer w GMie (tworząc serwer za pomocą funkcji network_create_server_raw) i czekasz, aż odbierzesz dane z przekierowania (zwłaszcza na parametr `code`) od użytkownika gdy przekieruje go strona autoryzacji (użyj chociażby url_open żeby otworzyć przeglądarkę z endpointem autoryzacji). Pamiętaj, że serwer HTTP działa jak każdy inny serwer, po socketach, tyle, że w GMie otrzymasz cały bufor wraz z nagłówkami. Potem po odebraniu wiadomości zamykasz lokalny serwer i wysyłasz POSTa z parametrem `code` i otrzymujesz wymagane tokeny, kiedy wygaśnie `access_token`, odnawiasz go dzięki `refresh_token` ale już tylko przy użyciu POST i http_request. Sprawa inaczej wygląda, jak używasz eksportu HTML5, bo tutaj już masz serwer, wystarczy, że będziesz nasłuchiwał na kod i wymienisz go z aplikacją w GMie np. poprzez GMowe rozszerzenia javascriptowe. Pewnie byłbym w stanie jakiś przykład zrobić czy coś, ale to dość sporo zachodu a aktualnie czasu nie mam na zabawę
  6. [GMS1.4] Przeglądarki

    Cześć, 1) jeżeli chodzi Ci o otworzenie przeglądarki w oknie gry, to jest to niemożliwe, bo GM nie ma wbudowanej przeglądarki www i mogę z pewnością rzec, że nie będzie miał jej w przyszłości. 2) ale jak sama się wyłączy? wątpię, żeby mogła, jak już otwierasz przeglądarkę np. poprzez execute_shell (nie wiem czy jeszcze działa w GMS), to nawet JS nie umożliwia Ci manipulowaniem okna przeglądarki. 3) przecież jest funkcja http_request, powinna działać też w eksporcie HTML5. Nie wiem, co próbujesz osiągnąć, IMO na 99% przypadków komunikacji z serwerem to http_request wystarczy.
  7. Wyśrodkowanie textu

    Też zdecydowanie polecam surface, bez takiego glScissor to chyba najlepsza opcja właśnie zrobić to na surface.
  8. Wyśrodkowanie textu

    Ok, przerobiłem swój kod żeby łamał słowa jak i linie, traktując ciąg spacji również jak słowo: /// scr_wrap_string(string,w) var text = argument0, len = argument1; var strlen = string_length(text); var i = 1, c = '', w = '', word = '', line = '', result = ''; while (i <= strlen) { c = string_char_at(text, i++); w = string_char_at(word, 1); // lamanie tekstu if (c == '#') { result += line + word + '#'; line = ''; word = ''; w = ''; continue; } // przelamujemy linie if (line != '' && string_width(line + word) > len) { result += line + '#'; line = ''; } // przelamujemy slowo if (string_width(word + c) > len) { line += word + '#'; word = ''; w = ''; } // budujemy slowo // ciag spacji traktujemy jako slowo if ((c == ' ' && (w == '' || w == ' ')) || (c != ' ' && w != ' ')) { word += c; } else { line += word; word = c; // linii nie zaczynamy spacja if (string_char_at(line, 1) == ' ') { line = ''; } } } result += line; result += word; return result; Jako, że teraz skrypt ten łamie tekst również w linii, nie potrzebujemy używać draw_text_ext a wystarczy draw_text: var text = scr_wrap_string("Lorem ipsum dolor sit amet, andverylongwordthatmustbesplitted", 100); draw_set_color(c_black); draw_rectangle(10, 10, 110, 210, false); draw_set_color(c_white); draw_text(10, 10, text);
  9. Wyśrodkowanie textu

    Cześć, możesz podzielić słowa które są dłuższe niż dana szerokość i rysować tekst za pomocą draw_text_ext. Skrypt do łamania słów: /// scr_wrap_words(string,w) var text = argument0, len = argument1; var strlen = string_length(text); var i = 1, c = '', word = '', result = ''; while (i < strlen + 1) { c = string_char_at(text, i++); if (string_width(word + c) > len) { word += '#'; } word += c; if (c == ' ') { result += word; word = ''; } } return result + word; W połączeniu z draw_draw_text: var text = scr_wrap_words("Lorem ipsum dolor sit amet, andverylongwordthatmustbesplitted.", 100); draw_set_color(c_black); draw_rectangle(10, 10, 110, 210, false); draw_set_color(c_white); draw_text_ext(10, 10, text, 15, 100); Rezultat powinien być wystarczający:
  10. Wyśrodkowanie textu

    Spróbuj użyć draw_text_ext, nie jestem pewien, czy nowa linia będzie wyśrodkowana, musisz sprawdzić. Jeżeli nie, to pozostaje podzielenie linii np. do tablicy i rysować wg. własnego algorytmu.
  11. Pochodna przyciągania wielu obiektów

    Polecam odświeżyć sobie podstawy z fizyki newtona Przypisz każdemu obiektowi co ma masę wektor prędkości liniowej (np. stwórz wektor linear_velocity). Posługuj się przyśpieszeniem grawitacyjnym i dodawaj do tej zmiennej (wektora) wartość przyśpieszenia co step pomnożoną przez delta_time. Wzór ogólny dla przyśpieszenia grawitacyjnego: - warto chociaż przejrzeć https://pl.wikipedia.org/wiki/Przyspieszenie_grawitacyjne Żeby obliczyć dla każdego obiektu przyciąganie, możesz posłużyć się opcją z with, np. var gc = 0.0000000000667408 // 6.67408E-11, stała grawitacyjna with (obj_asteroid) { if (other.id == id) { continue; } // zakladamy rowniez, ze (x,y) to srodek masy obiektu var r = point_distance(x, y, other.x, other.y) var r2inv = 1.0 / (r * r); var accel = gc * mass * r2inv * delta_time other.linear_velocity_x += accel; other.linear_velocity_y += accel; } Potem tylko już aplikujemy ruch: x += linear_velocity_x * delta_time; y += linear_velocity_y * delta_time;
  12. Sezon #2, Tura #1

    W sumie mam kilka gier z bundli, Samorost 3, Warhammer: End Times - Vermintide z jakimś DLC, Verdun a nawet Solstice i jeszcze parę - z możliwością wysłania jako gift na steam, nawet mam Game Maker Studio 1 Pro z Android Exportem. Ale to stary GM , to nie wiem, czy się nadaje na ligę. Bundle kupowałem specjalnie dla jakichś pojedynczych gier czy eksportów do GMa, więc większość kluczy nawet nie aktywowałem i nie wiem do końca, co w nich jest, musiałbym jeszcze przejrzeć. Też nie wiem, jak jest z żywotnością tych kluczy na steam, czy nie przedawniają się po jakimś czasie.
  13. Sezon #2, Tura #1

    Przyznam, że to "gra żart", ale super, że się koncept spodobał. Chociaż miałem okazję przetestować Godot 3.1 Beta. BTW widziałem też, że w akademii jest sekcja Godot, może udałoby mi się napisać jakiś artykuł bądź dwa. Ja zagłosowałem natomiast na grę @Uzjel, ciekawie wygląda, fajny klimat a i fajnie się gra, do tego bonusy, chociaż brakuje oddzielnego licznika punktacji ogólnej, bo za wszystko się płaci punktami. Gra @Korodzik też jest super, pewnie jakby nie wyświetlanie punktów w tabeli podczas głosowania, zagłosowałbym na tę grę, ale IMO podium dla @Uzjel też się należy za fajną grę Bonus: mały hack w grze @SLy setInterval(() => { Array.from(document.getElementsByClassName('clown')).forEach(clown => clown.click()) }, 250) Fajnie, że liga ożyła, oby tak było co najmniej do następnego sezonu
  14. Punkty za zabicie grupy przeciwników

    Cześć, najłatwiej byłoby po prostu dla każdej jednostki z oddziału "zapamiętać" z jakiego spawna pochodzą. Po prostu zrobić jakiś prosty licznik i sprawdzać, czy został on wyzerowany: W obiekcie powiedzmy obj_spawn dodajesz zmienną w Create Event: units_alive = 0; Potem przy tworzeniu jednostki obj_unit nadać mu dodatkowo ID instancji obj_spawn jako "pochodzenie", np. w obiekcie obj_spawn w User Event 0 dać coś takiego: // tworzymy instancje jednostki var unit = instance_create(x, y, obj_unit); unit.spawn_id = id; // dodajemy jednostke do licznika units_alive += 1; A na koniec w obiekcie obj_unit w Destroy Event wystarczy dekrementować licznik powiązanej instancji obj_spawn: spawn_id.units_alive -= 1; Potem sprawdzenie ile jednostek pozostało żywych jest chyba oczywiste
  15. Zatrzymanie gry

    Możesz jeszcze użyć dezaktywacji obiektów, ale trzeba pamiętać, aby obiekt popup-a był aktywny, bo inaczej nie będzie można wrócić do gry W Create Event obiektu obj_popup daj taki kod: instance_deactivate_all(); instance_activate_object(obj_popup); Ale pamiętaj też o aktywacji obiektów po zniknięciu komunikatu, np. w Event Destroy obiektu obj_popup daj: instance_activate_all(); Edit: GameMaker nie udostępnia funkcji do przetworzenia zdarzeń systemowych -> pętla w grze po prostu Ci nie zadziała, bo nie będziesz w stanie obsłużyć żadnego kliknięcia, nawet krzyżyka na belce okna. Jeżeli pisałeś kiedykolwiek aplikacje na Windowsa, to jest tam taka funkcja jak GetMessage/PeekMessage, GameMaker nie udostępnia swojego odpowiednika Pętla musiałaby wyglądać tak: 1. obsłuż zdarzenia systemowe 2. jezeli nacisniete esc lub myszka na ok skocz do 6<- tutaj można sprawdzić, czy esc/myszka została naciśnięta bo zdarzenia systemowe zostały zinterpretowane 3. wyswietl napis 4. swap buffers - wyświetl na ekran wygenerowany obraz 5. skocz do 1 6. <kontynuuj program> Ale w GameMakerze jest to niemożliwe. Przynajmniej nie znalazłem funkcji do obsługi systemowych zdarzeń.
×