Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

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)

Opublikowano

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

Opublikowano

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.

Opublikowano

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

Opublikowano

ż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ę.

Opublikowano

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)]]

Opublikowano

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

Opublikowano

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

Opublikowano

no wlasnie :( bo y to by byly keye a x to klatki angle itd i by height musiałby się zmieniać

 

keyframes.png

co dodanie keya nowa linijka

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...