Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么只有一个数组下标没有被分配?_C_Arrays_Pointers - Fatal编程技术网

C 为什么只有一个数组下标没有被分配?

C 为什么只有一个数组下标没有被分配?,c,arrays,pointers,C,Arrays,Pointers,真奇怪 我正在为我的游戏编写一些物理代码,一些行星间的引力。这不管用,但这不是重点 我正在运行一个游戏循环。对于主循环中的每一帧,我都调用void calculate\u gravity(GameState*game)。我的36面墙阵列中的四个墙对象在此功能中发挥作用,特别是墙瓷砖[32]到[35]。我使用此函数为我的播放器计算速度x和速度y。为此,我做了一个从32到35的循环,即wall\u tiles[]中相关墙的索引。以下代码段很长,但大部分是调试printf语句: void calcul

真奇怪

我正在为我的游戏编写一些物理代码,一些行星间的引力。这不管用,但这不是重点

我正在运行一个游戏循环。对于主循环中的每一帧,我都调用
void calculate\u gravity(GameState*game)
。我的36面墙阵列中的四个墙对象在此功能中发挥作用,特别是
墙瓷砖[32]
[35]
。我使用此函数为我的播放器计算
速度x
速度y
。为此,我做了一个从32到35的循环,即
wall\u 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;


}
我曾尝试将
速度\ux[16]
声明为
速度\ux[4]
速度\ux[100]
,但这并没有什么区别。
我错过了什么?为什么只有
speeds\ux[2]
speeds\uy[2]
始终为0,而不是其他索引?

所以评论中的人都这么说。如果有人读到这篇文章,别忘了调用你的函数。。。(特别是
距离=向量大小(游戏,游戏->墙砖[i]);
)。而%g运算符是一件好事。它也确实有助于获得更干净的调试屏幕。多亏了你们,它现在可以工作了

____________________________________________________________________________________________________

Object's ID: 32
Vector (player to object):                      [-998.6, -371.6]
Distance (player to object):                    1065.47
Object's gravity pull:                          0.00176175
Object's speed effect (x, y):                   [-1.75924, -1.75924]

Object's ID: 33
Vector (player to object):                      [-1298.6, -71.6]
Distance (player to object):                    1300.55
Object's gravity pull:                          0.00118243
Object's speed effect (x, y):                   [-1.53548, -1.53548]

Object's ID: 34
Vector (player to object):                      [-1598.6, -371.6]
Distance (player to object):                    1641.2
Object's gravity pull:                          0.00074252
Object's speed effect (x, y):                   [-1.18698, -1.18698]

Object's ID: 35
Vector (player to object):                      [-1298.6, -671.6]
Distance (player to object):                    1461.96
Object's gravity pull:                          0.000935744
Object's speed effect (x, y):                   [-1.21514, -1.21514]

Array of speed values (x):                      [-1.76,-1.54,-1.19,-1.22] |             Average: -1.42
Array of speed values (y):                      [-0.65,-0.08,-0.28,-0.63] |             Average: -0.41
____________________________________________________________________________________________________

你能给我们看一下
get\u vector\u x
代码吗?或者至少在循环中打印出
vector_x
vector_y
的值?另外,速度真的是零吗?试着用
%g
格式打印,以获得完全的精度。似乎没有披露
游戏->墙砖[i]的值。玩家
的大小。请贴一张。每面墙都有一个
距离。如果这是大的,你的价值将是非常小的。(在应用引力之前打印数值。)
game->wall_tiles[34]。玩家提供的数值
一定是一个巨大的值调试的下一步是为每个索引打印
i
vector\u x
vector\u y
distance
gravity\u pull
。这个问题的下一步是发布一篇文章。
____________________________________________________________________________________________________

Object's ID: 32
Vector (player to object):                      [-998.6, -371.6]
Distance (player to object):                    1065.47
Object's gravity pull:                          0.00176175
Object's speed effect (x, y):                   [-1.75924, -1.75924]

Object's ID: 33
Vector (player to object):                      [-1298.6, -71.6]
Distance (player to object):                    1300.55
Object's gravity pull:                          0.00118243
Object's speed effect (x, y):                   [-1.53548, -1.53548]

Object's ID: 34
Vector (player to object):                      [-1598.6, -371.6]
Distance (player to object):                    1641.2
Object's gravity pull:                          0.00074252
Object's speed effect (x, y):                   [-1.18698, -1.18698]

Object's ID: 35
Vector (player to object):                      [-1298.6, -671.6]
Distance (player to object):                    1461.96
Object's gravity pull:                          0.000935744
Object's speed effect (x, y):                   [-1.21514, -1.21514]

Array of speed values (x):                      [-1.76,-1.54,-1.19,-1.22] |             Average: -1.42
Array of speed values (y):                      [-0.65,-0.08,-0.28,-0.63] |             Average: -0.41
____________________________________________________________________________________________________