我正在用C制作着陆器摩尔版本(Atari 1979)。我需要在游戏中实现一个计时器,然后在屏幕上打印。
我使用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
);
}
这正常工作,但是我需要我的计时器从0000开始,更改为0001,0002,....但是,当我使用sprintf将数字转换为字符串时,结果仅为1,并且不打印de 0s。有某种功能可以使之成为可能吗?那从0000开始吗?
答案 0 :(得分:0)
"%04d"
语句中使用格式"%d"
而不是普通sprintf
。SDL_GetTicks()
。自SDL初始化以来,这将获得以毫秒为单位的时间。有关详细信息,请参见man page。
要将其用作计时器,您必须获取自上次调用SDL_GetTicks
起的时间差,并以此进行更新。 unsigned time = SDL_GetTicks();
while(game_is_running) { // Your game loop or whatever thread
// keeps track of time
unsigned now = SDL_GetTicks();
unsigned delta_time = now - time;
// Either delay next frame to get a stable FPS and/or use it as
// calculation in physics/collision
// Update the time
time = now;
}
SDL_GetTime
很昂贵,因此我不建议在每个循环中多次调用它。
离题:我也不建议在循环中重复分配字符串。而是分配一次并覆盖每次迭代。
编辑:在我的“偏离主题”注释中,我指的是aux_str[MAX_VALUES];
,即使它是1条指令,如果它在OP的游戏循环中,也仍然没有必要。