Nirvan Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 Kombinuje z algorytmem na ładowanie spritów w mojej grze izometrycznej gdzie nazwy spritów różnią się tylko o liczby . Zrobiłem takie coś : GML for(r=0;r<=180;r+=45;) { real(r); p=variable_global_get(argument0+argument1+r); p=sprite_add("data/"+argument0+"/"+argument1+r+"_strip"+argument2+".png",argument2,argument3,argument4,argument5,argument6); string(r); } //skrypt do użycia wyglądałby tak sprl('we','obr',4,0,0,90,117); //i chce z niego uzyskać to : (zaladować 5 spritow) global.weobr0=sprite_add("data/wek/obr0_strip4.png",4,0,0,90,117); global.weobr45=sprite_add("data/wek/obr45_strip4.png",4,0,0,90,117); global.weobr90=sprite_add("data/wek/obr90_strip4.png",4,0,0,90,117); global.weobr135=sprite_add("data/wek/obr135_strip4.png",4,0,0,90,117); global.weobr180=sprite_add("data/wek/obr180_strip4.png",4,0,0,90,117); Ale wywala mi błąd: GML Error in code at line 10: p=variable_global_get(argument0+argument1+r); ^ at position 44: Wrong type of arguments to +. I nie wiem za bardzo jak to rozwiązać aby działało poprawnie, niby zrobiłem to real® ale nie dziala :| . Dzięki z góry Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 A nie ma tam być czasem stringów? GML p=variable_global_get(string(argument0)+string(argument1)+string(r)); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Lutego 2011 Administratorzy Udostępnij Opublikowano 9 Lutego 2011 Wrong type of arguments zawsze oznacza, że próbujesz stringa konkatenować z realem, lub dodać do reala string. Czyli w sumie to samo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 real(r); -To nie daje żadnego rezultatu ta funkcja zwraca liczbę z tekstu a string odwrotnie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 real(r); -To nie daje żadnego rezultatu ta funkcja zwraca liczbę z tekstu a string odwrotnie Wiem już, przed chwilą zauważyłem ;) Wrong type of arguments zawsze oznacza, że próbujesz stringa konkatenować z realem, lub dodać do reala string. Czyli w sumie to samo. Właśnie nie wiem jak zrobić żeby z tego r dodalo do reala jego liczbe jako real Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 r jest liczbą ponieważ zainicjowałeś ją w pętli for i nie musisz konwertować do reala Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 ale chce żeby to r stalo sie realem w pewnym momencie . Jak jest 'napis'+45 to nie dostane 'napis45' musi być 'napis'+'45' . Wiec musze do reala konwertować Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 napis+real(45) bedzie napis45 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 ale chodzi mi o to żeby to r bylo tą liczbą na real p=variable_global_get(argument0+argument1+real®); ale wywala błąd, a argument0 i 1 są realami Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 pomyłka "napis"+string(45) będzie napis45 a "napis"+real(45) jest to błąd edit: global.napis45 =5; ret =variable_global_get('napis45'); show_message(string(ret)); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 ok, tamtego błędu juz mi nie pokazuje ale: GML p=sprite_add("data/"+argument0+"/"+argument1+string(r)+"_strip"+argument2+".png",argument2,argument3,argument4,argument5,argument6); ^ at position 66: Wrong type of arguments to +. znowu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 napis+real(45) bedzie napis45 raczej napis+string(45) bedzie napis45 edit:Ups kiedy to pisałem nie było tego up :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 Bo próbujesz dodać liczbę do tekstu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 ale nie rozumiesz :P te liczbe 45 dalem jako przykład wartości jaką przyjmie r za którymś razem. Ja chce że gdy będzie wykonywana instrukcja, to żeby wartość r zmieniala się w stringa. jak r ma 45 to r ma sie zmienić w "45" itd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 GML string(r) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 r = 45 r = string(r); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 itak wywala ten sam błąd :| Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 Nie. Nie dam Ci gotowego kodu. GML for(r=0;r<=180;r+=45;) { real(r); //Co to ma być? real zwraca wartość z którą nic nie robisz. Otrzymuje tekst i zwraca liczbę. Wywal to. p=variable_global_get(argument0+argument1+r); //argument1 lub argument2 najwyraźniej jest stringiem, a r liczbą. Nie możesz dodawać tekstu do liczby bo to nie ma sensu. string() zamieni Ci liczbę na tekst. p=sprite_add("data/"+argument0+"/"+argument1+r+"_strip"+argument2+".png",argument2,argument3,argument4,argument5,argument6); //To samo co wyżej. string(r); //Ponownie, Co to ma kurde być? String to funkcja. ZWRACA WARTOŚĆ. } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 Nie. Nie dam Ci gotowego kodu. GML for(r=0;r<=180;r+=45;) { real(r); //Co to ma być? real zwraca wartość z którą nic nie robisz. Otrzymuje tekst i zwraca liczbę. Wywal to. p=variable_global_get(argument0+argument1+r); //argument1 lub argument2 najwyraźniej jest stringiem, a r liczbą. Nie możesz dodawać tekstu do liczby bo to nie ma sensu. string() zamieni Ci liczbę na tekst. p=sprite_add("data/"+argument0+"/"+argument1+r+"_strip"+argument2+".png",argument2,argument3,argument4,argument5,argument6); //To samo co wyżej. string(r); //Ponownie, Co to ma kurde być? String to funkcja. ZWRACA WARTOŚĆ. } Już wtedy to pozmieniałem wszystko, teraz to wyglądało tak : GML for(r=0;r<=180;r+=45;) { p=variable_global_get(argument0+argument1+string(r)); p=sprite_add("data/"+argument0+"/"+argument1+string(r)+"_strip"+argument2+".png",argument2,argument3,argument4,argument5,argument6); } I itak wywala ten sam błąd wyżej podalem ze argument0 to 'we' a 1 to 'obr' Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 To ja już nie wiem. W C++ jest różnica czy pojedynczy czy podwójny cudzysłów więc może spróbuj z " zamiast '. Ale nie wiem czy w GM ma to znaczenie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Lutego 2011 Administratorzy Udostępnij Opublikowano 9 Lutego 2011 CHRYSTE PANIE "data/"+STRING(argument0)+"/"+STRING(argument1)+string?+"_strip"+STRING(argument2)+".png" KONKATENACJA DZIAŁA TYLKO NA TYPIE STRING + STRING Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 To też, ale on twierdzi że mu linijkę wyżej wywala. :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Lutego 2011 Administratorzy Udostępnij Opublikowano 9 Lutego 2011 wyżej podalem ze argument0 to 'we' a 1 to 'obr' Nie, on twierdzi, że arg0 i arg1 to stringi, ale nic nie mówi o arg2 na którym wywala błąd. Edit: Wrong type of arguments w przypadku "tekst"+zmienna zawsze oznacza, że zmienna to liczba, wiec trzeba ją za pomocą string() zwrócić jako string. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 A po co to jest p=variable_global_get (argument0+argument1+ string(r)); skoro itak zastępujesz sprite_add Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Lutego 2011 Administratorzy Udostępnij Opublikowano 9 Lutego 2011 https://gmclan.org/index.php?czytajart=68 Polecam fragment: Należy jednak zauważyć, że a=5 to nie to samo co a='5', gdyż tekst nie jest liczbą i na odwrót i tych dwóch typów nie wolno bezpośrednio ze sobą porównywać. Do zamiany liczby w tekst służy funkcja string().... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 ok, działa, nie wiedzialem że to wywala pod argument2 :/ sory Ale itak nie tworzy tych zmiennych globalnych powinny powstać: global.weobr0=sprite_add("data/wek/obr0_strip4.png",4,0,0,90,117); global.weobr45=sprite_add("data/wek/obr45_strip4.png",4,0,0,90,117); global.weobr90=sprite_add("data/wek/obr90_strip4.png",4,0,0,90,117); global.weobr135=sprite_add("data/wek/obr135_strip4.png",4,0,0,90,117); global.weobr180=sprite_add("data/wek/obr180_strip4.png",4,0,0,90,117); A nie ma ich, ale grafiki sie ładują Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Lutego 2011 Administratorzy Udostępnij Opublikowano 9 Lutego 2011 GML p=sprite_add("data/"+argument0+"/"+argument1+string(r)+"_strip"+argument2+".png",argument2,argument3,argument4,argument5,argument6); ^ at position 66: Wrong type of arguments to +. Przecież znak ^ jest dokładnie pod argument2. A globalnych nie tworzy, bo variable_local_get nie zwraca referencji, a wartośc zmiennej. Zresztą gdyby to nawet była referencja, to znak = ją kasuje. Czyli twój kod w uproszeniu wygląda tak: GML p = <dowolna wartosc>; p = sprite_add(....); // poprzednia wartosc zostaje skasowana</span> no i w p masz identyfikator sprita ;) Powinno być tak: GML p = sprite_add(....); variable_global_set(string(argument0)+string(argument1)+string(r),p); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 Powinno być tak: GML p = sprite_add(....); variable_global_set(string(argument0)+string(argument1)+string(r),p); Ok dzięki wielkie :) działa jak powinno . Edit: Mam teraz : Robiłem to na pustym projekcie i wszystko dzialalo dobrze aż nie dodalem zwyklego sprita guzikiem 'create a sprite' . Jeśli istnieje ten sprite pod bylejaką nazwą to wywala mi bład że 'unkown wariable p' :/ GML for(r=0;r<=180;r+=45;) { if not sprite_exists(variable_global_get(argument0+argument1+string(r))) p=sprite_add("data/"+argument0+"/"+argument1+string(r)+"_strip"+string(argument2)+".png",argument2,argument3,argument4,argument5,argument6); variable_global_set(argument0+argument1+string(r),p); } Zrobiłem również skrypt na usuwanie spritów : GML for(r=0;r<=180;r+=45;) { p=variable_global_get(argument0+argument1+string(r)); if sprite_exists(p){sprite_delete(p);} } Ale coś jest nietak bo gdy załaduje grafiki tamtym skryptem, potem odładuje go tym to usówa z pamięci tylko połowę wszystkich grafik, gdy zaladuje grafiki ponownie i odladuje to wtedy dopiero rozładowywuje je wszystkie, ale do wielkości jaka zostala po pierwszym zaladowaniu . Czyli gra bez niczego zaladowanego zżera mi 13,8 pamięci po pierwszym zaladowaniu grafik zżera 19 po pierwszym odładowaniu zżera 16,7 po nastepnym zaladowaniu zżera 19,1 po odladowaniu zżera znowu 16,7 czyli za pierwszym razem zaladowalo grafiki dwa razy i nie da sie juz ich usunąć, ale dlaczego tak zaladowalo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 9 Lutego 2011 Udostępnij Opublikowano 9 Lutego 2011 Ok dzięki wielkie :) działa jak powinno . Edit: Mam teraz : Robiłem to na pustym projekcie i wszystko dzialalo dobrze aż nie dodalem zwyklego sprita guzikiem 'create a sprite' . Jeśli istnieje ten sprite pod bylejaką nazwą to wywala mi bład że 'unkown wariable p' :/ GML for(r=0;r<=180;r+=45;) { if not sprite_exists(variable_global_get(argument0+argument1+string(r))) p=sprite_add("data/"+argument0+"/"+argument1+string(r)+"_strip"+string(argument2)+".png",argument2,argument3,argument4,argument5,argument6); variable_global_set(argument0+argument1+string(r),p); } "unknown variable p" oznacza, że zmienna p nie istnieje, a próbujesz się gdzieś do niej odwołać. Widzimy, że w powyższym kodzie ją tworzysz. Ale... pod pewnym warunkiem! Jeśli nie istnieje jakiś sprite co się kryje pod: GML variable_global_get(argument0+argument1+string(r)) Wychodzi na to, że zmienna której wartość pobierasz ma wartość równo identyfikatorowi tego nowego sprite'a! I jego nazwa nie ma tu kompletnie nic do rzeczy. Bo każdy sprite ma przypisaną pewną liczbę-identyfikator, której zmienić nie można. I tak naprawdę za każdym razem gdy w kodzie piszesz nazwę sprite'a to tak jakbyś napisał tę liczbę. Bo nazwa to taka jakby stała przechowująca tę liczbę. Tak samo jest ze wszystkimi innymi zasobami: roomami, obiektami, dźwiękami, pathami... Zrobiłem również skrypt na usuwanie spritów : GML for(r=0;r<=180;r+=45;) { p=variable_global_get(argument0+argument1+string(r)); if sprite_exists(p){sprite_delete(p);} } Ale coś jest nietak bo gdy załaduje grafiki tamtym skryptem, potem odładuje go tym to usówa z pamięci tylko połowę wszystkich grafik, gdy zaladuje grafiki ponownie i odladuje to wtedy dopiero rozładowywuje je wszystkie, ale do wielkości jaka zostala po pierwszym zaladowaniu . Powód pewnie jest taki jak powyżej. Spróbuję ogarnąć co ty masz w tych swoich argumentachX i ewentualnie editnę, bo pewnie masz tam jakieś brednie. EDIT: A weź spróbuj po prostu w tym pierwszym objąć te 2 instrukcje w nawiasy klamrowe {}. Bo ten if ci obejmuje tylko pierwszą linijkę, a drugiej już nie i stąd błąd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 9 Lutego 2011 Autor Udostępnij Opublikowano 9 Lutego 2011 sprl('we','obr',4,-1,0,90,117); 4 to imagenumber, -1,0,90,117 to są zmienne od sprite_add czyli removeback,smooth,xorigin i yorigin edit: dalem te nawiasy klamrowe i jest ok, dzięki (kurde zawsze jakieś glupie błędy zrobie ;|) ale problem z pamięcią nie rozwiązany, calyczas laduje jakby podwójnie za pierwszym razem A skrypt na odładowywanie dziala poprawnie ponieważ jak zamiast tego co w nim jest dam : sprite_delete(global.weobr0); sprite_delete(global.weobr45); sprite_delete(global.weobr90); sprite_delete(global.weobr135); sprite_delete(global.weobr180); to itak pamięć się zwalnia tylko do 16,7 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ę