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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值