VS2019的SDL2项目配置

2023-09-22 14:51:42

库下载

Simple DirectMedia Layer - Homepage

对于Windows下使用VS2019开发的选手,应该直接选VC后缀了。

VS目录配置

首先VS2019创建一个空项目,新加入一个源文件,代码如下:

/*This source code copyrighted by Lazy Foo' Productions 2004-2023
and may not be redistributed without written permission.*/

//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>

//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main(int argc, char* args[])
{
	//The window we'll be rendering to
	SDL_Window* window = NULL;

	//The surface contained by the window
	SDL_Surface* screenSurface = NULL;

	//Initialize SDL
	if (SDL_Init(SDL_INIT_VIDEO) < 0)
	{
		printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
	}
	else
	{
		//Create window
		window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
		if (window == NULL)
		{
			printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
		}
		else
		{
			//Get window surface
			screenSurface = SDL_GetWindowSurface(window);

			//Fill the surface white
			SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0x00, 0xFF, 0xFF));

			//Update the surface
			SDL_UpdateWindowSurface(window);

			//Hack to get window to stay up
			SDL_Event e; bool quit = false; while (quit == false) { while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT) quit = true; } }
		}
	}

	//Destroy window
	SDL_DestroyWindow(window);

	//Quit SDL subsystems
	SDL_Quit();

	return 0;
}

上述代码的作用是显示一个绿色的窗口,如下图

代码复制完毕后,开始一系列复杂的设置操作了:

在这里右键,选择最下面的属性。

然后解压刚刚下载的SDL2-devel-2.28.3-VC.zip,解压后将头文件和静态库文件的路径设置到下面两个选项中,从而完成编译和链接的过程,能够进行示例程序的编译(仅仅是编译通过,并不是可以运行)。

此时编译完成,链接的库指定如下:

可以尝试运行。

注意,这里运行时会提示“找不到SDL2.dll”,这是因为上面x64目录下的dll路径运行程序并不知道。

有两种解决方法,第一是手动将dll拷贝到运行路径里面,第二是设置一下运行路径,第三是设置环境变量。我们选择第二种,因为比较简单。

将这个目录设置为dll所在目录,再次运行,可以完成运行。

值得一提的是,上面调试的工作路径有的时候需要指向资源路径,如果dll和资源路径一起混放,会稍显混乱,因此也可以设置一下环境变量,设置完之后需要关闭并重新打开VS2019才会生效。

然后就是一路双击,把刚刚的路径粘贴到空白处,点击应用。

更多推荐

MySQL数据库描述以及安装使用

一:数据库介绍数据库数据库就是用来存储数据的一种特殊文件。数据库类别数据库主要分为两种:关系型数据库RDBMS非关系型数据库关系型数据库的主要产品:oracle:在以前的大型项目中使用,银行,电信等项目mysql:web时代使用最广泛的关系型数据库mssqlserver:在微软的项目中使用sqlite:轻量级数据库,主

Linux线程

1.进程是资源管理的最小单位,线程是程序执行的最小单位。2.每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程,它包含独立的栈和CPU寄存器状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包括打开的文件、内存页面、信号标识及动态分配的内存等。3.因为线程和进程比起来很小,所以相对来说,线

Java抽象类和普通类区别、 数组跟List的区别

抽象类Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类通常用于定义一些通用的属性和方法,但是这些方法的具体实现需要在子类中完成。抽象类中可以包含抽象方法和非抽象方法。抽象方法是一种没有实现的方法,只有方法的声明,没有方法体。抽象方法必须在抽象类中声明,而且子类必须实现这些抽象方法。如果子类没有实现抽

Linux sed

1.sed介绍sed:StreamEditor,流编辑器、行编辑器、逐行编辑sed将每行内容读入到“内存”中,在内存中进行处理,将结果返回给屏幕,此段内存空间称为模式空间。sed默认不编辑原文件,仅对模式空间的数据进行处理,处理结束后,将模式空间的内容显示到屏幕2.sed语法sed命令的语法格式sed[option]s

2023研究生数学建模竞赛A题B题C题D题E题F题思路+模型+代码

目录1.A题B题C题D题E题F题思路模型:9.22早上比赛开始后,第一时间更新,获取见文末名片2.竞赛注意事项:包括比赛流程,任务分配,时间把控,论文润色,已经发布在文末名片中3.常用国赛数学建模算法3.1分类问题3.2优化问题4.获取赛题思路模型见此名片1.A题B题C题D题E题F题思路模型:9.22早上比赛开始后,第

【Java】泛型 之 使用泛型

使用ArrayList时,如果不定义泛型类型时,泛型类型实际上就是Object://编译器警告:Listlist=newArrayList();list.add("Hello");list.add("World");Stringfirst=(String)list.get(0);Stringsecond=(String

MySQL 锁机制

文章目录MySQL锁机制1、什么是锁2、锁的缺点3、锁的分类3.1表级锁(1)什么是表级锁(2)读锁(3)写锁(4)读锁和写锁的总结(5)表级锁的优点和缺点(6)表级锁优缺点总结3.2行级锁(1)什么是行级锁(2)读锁`S`(3)写锁(4)意向共享锁`IS`(5)意向排他锁`IX`(6)行级锁的优点和缺点(7)行级锁的

【MySQL】索引

索引索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。优缺点:优点:提高数据检索效率,降低数据库的IO成本通过索引列对数据进行排序,降低数据排序的成本,降

安卓桌面记事本便签软件哪个好用?

日常生活及工作中,很多人常常会遇到一些一闪而现的灵感,这时候拿出手机想要记录时,却找不到记录的软件。在这个快节奏的时代,安卓手机是我们日常生活不可或缺的伙伴。然而,正因为我们的生活如此忙碌,记事变得尤为重要。无论是备忘、计划、灵感还是简单的笔记,都需要一个方便而强大的工具。所以问题来了,安卓桌面记事本便签软件中哪个才是

气传导与入耳式传导区别?气传导耳机好用吗?

​入耳式耳机隔音效果好,但佩戴舒适性差,音质更偏向沉浸式。相比传统入耳式耳机,气传导耳机可以提供开放的听觉体验,音质更加自然真实,同时避免了长时间佩戴耳机可能会带来的不适感。以下是我总结了最好用的几款气传导耳机,看看有没有喜欢的。Top1:NANK南卡00压开放式耳机点评:开放式音频“技术之王”,音质与舒适最好的开放式

链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,

链表OJ一,移除链表元素1.1分析1.2代码二,找到链表的中间节点2.1分析2.2代码三,反转链表3.1分析3.2代码四,找到链表中倒数第k个节点4.1分析4.2代码一,移除链表元素移除链表元素1.1分析这里的删除要分成两种情况来考虑,因为这个题目给了我们头节点,所以分成头删和非头删。因为要记录下一个节点的位置,所以1

热文推荐