Skocz do zawartości

Threef

Moderatorzy
  • Postów

    2 911
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    14

Treść opublikowana przez Threef

  1. Hmm... Pierwsze co musisz pamiętać to by mieć ten sam podpis cyfrowy "Keystore". Bez tego nie ma w ogóle mowy o aktualizacji. Jeżeli zapisywałeś dane w plikach zewnętrznych to nie zostaną one nadpisane, chyba że sam to robisz przez przypadek, ale już byś się zorientował. Jeżeli projekt ma inny "package name" to nie będziesz mógł odczytać danych, bo GM:S sandboxuje i nie pozwala na odczyt nie swoich danych.
  2. Threef

    Nasze strony

    O! Zapomniałem że taki temat istniał! Ja ostatnio starając się o pracę splotłem w kilka godzin portfolio. Złamałem swoją własną zasadę i ma ono kilkadziesiąt MB wagi. Jest to galeria gifów z linkami. damiankomorowski.pl
  3. No to odpowiem na te kilka pytań. Ale właśnie o to chodzi że o wiele szybciej będzie Ci stworzyć osobną komendę dla każdej zmiennej niż podmieniać wszystkie zmienna na wartości z tablic/list/słowników. Ale jeżeli jesteś uparty i masz ochotę stracić 2 dni na próbie zrobienia tego to zapraszam na koniec posta. Tablica jest półką na ksiażki. Musisz tylko wiedzieć gdzie leży książka by ją wziąć. Tablica dwuwymiarowa jest szafką z wieloma półkami. Musisz wiedzieć gdzie i na której półce leży książka. Tablica trójwymiarowa to kilka szafek. Musisz znać 3 dane: Szafkę, półkę i pozycję. Tablica czterowymiarowa to biblioteka podzielona na działy. Już chyba kapujesz. Kolejka jest dosłownie kolejką. Ktoś kto przychodzi staje na jej końcu a obsługiwany jest ten co stał najdłużej. Stos to bałągan, albo sterta kartek. Aby znaleźć tę która cię interesuje musisz najpierw zabrać te które leżą na niej. Tablica asocjacyjna to słownik w którym wiedząc czego szukamy znajdziemy to bez problemu. GM daje nam specjalne struktury: ds_list który jest tablicą ds_grid czyli tablicę dwuwymiarową ds_map który jest słownikiem ds_queue czyli kolejkę ds_stack czyli stos ds_priority_list który jest gówno wart. Excel jest arkuszem kalkulacyjnym. Ale najbliżej mu do tablicy trójwymiarowej a nawet czterowymiarowej o ile się nie mylę. I am vader opisał to dostatecznie dobrze. Pokazałeś to tym kawałkiem kodu: Pomijając działania na stringu które nie działają. Stworzyłeś listę, wcisnąłeś jej string na pozycję 1 (insert to nie replace! Ja się wcześniej pomyliłem, ale to tylko znaczy że nie przeczytałeś jak działa), po czym nadpisałeś wskaźnik na listę innym stringiem. Chcę oczywiście zauważyć że nie jest to wskaźnik rozumiany jako wskaźnik na komórkę pamięci. To tylko zmienna przechowująca ID struktury do której chcemy się odnosić. Tak, nie jest idealna. Ale... W 98% podany przykład działa. Jeżeli chodzi o struktury to musisz poznać wszystkie ich funkcje. Nie ma ich dużo, ale dopiero znając pełną zasadę tworzenia struktury, zapisywania wraz z odczytywaniem z niej danych, a potem usuwania tych danych i struktury; dopiero wtedy będziesz mógł sobie wyobrazić jak działa. Tak widziałem te 2% które nie ma prawa działać. :P A teraz jak zrobić ten twój bezsensowny pomysł z użyciem tablic! (spoiler: Nie spodoba Ci się bo i tak musisz stworzyć "komendę" dla każdej zmiennej. Na ds_map nie musiałbyś :P) W obiekcie kontrolerze (persistent obiekcie który zawsze będzie w grze) w create stwórz tablicę od i do 0. Tak, malejąca. Przypisz do komórek tablicy twoje startowe dane. Prędkość gracza czy co tam chcesz. W każdej komórce inna "zmienna" Na kartce papieru zapisz sobie co oznacza każda komórka tablicy. Czyli co wpisałeś w zerową, co w pierwszą, etc. Wszędzie w grze gdzie odnosisz się do tej zmiennej stwórz odwołanie do tablicy obiektu kontrolera. Najłatwiej będzie Ci nadpisywać wartość istniejących już zmiennych. Pamiętaj aby odnosić się do odpowiedniej komórki, bo inaczej to nie ma sensu. Odpal grę i sprawdź czy cokolwiek działa. Przed przejściem do kolejnego punktu wyeliminuj wszystkie błędy. Więc przejdźmy do twoich komend: Najpierw musisz w jakiś sposób parsować dane z twojej konsoli. Przejdź do kolejnego punktu gdy uda Ci się wyodrębnić 2 dane: Co i na ile ustawić. Musisz w jakiś sposób porównać to co wpisałeś w konsoli z twoimi zmiennymi. Dla tablicy i listy nie masz innego wyjścia niż to co zrobiłeś na samym początku. Musisz porównać czy twoja komenda to 'szybkosc_biegania' i przypisać wartość z komendy to odpowiedniej komórki tablicy. I tak dla każdej innej zmiennej. Gratulacje! Straciłeś kilkadziesiąt godzin, a i tak zrobiłeś to samo tylko bardziej skomplikowanie. Alternatywa z ds_map. W obiekcie inicjatorze (taki który pojawia się tylko raz) w create stwórz globalne ds_map. Dodaj do ds_map twoje startowe dane. Prędkość gracza czy co tam chcesz. W każdym kluczu inna "zmienna". Nadaj im ładne nazwy jak: 'szybkosc_biegania'. Wszędzie w grze gdzie odnosisz się do tej zmiennej stwórz odwołanie do odpowiedniego klucza ds_map. W zależności jak do jakiej zmiennej przypisałeś utworzoną ds_map, coś takiego: global.slownik[?"szybkosc_biegania"] Odpal grę i sprawdź czy cokolwiek działa. Przed przejściem do kolejnego punktu wyeliminuj wszystkie błędy. Więc przejdźmy do twoich komend: Najpierw musisz w jakiś sposób parsować dane z twojej konsoli. Przejdź do kolejnego punktu gdy uda Ci się wyodrębnić 2 dane: Co i na ile ustawić. Musisz w jakiś sposób porównać to co wpisałeś w konsoli z twoimi zmiennymi. Nie ma problemu bo w konsoli możesz podawać nazwę klucza. Więc jeżeli zrobisz sobie komendę w konsoli typu: "szybkosc_biegania=12" i umiesz to sparsować to wystarczy że dla klucza "szybkosc_biegania" w mapie nadpiszesz wartość 12. Gratulacje! Działa.
  4. Nie. Nie wiesz w jaki sposób działają struktury. Nie wiesz w jaki sposób działają listy i nie wiesz w jaki sposób działają zmienne. Zaprzestań tego co robisz i siądź do dokumentacji. To banalne, ale brakuje ci podstawowego zrozumienia. Zacznijmy od początku: Chcesz zrobić konsolę która pozwoli Ci zmieniać argumenty w obiekcie. Aby to zrobić musisz wyodrębnić 2 informacje: "Co" i "na ile" chcesz ustawić. Dobrze kombinujesz z keyboard_string, ale nie rozumiesz chyba jak działa string_replace(). Parsowanie stringu aby wyciągnąć z niego dwie dane to zagadnienie na osobny długi temat. Mając obie informacje możesz działać. Jedynym sensownym rozwiązaniem jest porównywanie informacji wpisanej z konsoli z kluczem. Możesz to robić switch-em albo zwyczajnie if-em. Oba sposoby są równie dobre. GML switch (zmienna) { case "szybkosc biegania": szybkosc_biegania=wartosc; break; case "szybkosc strzelania": szybkosc_strzalania=wartosc; break; } GML if(zmienna="szybkosc biegania") { szybkosc_biegania=wartosc; } if(zmienna="szybkosc strzelania") { szybkosc_strzalania=wartosc; } I na tym powinieneś skończyć rozważania. To jest sposób w jaki powinno się to zrobić. Trzy kroki: Odczyt danych, parsowanie danych i porównanie do klucza. Później zaczęły się dywagacje na temat twojego drugiego pytania, na które od razu dostałeś odpowiedź: Potem ediepl podał Ci nie kompletną odpowiedź. Jest to możliwe do zrobienia na tablicach albo listach... ale także na wiele innych sposobów. Natomiast nie powinno się tego robić. Powodów jest wiele: Spowolnienie wykonywania kodu gry, bo zamiast odnosić się do pojedynczej zmiennej informacja musi być odnaleziona w tablicy (albo liście). Błędy kompilacji, bo nie możesz być pewien czy dane których szukasz istnieją. Złe zarządzanie pamięcią RAM. (Zapraszam do poznania struktur, a nawet architektury komputera na którym piszesz) Zerowa czytelność. Bo teraz zamiast używać w swoim kodzie zmiennej musisz się odnosić do nieznanej tobie komórki w tablicy (albo liście). Co jest czytelniejsze? GML if(keyboard_check_pressed(vk_right)) { x+=szybksc_biegania } czyGML if(keyboard_check_pressed(vk_right)) { x+=ds_list_find_value(lista_wszystkich_zmiennych,73) } 73 jest numerem komórki który ty powinieneś pamiętać za co odpowiada. Tak jak każdy inny numer, każdej zmiennej jaką chcesz używać. Powodzenia. Ja zaproponowałem użycie słowników. To rozwiązanie jest o tyle lepsze że wyklucza zapamiętywanie przez ciebie numerów komórek. Bo w słowniku nie ma komórek, zamiast tego są klucze, jak w prawdziwym słowniku. Łatwiej jest znaleźć coś w książce wiedząc że jest pod nazwą "szybksc_biegania", niż pamiętając że jest na 73 stronie. Różnica wygląda tak: GML if(keyboard_check_pressed(vk_right)) { x+=ds_map_find_value(lista_wszystkich_zmiennych,"szybksc_biegania") } Ale to nie rozwiązuje żadnego z pozostałych problemów które opisałem. Wciąż jest to wolne, nie czytelne, będzie powodować masę błędów i nawet nie potrafisz sobie wyobrazić implementacji tego. Tak więc zapomnij o tym wszystkim co opisałem, siądź do dokumentacji aby przeczytać jak działają wszystkie funkcje do obsługi stringów i zrób to na switchu. Nie kombinuj, bo to że można coś zrobić w jakiś sposób nie znaczy że powinno się to robić.
  5. Threef

    Youtube.

    Youtube będzie próbował wyświetlać film domyślnie w 16:9 chyba że urządzenie ma inne proporcje. Jeżeli został przesłany w innych proporcjach to automatycznie doda letterbox. To nie jest tak że można coś zmienić. Problem nie był po stronie YT bo przesłany film albo będzie działał albo nie. To był problem programu, ustawień renderu, kodeków, albo czegoś innego po stronie eksportu.
  6. Bardzo źle. ds_list_create() zwraca ci ID struktury. Więc musisz je gdzieś zapytać i się do niego odwoływać w reszcie funkcji. GML lista=ds_list_create() ds_list jest tak na prawdę zwykła tablicą. Więc przypisujesz jej wartości na poszczególne komórki. Nie możesz sobie wybrać żeby przypisało wartosc do zmienna. Możesz co najwyżej przypisać wartosc do którejś pozycji w tablicy. Zerowej, pierwszej, drugiej... etc. Oczywiście możesz zrobić zmienną która będzie przechowywać numer pozycji, ale nie to chcesz zrobić. Ten przykład zapisze wartosc w komórce o numerze 1. GML wartosc=string_replace(keyboard_string,'wartosc ',''); lista=ds_list_create() ds_list_insert(lista, 1, wartosc)
  7. Threef

    Batch Scanner

    Co? :unsure: Wydaje mi się że korzystasz z internetu w bardzo zły sposób.
  8. Threef

    Youtube.

    W czym to robisz? Bo to zdecydowanie wina twojego programu i ustawień jakie masz.
  9. Threef

    Youtube.

    Bo może twój odtwarzacz automatycznie poprawia ci proporcje. To ty coś zrobiłeś źle. Instrukcje przesyłania Rozwiązywanie problemów
  10. Tablice asocjacyjne aka słowniki aka ds_map. GML mapa[?"stara_szybkosc_biegania"] Ale ostrzegam. Nie rób tego. Niesamowicie Ci to spowolni grę jeżeli każda zmienna będzie pozycją w ds_map.
  11. Threef

    Youtube.

    WMV? Tak to twoja wina. Śle wyrenderowałeś film. Jeżeli dostałeś WMV to znaczy że nie wiedziałeś co robisz i pewnie takie były domyślne ustawienia. YT nic nie skopało.
  12. Ogółem zawsze powinno się robić specjalny pusty room który definiuje wszystkie zmienne globalne, tworzy persistent obiekty, wszystkie inne ustawienia i automatycznie przechodzi do drugiego room.
  13. Threef

    Filmy

    Noo Interstellar rewelacja. Ja zobaczyłem dopiero w zeszłym roku jak byłem u znajomych i podczas rozmowy wyszło że nie oglądałem. Resztę wieczoru spędziliśmy przed filmem.
  14. Threef

    Filmy

    Obejrzałem. Teksty były spoko. Bohaterowie ok, ale całość była dla mnie bardzo słaba. Ja natomiast w końcu obejrzałem X-Men: Przeszłość, która nadejdzie i Captain America: Civil War. Nigdy nie byłem fanem X-Menów i nie mam zdania o tym filmie, ale gdybym miał zapłacić za bilet do kina to byłbym nie zadowolony. Civil War odpychał mnie wszystkimi trailerami. Wiedziałem na czym polega konflikt i wydawało mi się że film za bardzo od tego odbiegnie. Na szczęście się myliłem. Konflikt pomiędzy bohaterami był i to konkretny a nie wyssany z palca, no i bohaterowie zachowywali się zgodnie ze swoimi poglądami. Ten mi się podobał. Ach! Widziałem też <Harmony/>. Dla mnie cacuszko 9/10. Ciężko będzie mi przekonać kogoś z was do obejrzenia, bo nawet jak ktoś lubi takie klimaty to może być zawiedzony zakończeniem które nic nie wyjaśnia.
  15. Threef

    2 Guys 1 Gun

    POOOOOOLSKA GOLAAA!
  16. Nie będzie działać bo zrobiłeś literówkę ;) Jak przepisze z głową zamiast ctrl-v to zadziała.
  17. Kolejne punkty na łuku to kolejne momenty w symulacji. Jeżeli znajdziesz wzór na wyznaczenie n pozycji to kolejną będzie n+1.
  18. Tak. I wczytywane z pamięci. Chyba o tym też trzeba przygotować jakiś tutorial.
  19. Threef

    Tura #152 - Dyskusja

    Brawo! Obie gry mi się podobają. Dobra robota i gratulacje zwycięscy!
  20. Mamy calutką gildię polską i sobie siedzimy na TS. Ja już też chyba gram bardziej dla socialu. Wczoraj zrobiłem Glory of the Hero i zaczęliśmy progressować ICC10HC czego się nie spodziewałem. 4 Bossów padło i może skończymy na weekend. A ogółem to serwer jest bardzo przyjemny. Niski ping. EXPx7 + x2 w weekendy. Honor x7. No i transmogification. W sumie to jakbyście dziś zaczęli grać to we wtorek już byście byli z nami na ToC25 a potem ICC25 w czwartek. ;) Dużo nie trzeba grać.
  21. Threef

    Seriale

    Mr. Robot mnie zbytnio nie wciągnął. Widziałem za dużo luk w fabule i oglądałem bardziej na siłę. Ale drugi sezon zobaczę bo wg mnie nie było już miejsca na kontynuację. A Vikings się skończył i nic nie pisałem. Ostatni sezon był bardzo podobny do pierwszego i drugiego. Nie podobało mi się to że otwierali nowe wątki, przedstawiali nowe postaci żeby zaraz o nich zapomnieć jakby były nie ważne. Ale samo zakończenie, czyli ostatni epizod było epickie.
  22. Threef

    Tura #152 - Dyskusja

    O 18:00 jest rozpoczęcie ale zakończenie jest o 21:00. Wierzę że dacie radę. ;)
  23. Threef

    Seriale

    Lost z sezonu na sezon robi się coraz gorszy, więc nie porzuć i oglądaj do końca bo warto. Ja powoli zabieram się za drugi sezon Suits. Ale znów nie mam czasu by oglądać.
×
×
  • Dodaj nową pozycję...