【SDL游戏编程入门第十七卷】计时器
一、前言
本卷介绍 SDL 提供的计时功能
二、添加计时器
// --- 计时器 -------------------------------------------------------
SDL_TimerID id = SDL_AddTimer(1000, [](Uint32 interval, void* param)
{
std::cout << "SDL_Timer: passed 1 second!" << std::endl;
return interval; // 必须返回,可以看 SDL_AddTimer 注释
}, nullptr);
当不使用时,移除计时器
SDL_RemoveTimer(id); // 移除计时器
1. 示例代码
#include <iostream>
#include <SDL.h>
#pragma comment(lib, "SDL2.lib")
#pragma comment(lib, "SDL2main.lib")
constexpr int SRC_WIDTH = 640;
constexpr int SRC_HEIGHT = 480;
// 错误处理
#define MyError(ErrorMessage) \
{\
std::cout << "[Error]: " << (ErrorMessage) << std::endl;\
return -1;\
}
int main(int argc, char* argv[])
{
// Init
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
MyError("Failed to Initialize SDL!");
SDL_Window* window = SDL_CreateWindow("HelloSDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SRC_WIDTH, SRC_HEIGHT, SDL_WINDOW_SHOWN);
if (!window)
MyError("Failed to create window!");
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!renderer)
MyError("Failed to create window renderer");
// --- 计时器 -------------------------------------------------------
SDL_TimerID id = SDL_AddTimer(1000, [](Uint32 interval, void* param)
{
std::cout << "SDL_Timer: passed 1 second!" << std::endl;
return interval; // 必须返回,可以看 SDL_AddTimer 注释
}, nullptr);
// Game Running
SDL_Event event;
bool running = true;
while (running)
{
// Event Loop
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
running = false;
}
// 清屏(黑色)
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
// 更新屏幕
SDL_RenderPresent(renderer);
}
// Clear up
SDL_RemoveTimer(id); // 移除计时器
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
2. 运行结果
三、获取程序从开始到现在经过的时间 (ms)
// 获取程序从开始到现在经过的时间
std::cout << SDL_GetTicks64() << std::endl;
将该代码放入循环中
1. 运行结果
本节内容就到这里了,下卷会继续分享 SDL 的基本使用
The End.