【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.

posted @ 2022-12-09 16:40  AnnihilateSword  阅读(68)  评论(0编辑  收藏  举报