Barsztik Opublikowano 2 Stycznia 2016 Udostępnij Opublikowano 2 Stycznia 2016 Hej. Napotkałem problem, którego rozwiązanie musi być proste, ale nie potrafię go znaleźć. Jak sprawić by poszczególnym instancjom danego obiektu przypisać różne wartości, czyli de facto potrzebuję wyłuskać numer konkretnej instancji obiektu? Stworzyłem więc nowy plik "grę", który służy tylko do przedstawienia problemu. W nim jeden domyślny wymagany room oraz jeden obiekt obj_npc. W obiekcie obj_npc dodałem event Draw a w nim taki kod: draw_text(x,y, instance_id); W roomie wstawiłem 5 razy obiekt obj_npc. Po odpaleniu gry w miejscach obiektów pojawia się wszędzie -4. Co powinienem wpisać w: draw_text(x,y, ????????????????????????????); by w miejscach obiektów pojawiły się liczby 1,2,3,4 i 5 zgodnie z kolejnością wstawiania obiektów w roomie? próbowałem instance_number(obj_npc) ale wtedy zlicza mi wszystkie instancje i wszędzie pojawia się 5. Pozdrawiam Barsztik. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 2 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 2 Stycznia 2016 a spróbuj zamiast "instance_id" samo "id" Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 2 Stycznia 2016 Udostępnij Opublikowano 2 Stycznia 2016 No i zmień to do stringa jak chcesz wyświetlić string(id) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 2 Stycznia 2016 Autor Udostępnij Opublikowano 2 Stycznia 2016 Hej, dzięki, jestem już bliżej rozwiązania problemu. I am Lord, z tym stringiem racja, chociaż nie ma to w sumie znaczenia, bo wyświetla i jak jest string(id) i jak samo id. niemniej dodałem string dla higieny. ;-) ANtY, samo id działa dopóki jest tylko jeden obiekt i kilka instancji. draw_text(x,y, id); zlicza wszystkie instancje wszystkich obiektów. O ile w roomie były same obj_npc nie było problemu, ale jak dodałem nic nie robiące obj_wall, one również liczyły się do numeracji. Próbowałem wstawić obj_npc.id, ale wtedy wszystkie miały wartość 1 (w zasadzie 100001). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 2 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 2 Stycznia 2016 no tak, tak działa id, unikalny numer dla kazdej instancji w grze anyways, zrob sobie w create GML fakeID = instance_number(obj_npc); i pozniej wyswietlaj te fakeID, jesli sie nie myle to powinno przypisac kolejno 0,1,2,3,4 i ile ich tam nie będziesz miał do czego to potrzebujesz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 2 Stycznia 2016 Autor Udostępnij Opublikowano 2 Stycznia 2016 Opcja z fakeID w Create niestety nie działa, dla każdej instancji wyświetla łączną ich liczbę, tak samo jak bym dał to w Step. A potrzebuję tego do identycznych NPCów... już tłumaczę. Robię platformówkę (bo chyba na nich najprościej się uczyć), ale wymyśliłem sobie, by historia w niej była opowiadana przez napotkanych NPCów, obrazy/plakaty na ścianach, regał z książkami itp... kawałek po kawałku. Oczywiście jak na platformówkę przystało fabuła nie będzie zbyt rozbudowana ;-) I tu dochodzimy do sedna. Powiedzmy że na ścianie wiszą trzy obiekty obj_plakat, wyglądają tak samo (mała, pikselowa grafika) bo są trzema instancjami tego samego obiektu. Ale po kliknięciu na każdy z nich pojawiał by się inny tekst, fragment opowieści. Jak w klasycznych RPGach po kliknięciu na różne przedmioty pojawiały się napisy ::cóż, za dziwna księga:: itp... Oczywiście nie chcę tworzyć odrębnych obiektów, więc wymyśliłem sobie, że teksty będę dla wygody trzymał w osobnym skrypcie scr_teksty np. w taki sposób: /// scr_teksty switch (numer) { case 1: tresc = "bla, bla, bla" break; case 2: tresc = "pierdu, pierdu" ...... } a w Stepie dla obj_plakat, we fragmencie opisującym co się dzieje po kliknięciu w plakat: script_execute(scr_teksty, numer); gdzie numer byłby id konkretnej instancji. Być może, będę to musiał rozwiązać inaczej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 2 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 2 Stycznia 2016 no to na samym poczatku gry w pierwszym obiekcie co sie tworzy daj w create GML global.plakaty = 0; i w create plakatu GML fakeID = global.plakaty++; też w edycji rooma możesz edytować create code instancji danych w roomie, czyli np wpisac kazdemu plakatowi jego tresc Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 2 Stycznia 2016 Udostępnij Opublikowano 2 Stycznia 2016 Do tekstów użyj tablicy albo ds_map zamiast switcha. Bo to ci się zrobi nieczytelne jak tego dużo zrobisz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 2 Stycznia 2016 Autor Udostępnij Opublikowano 2 Stycznia 2016 Stworzyłem odrębny obiekt, w którym w Create dałem global.plakaty = 0;, a w Create dla poszczególnych plakatów fakeID = global.plakaty ++. Efekt ten sam, wyświetla łączną liczbę plakatów. Gdy usunąłem ten dodatkowy obiekt, a global.plakaty = 0; dałem w room0: Creation code to wywala: Push :: Execution Error - Variable Get -5.plakaty(100000, -1) at gml_Object_obj_npc_CreateEvent_1 (line 1) - fakeID = global.plakaty ++; :/ ds_map jeszcze nie ogarniam, ale przyjrzę się temu. Switch to pierwsze co mi przyszło do głowy :-) Niestety do głowy przyszła mi jeszcze jedna rzecz. Nie mogę tego rozwiązać w taki sposób jak bym chciał (id instancji), bo będzie działało tylko w obrębie jednego rooma. W nowym roomie będzie liczył od nowa. Z kolei w rozwiązaniu proponowanym przez ANtY rozbijam się o fakt, że GM najpierw wykonuje wszystkie Create'y, a potem Stepy i Drawy, więc będzie podawał sumę. Muszę chyba wymyślić inny sposób. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 2 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 2 Stycznia 2016 jaką sumę lol, co ty w draw podałeś, global.plakaty, czy fakeID? jak to pierwsze no to nic dziwnego, że ich liczbę ci wyświetla Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 2 Stycznia 2016 Autor Udostępnij Opublikowano 2 Stycznia 2016 Ok, już mam, działa. Problem polegał na kolejności wstawiania obiektów. obj_start w którym jest global.plakaty = 0; nie był dodany jako pierwszy. Po zachowaniu kolejności wstawiania obiektów (obj_start, obj_npc, obj_npc...) jest ok. Dziękuję. Sądzę jednak, że będę musiał mimo wszystko poszukać innego rozwiązania, bo utrzymywanie właściwej kolejności wstawiania obiektów może być, delikatnie mówiąc, upierdliwe przy tworzeniu prawdziwych poziomów w grze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 2 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 2 Stycznia 2016 zaznacz w obj_start ze jest persistent i wrzuć go do pierwszego rooma w grze (np. menu czy splash screen, albo nawet pustego rooma, ktory odpala sie jako pierwszy i pozniej sie przelacza od razu do nastepnego rooma) i sie nie bedziesz tym w ogole musial martwic Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 2 Stycznia 2016 Autor Udostępnij Opublikowano 2 Stycznia 2016 Dobra myśl. :) Ale i tak poszukam elastyczniejszego rozwiązania. W tym przypadku jeśli wstawię np 20 tych "plakatów" w całej grze i nagle pomyślę by wstawić coś pomiędzy drugi, a trzeci, to będę musiał wszystko zmieniać od trzeciego do ostatniego bo ten nazwijmy go "o numerze 2,5" nie będzie pomiędzy 2 a 3 tylko jako 21. Dodatkowo za każdym razem gdy któryś usunę (choćby przypadkiem) i dodam ponownie to znów się wszystko poprzestawia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 2 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 2 Stycznia 2016 zrob liste tekstow i kazdemu daj id numerek pozniej w create tych plakatow ustawiaj im numerek ktory maja pobierac tekst Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 3 Stycznia 2016 Autor Udostępnij Opublikowano 3 Stycznia 2016 Hej. Dziękuję za pomoc, problem rozwiązałem nieco inaczej, acz bez Waszej pomocy pewnie bym się męczył. Zrezygnowałem całkowicie z listy tekstów i używania ID. Każda instancja obj_npc wysyła do skryptu generującego textbox zmienną tresc, w której przechowywana jest wypowiedź danego NPCa lub plakatu itp... Zrobiłem więc tak, że wstawiam instancje obj_npc do rooma w dowolnych miejscach i kolejności. Następnie na już wstawionej instancji w roomie klikam prawym i wybieram Creation code, a w nim wpisuję tresc = "bla bla bla bla"; Dzięki temu każda instancja ma swój własny tekst. Dodatkowo w Stepie obj_npc w if (.....) {.....} gdzie sprawdza czy gracz wszedł w interakcję by wywołać textbox dodałem and (tresc != ""), co zapobiega wywalaniu się lub wyświetlaniu pustego textboxa gdyby dany NPC czy plakat nie miał nic "mówić". Dzięki temu cała numeracja i problemy z id czy fakeID odpadają :D Minus jest taki, że nawet jak dana instancja obj_npc czy obj_plakat nie ma nic "mówić" to i tak w Creation code muszę wpisać tresc = ""; ale to już pikuś. Jeszcze raz dziękuję za Waszą pomoc. Nowa wiedza zdobyta :D Pozdrawiam Barsztik Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 3 Stycznia 2016 Udostępnij Opublikowano 3 Stycznia 2016 W create daj tekst=""; Nie wiem jaka dokładnie jest kolejność wykonywania kodu, ale powinno zadziałać. Najpierw ustawi pusty tekst, a potem room doda swoją wartość. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 3 Stycznia 2016 Udostępnij Opublikowano 3 Stycznia 2016 Kolejność jest w helpie: http://docs.yoyogames.com/source/dadiospic...ents/index.html Najpierw create potem wykonuje się instance create code w room edittorze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 3 Stycznia 2016 Filar Społeczności Udostępnij Opublikowano 3 Stycznia 2016 też w edycji rooma możesz edytować create code instancji danych w roomie, czyli np wpisac kazdemu plakatowi jego tresc w sumie mówiłem o tym od poczatku ale spoko :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 6 Stycznia 2016 Autor Udostępnij Opublikowano 6 Stycznia 2016 Cześć. Piszę tutaj, bo nie chciałem nowego tematu tworzyć. Teraz mam problem z polskimi znakami. Oczywiście tworzę super mega hita, który na steamie pobije Dotę 2 i CS:GO razem wzięte, więc będzie po angielsku, jednak brak polskich znaków mi doskwiera bo: co ja nie zrobię? ;-) Wyświetlany tekst jest w Creation code danej instancji umieszczony w taki sposób: GML tresc = "Zażółć gęślą jaźń."; Napisany w notatniku i przeniesiony metodą Copy'iego-Paste'a. W font z kolei zakres znaków zwiększony do 255. Czcionki próbowałem różne: Arial, Arial Baltic, Arial CE, itp... Niestety po wyświetleniu tekstu polskie znaki są pomijane. Używam GMS:Standart Edition (v1.2.1224). Coś pomijam? Na formu znalazłem jedynie informacje o zmianie zakresu znaków. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 6 Stycznia 2016 Udostępnij Opublikowano 6 Stycznia 2016 Tak. Musisz dodać nasze ogonki do zakresu. Nie musisz podawać tam zakresu liczbowego. Można wkleić znaki jakie chcesz. Jak wkleisz całe zdanie to doda znaki których nie było. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Barsztik Opublikowano 6 Stycznia 2016 Autor Udostępnij Opublikowano 6 Stycznia 2016 Dziękuję. Podziałało. Ostatni znak miał numer 380, więc de facto wystarczyło zmienić zakres na 32 - 380. Dodało też pewnie inne niepotrzebne "ogonki", ale myślę, że to nie będzie jakoś znacząco obniżać wydajności. Pozdrawiam Barsztik Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się