Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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中的sdl2库实现计时器,制作月球着陆器游戏_C_Printf_Sdl 2_C Strings - Fatal编程技术网

如何使用C中的sdl2库实现计时器,制作月球着陆器游戏

如何使用C中的sdl2库实现计时器,制作月球着陆器游戏,c,printf,sdl-2,c-strings,C,Printf,Sdl 2,C Strings,我正在用C语言制作一个登陆鼹鼠版本(Atari1979)。我需要在游戏中实现一个计时器,然后在屏幕上打印出来 char aux_str[MAX_VALUES]; sprintf(aux_str,"%d",*value); for(j=0;j<strlen(aux_str);j++){ *tam_caracter_numero = letra_a_longitud(aux_str[j]); *ptr_valor = letra_a_vector(aux_str[j]);

我正在用C语言制作一个登陆鼹鼠版本(Atari1979)。我需要在游戏中实现一个计时器,然后在屏幕上打印出来

char aux_str[MAX_VALUES];
sprintf(aux_str,"%d",*value); 
for(j=0;j<strlen(aux_str);j++){
    *tam_caracter_numero = letra_a_longitud(aux_str[j]);
    *ptr_valor = letra_a_vector(aux_str[j]);
    for(i=0;i<*tam_caracter_numero-1;i++){  
        SDL_RenderDrawLine(
            renderer,
            (*ptr_valor)[i][0] * escalado + pos_x,
            -(*ptr_valor)[i][1] * escalado + pos_y,
            (*ptr_valor)[i+1][0] * escalado + pos_x,
            -(*ptr_valor)[i+1][1] * escalado + pos_y
        );
    }
我之所以使用SDLDrawLine,是因为我有一个表示我的特征的向量。我需要我的代码来运行字符串,这很好。我使用sprintf函数将一个数字转换成一个字符串,然后在屏幕上打印出来

char aux_str[MAX_VALUES];
sprintf(aux_str,"%d",*value); 
for(j=0;j<strlen(aux_str);j++){
    *tam_caracter_numero = letra_a_longitud(aux_str[j]);
    *ptr_valor = letra_a_vector(aux_str[j]);
    for(i=0;i<*tam_caracter_numero-1;i++){  
        SDL_RenderDrawLine(
            renderer,
            (*ptr_valor)[i][0] * escalado + pos_x,
            -(*ptr_valor)[i][1] * escalado + pos_y,
            (*ptr_valor)[i+1][0] * escalado + pos_x,
            -(*ptr_valor)[i+1][1] * escalado + pos_y
        );
    }
char aux_str[最大值];
sprintf(aux_str,“%d”,*值);
对于(j=0;j
  • 要打印前导零,只需在
    sprintf
    -语句中使用格式
    %04d”
    而不是普通的
    %d”
  • 考虑到整件事的时间安排,我建议大家仔细研究一下计时器。 要获取时间,请使用
    SDL\u GetTicks()
    。这将获取自SDL初始化以来的时间(以毫秒为单位)。有关详细信息,请参阅。 要将其用作计时器,您必须获取自上次调用
    SDL_GetTicks
    以来的增量时间,并将其更新
SDL\u GetTime
非常昂贵,所以我不建议每次循环调用它超过一次

离题:我也不建议在循环中重复分配字符串,而是分配一次并覆盖每次迭代


编辑:在我的“离题”评论中,我指的是
aux_str[MAX_VALUES];
,即使它是一条指令,但如果它在OP的gameloop中,它仍然是不必要的。

可能是重复的我尝试了这个,但它不起作用。首先,我的问题不在于printf函数,而在于sprintf。然后我的问题不是在屏幕上打印,但我必须从0001(作为一个数字)传递到一个字符串(使用sprintf),然后使用sdl2函数将其打印在我的游戏屏幕上。当hay在0001上使用sprintf时,我得到一个1。printf和sprintf的格式字符串说明符是相同的。您在offtopic消息中错了。在何处引入字符数组无关紧要,因为在任何情况下,该数组都将分配一次(在堆栈上)在函数执行开始时。不,我不是。这是一个性能问题。分配+写入字节到数组对cpu来说比覆盖现有数组更重。希望编译器已经发现这个小缺陷,并预先分配数组。--这也是为什么我们不在开始时创建新变量的部分原因每个循环的计时局。你指的是什么字符串分配?我在你发布的代码或OPs代码中都看不到任何东西。我不理解“在每个循环的开头创建一个新变量”的注释。你能澄清一下你指的是什么吗?谢谢。“分配”?
char aux_str是什么意思[MAX_VALUES];
-是一条CPU指令,不依赖于代码中您声明它的位置。它不是动态分配(这是昂贵的),而是堆栈分配(这不是)。对不起,我是新来的,我忘了这么做,我用绿色标记,够了吗?或者我必须做其他事情吗?非常感谢!