nowy_user Opublikowano 19 Czerwca 2017 Udostępnij Opublikowano 19 Czerwca 2017 Hej , jak zrobić w gm studio drawowanie całego tekstu z danego pliku w notatniku? Mam np. jakiś tekst w notatniku i chce go jota w jotę drawować w gmie. Czy nasz program ma taką funkcję? Pozdrawiam, Nowy_user! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 19 Czerwca 2017 Udostępnij Opublikowano 19 Czerwca 2017 Oczywiście! draw_text :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 19 Czerwca 2017 Autor Udostępnij Opublikowano 19 Czerwca 2017 Tak wiem, ale co mam wpisać dalej ? draw_text(0,0, string(....i co tutaj? , jeśli wpiszę nazwę pliku.txt, to niestety nie wyświetla się) ) EDIT Próbowałem też w step: GML ini_open(string(id)) text=ini_read_string("","","") ini_close() i w evencie draw: GML draw_text(0,0,text) but nope, it's still not working. :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 19 Czerwca 2017 Udostępnij Opublikowano 19 Czerwca 2017 Musisz otworzyć plik za pomocą get_open_filename(filter, fname); a następnie otworzyć plik jako plik tekstowy. Potem musisz załadować w pętli while cały plik do stringa. Wygląda to tak: GML var Plik = get_open_filename("Plik tekstowy|*.txt",""); //Wybierz plik tekstowy i zapisz jego ID(takzwany handle - uchwyt) do zmiennej Plik if Plik!=""{//Jezeli wybrano plik czyli uchwyt nie jest pusty var PlikTekstowy = file_text_open_read(Plik); //Otworz plik "Plik" i zapisz ID otwartego pliku do zmiennej "PlikTekstowy" //Od teraz bedziemy sie poslugiwac uchwytem otwartego pliku czyli PlikTekstowy aby korzystac z zawartosci otwartego pliku. ZawartoscPliku = ""; //To zmienna typu string w ktorej bedziemy zapisywac zawartosc pliku while(!file_text_eof(PlikTekstowy)){ //Dopoki nie dojdziemy do konca pliku tekstowego ZawartoscPliku += file_text_readln(PlikTekstowy); //Dopisz do zmiennej "ZawartoscPliku" linie tekstu z "PlikTekstowy" } file_text_close(PlikTekstowy); //Zamknij otwarty plik. Bardzo wazne zeby zamykac pliki ktorych juz nie potrzeba uzywac, bo moze byc tylko 32 otwarte na raz. } //Calosc dziala tak: W petli while sprawdzamy czy doszlismy do konca pliku. Jezeli nie to wczytaj linijke tekstu. Teraz znowu sprawdz czy nie doszlismy do konca tekstu. W ten sposob bedzie wczytywac plik linia po lini az dojdzie do konca pliku. Calosc jest zapisywana do zmiennej. To te zmienna masz wyswietlic na ekranie. //Zmienna mozesz wyswietlic z uzyciem np. draw_text(x,y,ZawartoscPliku);</span> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 19 Czerwca 2017 Autor Udostępnij Opublikowano 19 Czerwca 2017 Dziękuję za wyczerpującą wypowiedź. Kod jest super, ale jest problem, jeśli wstawiam go gdzie indziej niż w create, wyskakuje mi błąd, że zmienne nie są zadeklarowane. To bardzo dziwne, bo zmienne var są lokalne i nie potrzebują deklaracji w Create. Muszę nad tym posiedzieć żeby zrozumieć w czym tkwi błąd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 19 Czerwca 2017 Udostępnij Opublikowano 19 Czerwca 2017 Jak wygląda error który dostajesz tak dokładnie? Której zmiennej nie odnajduje? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 19 Czerwca 2017 Autor Udostępnij Opublikowano 19 Czerwca 2017 Generalnie to mój problem jest chyba nieco głębszy, Przede wszystkim bardziej chciałem aby kliknięciem lewym przyciskiem myszy na dany obiekt , utworzył się i włączył plik tekstowy o nazwie takiej jakie jest id obiektu, tak aby każdy obiekt miał swój plik txt. (zrobiłem to za pomocą Execute Shell) i to fajnie działa. Teraz chciałem zrobić dodatkową rzecz tzn. klikając prawy przycisk myszy na dany obiekt chciałbym aby tekst z pliku tekstowego pojawił się na obiekcie ( obiekt ma kształt kwadratu- ramki, właściwie jest to takie pole tekstowe) , czyli chce aby już bez okna dialogowego, odczytał plik tekstowy, który ma w nazwie id obiektu, i zaktualizował napis na obiekcie na taki sam jaki jest w notatniku. I tu zaczynają się schody. Musiałem zamienić zmienne var na zwykłe zmienne, bo inaczej wyskakiwał mi błąd, zadeklarowałem je w create i dostosowałem nieco kod na następujący: GML if file_exists(working_directory + "\"+string(id)+".txt") { Plik = file_text_open_read(working_directory + "\"+string(id)+".txt"); while(file_text_eof(Plik)){ ZawartoscPliku += file_text_readln(Plik); } file_text_close(Plik); } Następnie proboje drawować ZawartoscPliku, ale niestety nie wyświetla mi tekstu tego , który jest w pliku w notatniku . A błąd o który pytasz no chyba teraz zaczaiłem, chodziło o zmienną ZawartoscPliku , to nie jest zmienna tymczasowa. EDIT: Ale tak teraz jeszcze raz patrzę to nawet jak używam twojego kodu , i wszystko daje w create to nie bardzo mi się ten tekst z notatnika wyswietla (pomimo że mam ustawioną komendę draw_text(x,y,ZawartoscPliku) .... już się trochę zamotałem, chyba muszę trochę odpocząć od GMa ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 19 Czerwca 2017 Udostępnij Opublikowano 19 Czerwca 2017 Jest błąd w tym co podałem zamiast while(file_text_eof(Plik)){ daj while(!file_text_eof(Plik)){ (Dla potomnych juz poprawione w oryginale) Edit: Wybacz ten błąd, kod robiłem na sucho bo mi się śpieszyło. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Dziękuję za odpowiedź, wszystko działa cacy nawet wtedy , gdy ustawiłem sobie, aby zamiast okna dialogowego z wyborem pliku tekstowego, odczytywało mi odrazu dany plik ( plik który ma w nazwie id obiektu). I nawet wszystko działało cacy, dopóty dopóki pliki znajdowały się w "working directory", kod wtedy wyglądał tak: GML var PlikTekstowy = file_text_open_read(working_directory + string(id)+".txt");; //Otworz plik "Plik" i zapisz ID otwartego pliku do zmiennej "PlikTekstowy" //Od teraz bedziemy sie poslugiwac uchwytem otwartego pliku czyli PlikTekstowy aby korzystac z zawartosci otwartego pliku. ZawartoscPliku = ""; //To zmienna typu string w ktorej bedziemy zapisywac zawartosc pliku while(!file_text_eof(PlikTekstowy)){ //Dopoki nie dojdziemy do konca pliku tekstowego ZawartoscPliku += file_text_readln(PlikTekstowy); //Dopisz do zmiennej "ZawartoscPliku" linie tekstu z "PlikTekstowy" } file_text_close(PlikTekstowy); //Zamknij otwarty plik. Bardzo wazne zeby zamykac pliki ktorych juz nie potrzeba uzywac, bo moze byc tylko 32 otwarte na raz Nawet nie wiecie jak bardzo się ucieszyłem, że po tylko godzinach walki wreszcie to zadziałało. Niestety.... Gdy tylko chciałem zmienić ścieżkę z working directory na :C:\Users\User\Desktop\folder\"+ string(id) +"txt" < gdzie byłem na sto procent pewien że ten plik tam jest , to pojawiał się ten wkurzający błąd : File is not opened for reading. at gml_Object_o_square_KeyPressed_D_1 (line 8) - while(!file_text_eof(PlikTekstowy)) Na początku myślałem, że Gamemaker wogóle nie może operować na innych folderach niż working directory, ale to mylne założenie, bo np.jestem w stanie za pomocą execute shell utworzyć plik notatnikowy w jakimkolwiek tylko folderze sobie zapragnę. Dziwne to, doprawdy dziwne... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Bo nie może, masz w dokumentacji podane foldery na których możesz operować. Execute shell to nie to samo co funkcje file_ Edit: Jaka wersja GM? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Gmstudio 1.4 proffesional Niestety mam problem z tym wszystkim. Problem wynika z tego , że chcę stworzyć prosty program polegający na następującej rzeczy: Program z kilkoma lub kilkunastoma kwadratami, które są w zasadzie polami tekstowymi. Po kliknięciu lewym przyciskiem myszy na dany kwadrat, chcę aby: Program otworzył ( a wcześniej utworzył, jeśli go jeszcze nie ma) plik tekstowy, który ma w nazwie to samo id co dany obiekt. Następnie mogę sobie uzupełnić notatnik , zapisać wyłączyć, i chcę aby zaktualizował się tekst w polu tekstowym, w sensie takim , żeby było to samo w tym kwadracie co w notatniku Aby to zrobić , korzystam z Execute Shell. Niestety następuje zgrzyt ponieważ wygląda na to , że Execute Shell co innego uważa za working directory: taki kod: GML ExecuteShell("notepad.exe" + working_directory + string(id)+".txt",0); nie tworzy danego pliku w C:\Users\User\AppData\Local\folder_z_grą a zamiast tego tworzy mi jakiś dziwny folder gmtt60107, spójrzcie na tę ścieżkę : C:\Users\User\AppData\Local\gm_ttt_60107\gm_ttt_83194 I przez to wszystko się rypie. Taka prosta sprawa , a tak mi psuje krew... do Gma trzeba mieć cierpliwość, oj trzeba... ---edit--- Tak BTW, to oczywiście wolałbym nie bawić się w żadne notatniki itp, tylko lepiej byłoby po prostu stworzyć taką opcję, że jak klikam na ten kwadrat to mogę sobie w nim od razu pisać itd, ale stworzenie funkcjonalnego programu typu text_input, z możliwością kopiowania i wklejania tekstu, z możliwością przechodzenia pomiędzy literkami za pomocą strzałek klawiatury, możliwość korzystania z takich kombinacji klawiszy jak ctrl+end itp, to robota na długie zimowe wieczory, a i tak nie mam pewności że w gmie jest to wykonalne. Dlatego próbuję to obejść korzystając z Execute Shell , ale jak sami widzicie , tu piętrzą się z kolei inne problemy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Po pierwsze primo od kiedy można używać execute shell w studio? Po drugie working_directory to folder w którym jest plik exe z grą i na 100% ten co podaje jest ok. Po trzecie możesz użyć jakiegoś dll do obsługi plików Po czwarte napisanie "text input" nie jest trudne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Po czwarte napisanie "text input" nie jest trudne. Z opcjami takimi jak zaznaczanie, wklejanie tekstu itd? To naprawdę wymaga olbrzymiej wiedzy gml, nic dziwnego że w markecie taki program kosztuje prawie 70 zł. A co do Execute Shell to tak, używam w Gm Studio, ale może on nie jest rzeczywiście do niego przystosowany i stąd te kwiatki. ---edit--- GML Po drugie working_directory to folder w którym jest plik exe z grą i na 100% ten co podaje jest ok. To byłoby piękne, niestety wraz z końcem ery gm 8.1 to się zmieniło, i teraz working_directory oznacza folder w jakiejś wariackiej lokalizacji C:\Users\User\AppData\Local\ Wszystko dlatego, że nasi kochani twórcy naszego ulubionego programu wymyślili sobie, że gry w GMie będą sandboxowane. I co poradzisz, tak sobie wymyślili i na nic protesty użytkowników. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Tylko na czas jak uruchamiamy grę z poziomu GMa, kompiluje ją do folderu tymczasowego. Jak będę miał chwilę to napisze te text input, przynajmniej sobie gml przypomnę ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Tylko na czas jak uruchamiamy grę z poziomu GMa, kompiluje ją do folderu tymczasowego. Nie jestem ekspertem, ale chyba nie do końca się tak dzieje. Nawet jeśli wyeksportujemy sobie programik do pliku executable, to wciąż working direcotry to : C:\Users\User\AppData\Local\folder_z_grą Jak będę miał chwilę to napisze te text input, przynajmniej sobie gml przypomnę Z jednej strony chciałbym cię do tego jak najbardziej zachęcać - ze swoich egoistycznych względów- ale moje dobre serce bierze tu górę więc napiszę Ci tak: To nie jest takie proste jak się zdaje, zrobienie text_input z tymi funkcjonalnościami o których wspomniałem wymaga naprawdę dużej wiedzy, i nie jeden raz przeklniesz GMa oraz siebie, że się za to zabrałeś. Wierz mi, wiem co mówię, bo sam myślałem przed tym zadaniem , że będzie to kaszka z mlekiem , a nabawiłem się sporo frustracji. Lepiej zastanów się dwa razy, zanim sie za to zabierzesz. Żeby nie było, że nie ostrzegałem. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Racja: https://docs.yoyogames.com/source/dadiospic..._directory.html EDIT: Co do zapisywania w innych folderach ja używam tego http://gmc.yoyogames.com/index.php?showtopic=567528 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Pobrałem to rozszerzenie i zaimportowałem, ale niestety, przy próbie wywołania pliku tekstowego za pomocą kodu: GML file_text_open_read("C:\Users\User\Desktop\telesalesmanago\100003.txt" wyskakuje mi błąd: File is not opened for reading. at gml_Object_o_square_KeyPressed_D_1 (line 8) Doprawdy, ludzie którzy zajmują się GMem zawodowo, to najbardziej cierpliwi ludzie na świecie :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Dostajesz dziwny folder dla GMa ponieważ testujesz przez RUN GAME. Gdybyś skompilował grę ścieżka byłaby normalna i prowadziłą do appdata/ROAMING lub appdata/LOCAL @@EdiePL - On używa execute shell z rozszerzenia, dlatego ma. Co do GMFileSystem, jest ono ździebko nieaktualne więc trzeba ręcznie je naprawić aby działało. @UP Musisz użyć funkcji z GMFileSystem nie wbudowanych Aby użyć GMFIleSystem dopisz FS_ przed nazwą funkcji, czyli zamiast GML file_text_open_read("C:\Users\User\Desktop\telesalesmanago\100003.txt") zró GML FS_file_text_open_read("C:\Users\User\Desktop\telesalesmanago\100003.txt") Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Oni po prostu czytają dokumentację ;) Nazwy funkcji od tego rozszerzenia są inne Edit: https://storage.googleapis.com/google-code-...tem_Doc_1_4.pdf Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Niestety używam tego kodu FS_file_text_open_read("C:\Users\User\Desktop\telesalesmanago\100003.txt") i błąd jest ten sam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Otwierasz plik w trybie tylko do odczytu, więc jeżeli nie istnieje nie zostaje on stworzony. Sprawdź czy wartość zwrócona przez te funkcje nie wynosi -1. Jeżeli tak to plik po prostu nie istnieje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Niestety, nagle ten projekt przestał mi się otwierać i wyskakuje błąd braku pliku MSVCP100D.dll Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Czerwca 2017 Udostępnij Opublikowano 20 Czerwca 2017 Pobierz i dodaj do projektu, ogólnie jest to dll od Microsoft C++ Redistributable Package Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Czerwca 2017 Autor Udostępnij Opublikowano 20 Czerwca 2017 Tak zrobie, ale dziwne jest to że jeszcze przed chwilą wszystko mi działało.Cóż, dziś GMStudio dał mi cenną lekcje kontroli nad swoimi emocjami i nerwami. Zuchwałe GMStudio myślało , że poddam się po kilku frustrujących momentach, ale ono tak naprawdę nie wie z kim zadarło ;) Zrobię tak jak napisałeś, i wracam do walki ! 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ę