Nirvan Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Hej, robie sobie ten edytor animacji szkieletowej i potrzebuję czegoś w stylu tablicy 3D w kazdej kosci. Musi to działać mniej więcej tak: kazda kosc ma tablice key[ i, j, k ] gdzie i to id animacji, j - nr keya, k - typ zmiennej np frame, angle, scale. Zrobilem juz pelno funkcji do przesowania/wstawiania keyow itp ale zobaczylem wczoraj ze GM nie wspiera tablic 3D. Wiem że są jakieś obejścia ale ponoć nie optymalne. Da się to może jakoś zrobić żeby działało szybciej? (Nie chce wykorzystywać funkcji gma np ds_list itp)
I am Lord Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Natknąłem się na parę implementacji tablic 3D. Ale szczerze powiedziawszy lepiej je olać bo mocno spowalniają.
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 to co ja mam począć :D jak zrobi sie inaczej to moze byc bardzo nie intuicyjne.
ALT Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Znalazłem takie coś o na yoyogames: GML // First dimension cube[0, 0] = 1; cube[0, 1] = 2; cube[0, 2] = 3; // Second dimension cube[1, 0] = 4; cube[1, 1] = 5; cube[1, 2] = 6; cube[2, 0] = 7; cube[2, 1] = 8; cube[2, 2] = 9; cube[3, 0] = 10; cube[3, 1] = 11; cube[3, 2] = 12; // Third dimension cube[4, 0] = "0,0,0"; cube[4, 1] = "0,0,1"; cube[4, 2] = "0,0,2"; cube[5, 0] = "0,1,0"; cube[5, 1] = "0,1,1"; cube[5, 2] = "0,1,2"; cube[6, 0] = "0,2,0"; cube[6, 1] = "0,2,1"; cube[6, 2] = "0,2,2"; cube[7, 0] = "1,0,0"; cube[7, 1] = "1,0,1"; cube[7, 2] = "1,0,2"; cube[8, 0] = "1,1,0"; cube[8, 1] = "1,1,1"; // midpoint cube[8, 2] = "1,1,2"; cube[9, 0] = "1,2,0"; cube[9, 1] = "1,2,1"; cube[9, 2] = "1,2,2"; cube[10, 0] = "2,0,0"; cube[10, 1] = "2,0,1"; cube[10, 2] = "2,0,2"; cube[11, 0] = "2,1,0"; cube[11, 1] = "2,1,1"; cube[11, 2] = "2,1,2"; cube[12, 0] = "2,2,0"; cube[12, 1] = "2,2,1"; cube[12, 2] = "2,2,2"; http://gmc.yoyogames.com/index.php?showtopic=571988
I am Lord Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 On tam zagnieżdża jedną tablicę w drugą. Tutaj też można tak spróbować np animID[ i, key[j, k] ]
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 Fajnie jakby dalo sie tak jak napisalem huder, ale czy to nie bedzie zwykla tablica 2D? bo key[j,k] bedzie przybieral zmienne np 1,2,3 i wtedy animID[0, 1||2||3] to nie to chyba.
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 Lubię zwięzły zapis, nie zastanawiałem się jak by to moglo tak wyglądać. Musi byc rozpoznawane id animacji potem do tej animacji rozpoznawane rozne keye a w keyach rozne zmienne animId[0] key[0] variables[0] ... na 1d nie da rady tego zrobic
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 że naimID[i, j]; i key[j, k] i powiedzmy ze w animacji 0 zerowy key jest w klatce 2 a drugi key w 10 animID[0, 0] key[0, 0] = 2; key[1, 0] = 10 ale jak zapisac to zeby animID tez bylo brane pod uwagę.
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 Nie wiedzialem ze sa w gmie To najprostsza droga by była
Uzjel Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Gnysek gdzieś pokazywał jak to fajnie można obsługiwać. Może napisz do niego.
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 odpisal mi ze dostep do zmiennych w obiektach ma sie nawet po dezaktywacji i ze to jedyna droga ;)
Jakim Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Jeżeli wymiary tablicy są ustalone, to można łatwo rzutować adresy na jednowymiarową tablicę i odwrotnie. Przyjmijmy oznaczenia: w,h,z - rozmiary tablicy adres3D -> adres1D [i,j,k] -> [i+j*w+k*w*h] adres1D -> adres3D -> [Mod[i, w],Floor[Mod[i, w*h]/w], Floor[i/(w*h)]]
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 rozmiary nie beda ustalone z góry, muszą być swobodne. Może zamiast tych obiektów powstawiać tablice 2d ds map? Chyba z nimi najsprawniej by było
Threef Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 tablica[z]=ds_grid_create(x,y) Najprzyjemniejszy sposób jaki znam.
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 chyba z ds listami lepiej bo moge chyba sobie okreslic zmienna np "frame" i wtedy lepiej wszystko widze
I am Lord Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 ds_listy to tablice 1D z możliwością sortowania
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 sory ds_map pomylilo mi sie ale nie moge odczytac wartosci bo np dam ds_list_add( key, "frame", 0) to odczytywanie poprzez ds_list_find_value jak dla mnie to jakos wolno dziala edit: chociaz moze nie tak strasznie, ale z 4x wolniej niz zwykle przypisywanie wartosci zmiennej
I am Lord Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 ds_mapy ogólnie są wolne, z tych struktur najszybsze są listy i grid.
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 tylko czy w gridzie mozna zmieniac wielkosc kiedy sie chce?
Nirvan Opublikowano 25 Maja 2013 Autor Opublikowano 25 Maja 2013 no wlasnie :( bo y to by byly keye a x to klatki angle itd i by height musiałby się zmieniać co dodanie keya nowa linijka
Maximal Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Ależ gridy jak najbardziej można dynamicznie powiększać! GML ds_grid_resize(index, w, h);
I am Lord Opublikowano 25 Maja 2013 Opublikowano 25 Maja 2013 Teraz to mnie zaskoczyłeś : O tyle razy ich używam i nie zauważyłem tej funkcji.
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ę