Я пытаюсь сделать анимацию, используя массив адресов с алгоритмом для вычисления текущего изображения анимации.У меня есть две функции, одна из которых представляет собой простой «счетчик от 1 до N», другая содержит направление, поэтому я могу где-то изменить направление, и поэтому функция начинает воспроизводить анимацию только для этого направления.Адреса изображений всех направлений сохраняются в массиве, так что, например, 1-3 вверх, 4-6 справа, 7-9 вниз и 10-12 слева.
Теперь к моей проблеме:Если я использую обе мои функции, программа перестает работать.Если я использую только одну функцию, все работает нормально, и поскольку обе функции в основном одинаковы, просто с другим алгоритмом, я не понимаю, почему он останавливается, когда я запускаю обе функции.
Я генерирую свой адресный массивс моей собственной функцией, поэтому мне не нужно иметь тонны строк с:
adr[1] = "bla_1";
adr[2] = "bla_2";
... но это не работает, как только я использую 2 «функции анимации».
Я пытался не использовать функцию и писать адреса вручную, теперь она работает просто отлично.Но это не возможное решение для меня.Так что, я думаю, я допустил ошибку в своей функции генерации массива адресов, даже если она работает нормально, если я использую только одну «анимационную функцию».
______________________________ MAIN _______________________________
char* playerAdr[8];
int count = 0;
char intString[8];
int gvPlayerDir = 2; // just for example!
loadAdrArrPaths( playerAdr, 8, "src/images/player" );
/*
playerAdr[0] = "src/images/player_1.png";
playerAdr[1] = "src/images/player_2.png";
...
playerAdr[7] = "src/images/player_8.png";
*/
printMultiAnimation( playerAdr, 2, 300, setPos(82,50), 1, gvPlayerDir );
//printAnimation( playerAdr, 8, 300, setPos(50,50), 1 );
______________________________ HEAD _______________________________
void printAnimation( char* adrArr[], int adrNr, int frameTime, sPos pos, bool transparent ){
int tempInt = ((SDL_GetTicks() - gvTimestamp) / frameTime) % adrNr;
printSurface( adrArr[tempInt], pos, transparent );
}
void printMultiAnimation( char* adrArr[], int adrNr, int frameTime, sPos pos, bool transparent, int dir ){
int tempInt = (((SDL_GetTicks() - gvTimestamp) / frameTime) % adrNr) + ( adrNr * ( dir - 1 ));
printSurface( adrArr[tempInt], pos, transparent );
}
void loadAdrArrPaths( char* adrArr[], int size, char* path ){
int count = 0;
char intString[8];
char tempPath[size][256];
while( count < size ){
sprintf(intString, "%d", count+1);
strcpy( tempPath[count], path );
strcat( tempPath[count], "_" );
strcat( tempPath[count], intString );
strcat( tempPath[count], ".png" );
adrArr[count] = tempPath[count];
//printf("%i - %s\n", count, adrArr[count]);
count++;
}
}
Все, что я хочу, это использовать printAnimation
и printMultiAnimation
вместе, чтобы на моем экране одновременно могли отображаться 'простые анимации' и некоторые 'анимации, основанные на направлении'.И, как я уже сказал, если я объявляю адреса изображений «вручную», это прекрасно работает, так что я почти уверен, что сделал что-то не так в своей loadAdrArrPaths
-функции.Скорее всего я облажался с указателями / ссылками?
Надеюсь, кто-то может и поможет мне.