Так странно.
Я кодирую немного физики для своей игры, немного гравитации между планетами. Не работает, но не в этом дело.
Я запускаю игру l oop. Для каждого кадра в моем основном l oop я вызываю void calculate_gravity(GameState *game)
. В этой функции задействованы четыре объекта Wall из моего массива из 36 стен, в частности от wall_tiles[32]
до [35]
. Я использую эту функцию для вычисления speed_x
и speed_y
для моего плеера. Для этого я сделал al oop от 32 до 35, индексы соответствующих стен от wall_tiles[]
. Следующий фрагмент кода длинный, но по большей части это операторы отладки printf:
void calculate_gravity(GameState *game)
{
Player *player = &game->player;
int factor;
float speed_x, speed_y;
float speeds_x[16];
float speeds_y[16];
factor = 2000;
for (int i = 32; i < NUMBER_OF_WALLS; ++i)
{
float vector_x;
float vector_y;
float get_vector_x(GameState*, int);
float get_vector_y(GameState*, int);
float this_speed_x;
float this_speed_y;
vector_x = get_vector_x(game, i);
vector_y = get_vector_y(game, i);
printf("Vector: player to object %d = [%0.3f, %0.3f]",
i, vector_x, vector_y);
float gravity_pull, distance;
distance = game->wall_tiles[i].magnitude_from_player;
if (distance < 100)
{
distance = 100;
}
// object direction = vector
gravity_pull = factor*(1/(distance*distance));
this_speed_x = vector_x * gravity_pull;
this_speed_y = vector_y * gravity_pull;
speeds_x[i-32] = this_speed_x;
speeds_y[i-32] = this_speed_y;
printf("\t i-32 = %d\n", i-32);
}
// Calculate average speed
speed_x = (speeds_x[0] + speeds_x[1] + speeds_x[2] + speeds_x[3]) / 4;
speed_y = (speeds_y[0] + speeds_y[1] + speeds_y[2] + speeds_y[3]) / 4;
printf("speeds_x = [");
for (int i = 0; i < 4; ++i)
{
printf("%0.2f,", speeds_x[i]);
}
printf("]\n");
printf("Speed_x: %0.3f\n", speed_x);
printf("speeds_y = [");
for (int i = 0; i < 4; ++i)
{
printf("%0.2f,", speeds_y[i]);
}
printf("]\n");
printf("Speed_y: %0.3f\n\n", speed_y);
printf("\n");
player->x += speed_x;
player->y += speed_y;
}
А вот и самая странная часть. Или не. Мои массивы speed_x[]
и 'speed_y []' работают нормально для индексов 0, 1 и 3, но для индекса 2 он всегда равен нулю.
Вот отладочный текст, который я напечатал, только первые три кадра :
Vector: player to object 32 = [-1000.000, -372.000] i-32 = 0
Vector: player to object 33 = [-1300.000, -72.000] i-32 = 1
Vector: player to object 34 = [-1600.000, -372.000] i-32 = 2
Vector: player to object 35 = [-1300.000, -672.000] i-32 = 3
speeds_x = [-200.00,-260.00,-0.00,-260.00,]
Speed_x: -180.000
speeds_y = [-74.40,-14.40,-0.00,-134.40,]
Speed_y: -55.800
Vector: player to object 32 = [-820.000, -316.200] i-32 = 0
Vector: player to object 33 = [-1120.000, -16.200] i-32 = 1
Vector: player to object 34 = [-1420.000, -316.200] i-32 = 2
Vector: player to object 35 = [-1120.000, -616.200] i-32 = 3
speeds_x = [-164.00,-224.00,-0.00,-224.00,]
Speed_x: -153.000
speeds_y = [-63.24,-3.24,-0.00,-123.24,]
Speed_y: -47.430
Vector: player to object 32 = [-667.000, -268.770] i-32 = 0
Vector: player to object 33 = [-967.000, 31.230] i-32 = 1
Vector: player to object 34 = [-1267.000, -268.770] i-32 = 2
Vector: player to object 35 = [-967.000, -568.770] i-32 = 3
speeds_x = [-133.40,-193.40,-0.00,-193.40,]
Speed_x: -130.050
speeds_y = [-53.75,6.25,-0.00,-113.75,]
Speed_y: -40.316
Я пробовал объявить speeds_x[16]
как speeds_x[4]
и speeds_x[100]
, но это не имело значения. Что мне не хватает? Почему только speeds_x[2]
и speeds_y[2]
всегда равны 0, а не другие индексы?