gpt4 book ai didi

c - 我怎样才能实现一个计时器,在 C 中使用 sdl2 库,制作登月游戏

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:14 25 4
gpt4 key购买 nike

我正在用 C 语言制作着陆器版本(Atari 1979)。我需要在我的游戏中实现一个计时器,然后在屏幕上打印。

我正在使用 SDLDrawLine,因为我有一个代表我的特征的 vector 。我需要我的代码来运行一串字符,这很好。我使用 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 开始?

最佳答案

  • 要打印前导零,只需在 sprintf 语句中使用格式 "%04d" 而不是普通的 "%d"
  • 考虑到整件事情的时间安排,我建议您浏览 Lazyfoos's SDL tutorials关于定时器。要获取时间,请使用 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 的游戏循环中,它仍然是不必要的。

关于c - 我怎样才能实现一个计时器,在 C 中使用 sdl2 库,制作登月游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56228900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com