TO_mek Opublikowano 12 Marca 2011 Udostępnij Opublikowano 12 Marca 2011 Witam! Szukam od godziny i nic mi nie wychodzi. Mam zdefiniowanych kilkanaście podkładów (poszatkowane części kilku dużych teł) o nazwach składających się z 4 cyfr: 0000 0001 0010 1000 1001 0010 itd. Trzy ostatnie cyfry przechowywane są w tablicy (jako osobne cyfry). W poniższy kod zaczytuje (powinien) kawałki tła i skleja je w jedno duże tło. Gdy kawałki przechowywane były na dysku i wczytywane z plików png wszystko działa ok. W momencie gdy załadowałem te wycinki do exe mam problem z zamiana nazwy tych kawałków tak by to działało. GML ip=2; ik=0; for (i=ip; i>=ik; i-=1) { TO DZIAłA BEZ PROBLEMU //tlo:=working_directory+"\room\"+string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2])+".png"; NIE DZIALA //tlo:=string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2]); NIE DZIALA tlo_tmp:=string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2]); tlo:=variable_global_get(tlo_tmp); NIE DZIALA execute_string(' tlo = '+tlo_tmp); POKAZUJE ZAWSZE NAZWE PIERWSZEGO BG //show_message(background_get_name(tlo_tmp)); NIE DZIALA //execute_string("tlo="+string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2])); PKOAZUJE PRAWIDLOWE NAZWY TLA show_message(tlo); background_replace(tlogm, tlo, 0, 1); draw_background(tlogm,0-korekta,(j*213)+(j*17)); j+=1; } DZIALA OK //tlo:=working_directory+"\room\B000.png" DZIALA OK tlo:=B000;//working_directory+"\room\B000.png" background_replace(tlogm, tlo, 0, 1); draw_background(tlogm,0-korekta,(j*213)+(j*17)); Próbowałem też variable_global_get i variable_local_get ale też nie zadziałało. Czyli podsumowując: w jaki sposób przekształcić stringa który powstał z kawałków w nazwę zdefiniowanego tła tak by GM to zrozumiał? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 13 Marca 2011 Udostępnij Opublikowano 13 Marca 2011 Zakładasz to w tematach dla początkujących, a wielu zaawansowanych userów nie jest w stanie rozwiązać Twoich problemów :) Przede wszystkim: po co Ci są te backgroundy? Po co Ci ich nazwy? Może znajdzie się inne rozwiązanie tego problemu. GML execute_string("tlo="+string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2])) execute_string powoduje wykonanie kodu zawartego w pierwszym parametrze jako string, następne parametry są argumentami tego kodu. Niedziwne więc, że Ci to nie działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 13 Marca 2011 Autor Udostępnij Opublikowano 13 Marca 2011 Zakładasz to w tematach dla początkujących, a wielu zaawansowanych userów nie jest w stanie rozwiązać Twoich problemów :) Przede wszystkim: po co Ci są te backgroundy? Po co Ci ich nazwy? Może znajdzie się inne rozwiązanie tego problemu. GML execute_string("tlo="+string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2])) execute_string powoduje wykonanie kodu zawartego w pierwszym parametrze jako string, następne parametry są argumentami tego kodu. Niedziwne więc, że Ci to nie działa. To nie jest przyczyną (zauważ, że tam nigdzie nie ma przecinka). Ale w końcu mnie olśniło. Przyczyną jest ta linijka: GML background_replace(tlogm, tlo, 0, 1); Wcześniej miałem ładowanie tła z plików i przy przepisywaniu na ładowanie tła z pamięci z rozpędu podmieniłem tylko parametr "tlo" ze ścieżki na nazwę zdefiniowanego bacgrounda który definiuje w resources. Ale to nie ma prawa działać bo parametr tło to nic innego jak "fname" czyli ścieżka do pliku na dysku. Więc wystarczy w moim kodzie usunąć tą linijkę oraz zapisać tlogm=tlo; lub od razu przypisywać pod tlogm wartości z tablicy global.swiatlocien. Kocham "czeskie" błędy. Znowu kilka godzin na marne :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 13 Marca 2011 Udostępnij Opublikowano 13 Marca 2011 Bo robisz Bóg wie jakie kody dla jakichś prostych czynności. Sklejanie backgrounda z paru części? Do tego wystarczyło tylko posegregować pliki w folderach ( 1 folder dla 1 backgrounda a nazwy plików to porostu pojedynczy numer np. 1.png, 2.png, 3.png ) i pętlą wczytać cały folder do tablicy czy tam ds_struktury jakieś. A żeby wyświetlić wystarczyło by te tła pobrać z tablicy ( czy tam ds_* ) i odpowiednio poprzesuwać by pasowały do siebie jak układanka. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rozwiązanie TO_mek Opublikowano 13 Marca 2011 Autor Rozwiązanie Udostępnij Opublikowano 13 Marca 2011 Bo robisz bóg wie jakie kody dla jakichś prostych czynności. Sklejanie backgrounda z paru części? Do tego wystarczyło tylko posegregować pliki w folderach ( 1 folder dla 1 backgrounda a nazwy plików to porostu pojedynczy numer np. 1.png, 2.png, 3.png ) i pętlą wczytać cały folder do tablicy czy tam ds_struktury jakieś. A żeby wyświetlić wystarczyło by te tła pobrać z tablicy ( czy tam ds_* ) i odpowiednio poprzesuwać by pasowały do siebie jak układanka. No nie do końca :) Tło składa się z 11 poziomych pasków które mają 3 punkty przyjmujące różne stany on/off czyli w zapisie binarnym jeden pasek tła może przyjmować 8 różnych stanów (000, 001, 010, 011, 100, 101, 110, 111) czyli inaczej 2^3. Czyli dla 11 pasków to 88 kombinacji. W grze na ekranie w tym samym czasie widać zawsze 4 pasy czyli maksymalnie 2^12 kombinacji on/of (4096). Łącznie dla wszystkich 11 poziomych pasków jest 2^88 kombinacji czyli ogromnie dużo. Aby nie rysować do emerytury tych 2^88 backgroundów poszatkowałem tła na paski. Stany on/off wszystkich poziomych pasków i poszczególnych 3 punktów na pasku przechowuje tablica "swiatlocien". Z niej układam nazwę danego paska (pierwsza liczba to nr paska 0-10, kolejne 3 liczby to stany on/of punktów na danym pasku). Proste i czytelne. Początkowo zrobiłem to na ładowaniu plików z zewnątrz a obecnie "tłumaczyłem" skrypt na wczytywanie tych poszczególnych pasków z zasobów umieszczanych bezpośrednio w pliku exe bo chcę porównać działanie na słabych komputerach (prawdopodobnie gra mająca wszystko w exe wcale nie odpali na słabych maszynach więc wrócę do opcji wczytywania zasobów z plików). EDIT: Jeszcze jedna istotna uwaga. Musiałem zmienić nazwy backgroundow z cyfrowych na znakowe, teraz zamiast 0000 mam _0000 bo to powodowało, że źle mi szukało np. dla tła o nazwie 0000 szukało mi tła o nr zero a nie tła które się tak nazywało. Więc musiałem dodać prefiks do nazwy cyfrowej i wszystko działa ok. 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ę