EasyX图形化学习(三)

这篇具有很好参考价值的文章主要介绍了EasyX图形化学习(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.帧率:

即每秒钟界面刷新次数,下面以60帧为例:

1.数据类型 clock_t:

用来保存时间的数据类型。

2.clock( ) 函数:

用于返回程序运行的时间,无需参数。

3.例子:

先定义所需帧率:

const clock_t FPS = 1000 / 60;

然后定义两个变量,用于表示一次循环运行前后的时间,再用Sleep函数休眠即可。

	while (true)
	{
		startTime = clock();
		//balabala
		freamTime = clock() - startTime;

		if (freamTime < FPS)
		{
			Sleep(FPS - freamTime);
		}
	}

2.图片的加载和输出:

1.定义图片变量:

数据类型IMAGE:保存图片的数据类型。

2.加载图片:

1.loadimage函数:

将图片放到图片变量中。

loadimage(&图片变量 , 图片地址,图片宽度,图片高度);

2.图片地址:

(1)绝对路径:

复制图片地址 --- 将所有 / 变为 // 防止转义 

注:如果图片格式不对,打开画图,拖进去后再另存为,选择 jpg 格式即可。

(2)相对路径:(推荐,通用性好)

只要图片所在文件与 vs main.cpp 在一个路径下,即可直接 “所在文件夹 \\ 图片名”。

3.输出图片:

putimage(x , y , &图片变量);

4.透明贴图:

(1)先绘制掩码图:

(2)在putimage函数中添加参数:

掩码图为NOTSRCERASE,原图为SRCERASE。

(3)将原图和掩码图输出到同一位置:

例:

	//透明图贴图
	IMAGE img_plane[2];
	loadimage(img_plane, "assets\\plane_mask.jpg");
	loadimage(img_plane + 1, "assets\\plane.jpg");

	putimage(50, 50, img_plane, NOTSRCERASE);
	putimage(50, 50, img_plane+1, SRCERASE);

5.精灵表动画:

首先需要一张包含全部动画帧的图片:

EasyX图形化学习(三),学习

然后设置切帧的参数:

	int imgSize = 32;//每帧的尺寸
	int frames = 7;//总共有多少帧
	int speed = 200;//多少毫秒切换一张
	int index = 0;//贴哪一张图

putimage函数有重载版本:

void putimage(int dstX, int dstY, int dstWidth, int dstHeight, 
const IMAGE *pSrcImg, int scrX, int scrY)

其中srcX和srcY是图片中坐标,表示你要剪切的图片的左上角坐标。

综上:即可实现动画

	index = (clock() / speed) % frames;
	putimage(250, 250, imgSize, imgSize, &img_sheet, index * imgSize, 0);

3.播放音乐:

1.头文件:

首先需要包含头文件:

#include<stdio.h>
#include<Windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

2.播放:

使用 mciSendString 函数(多媒体控制函数):

我们只需要改变第一个参数,其他置为0或NULL即可:

先open+音频路径,再play+音频路径

	mciSendString("open assets/That-Girl.mp3", NULL, 0, NULL);
	mciSendString("play assets/That-Girl.mp3", NULL, 0, NULL);

3.音频地址起别名:

音频可以用 alias 关键字起别名,加在音频路径的后面:

	mciSendString("open assets/That-Girl.mp3 alias bgm", NULL, 0, NULL);
	mciSendString("play bgm", NULL, 0, NULL);

如上面bgm就是别名。

注:如果同时播放两个音乐,不能用同样的别名。

4.调整音量:

将第一个参数改为:

setaudio 音频地址 volume to 音量(范围0-1000)

mciSendString("setaudio bgm volume to 100", NULL, 0, NULL);

5.如果mciSendString调整失败如何查看错误:

mciSendString函数有一个返回值,返回MCIERROR类型,成功返回零,失败返回非0。

mciGetErrorString函数可将错误信息放进一个字符数组里。

	MCIERROR ret = mciSendString("setaudio bgm volume 100", NULL, 0, NULL);
	if (ret != 0)
	{
		char err[100] = { 0 };
		mciGetErrorString(ret, err, sizeof(err));//获取错误信息
		puts(err);//打印错误信息
	}

6.循环播放:

正常播放只播放一次,如果想循环播放:

在 play 的后面加一个 repeat(注:对音乐格式有要求)文章来源地址https://www.toymoban.com/news/detail-804433.html

mciSendString("play bgm repeat", NULL, 0, NULL);

7.封装音乐播放函数:

void playBackgroundMusic(const char* music,bool isrepeat = false,int volume = -1)
{
	static int i = 0;//防止使用同一别名
	char cmd[100] = { 0 };
	sprintf(cmd, "open %s alias bgm%d", music,i);
	MCIERROR ret = mciSendString(cmd, NULL, 0, NULL);
	if (ret != 0)
	{
		char err[100] = { 0 };
		mciGetErrorString(ret, err, sizeof(err));//获取错误信息
		printf("open : %s", err);//打印错误信息
		return;
	}
	sprintf(cmd, "play bgm%d %s",i,isrepeat?"repeat":"");//判断是否循环播放
	ret = mciSendString(cmd, NULL, 0, NULL);
	if (ret != 0)
	{
		char err[100] = { 0 };
		mciGetErrorString(ret, err, sizeof(err));//获取错误信息
		printf("play : %s", err);//打印错误信息
		return;
	}
	if (volume != -1)//修改音量
	{
		sprintf(cmd, "setaudio bgm%d volume to %d", i, volume);
		ret = mciSendString(cmd, NULL, 0, NULL);
		if (ret != 0)
		{
			char err[100] = { 0 };
			mciGetErrorString(ret, err, sizeof(err));//获取错误信息
			printf("setaudio : %s", err);//打印错误信息
			return;
		}
	}
	i++;
}

到了这里,关于EasyX图形化学习(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • easyx图形库基础:2.基本运动+键盘交互

    1.如何实现动画: 相信大家已经对动画的原理已经不陌生了。想要目标物体动起来,只需要逐个播放目标物体每一时刻位置的图片。只要播放的速度足够快,人们就会在视觉上认为目标物体动起来了。 帧率:具有连续性的一些图片在1秒中绘制的个数。 物体运动的速度单位一

    2024年02月12日
    浏览(34)
  • easyx图形库基础:3实现弹球小游戏

    画面效果: 1.球的中心点坐标,球的半径, 2.球的实际速度,水平竖直的分量速度。 3.球的颜色。 4.定义一个结构体去保存这些数值。

    2024年02月12日
    浏览(36)
  • C/C++图形库EasyX保姆级使用教程(二) 图形化窗口设置以及简单图形的绘制

    第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 第二章 图形化窗口设置以及简单图形的绘制 本篇文章,我将给大家展示VC中的图形化编程,内容比较详细! 日常写程序,我们用的最多的就是控制台的窗口,但是,今天我们讲的是图形化编程,那么 控制台窗口 变成了

    2024年01月19日
    浏览(44)
  • EasyX图形库note4,动画及键盘交互

    大家好,这里是Dark Flame Master,专栏从这篇开始就会变得很有意思,我们可以利用今天所学的只是实现很多功能,同样为之后的更加好玩的内容打下基础,从这届开始将会利用所学的知识制作一些小游戏,废话不多说,开始今天的内容。 专栏:EasyX图形化编程 在之前的笔记中

    2024年02月08日
    浏览(44)
  • 图形化界面扫雷(C语言+easyx实现,多图教学)

    学了那么长时间的C语言,我们所有的一切似乎都被禁锢在黑框框(控制台)里,让人觉得很无趣,学习unity那样的平台又太过困难,那么有没有什么是适合我们这些新手使用的?答案是:有! EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程

    2024年02月06日
    浏览(46)
  • EasyX---快速入门---(二)图形处理/鼠标、键盘消息/其他

    导图版本   图形处理函数(用于在窗口显示图片) 使用图像之前,需要定义一个变量(对象),然后把图片加载进变量才能使用 使用EasyX提供的类型:IMAGE img; loadimage(IMAGE*pDstlmg,LPCTSTR plmgFile,int nWidth=0,int nHeight=0,bool bResize=false);从文件中读取图像 pDstlmg 保存图像的IMAGE对象指针

    2024年02月10日
    浏览(40)
  • 【c语言】五子棋(EasyX图形库+背景音乐)

    大家好,有没有觉得写了好多c语言代码,面对的都是黑框框控制台,当我们学习了基础的c语言知识,和EasyX图形库后,终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋,跟着小张一起学习吧 图形库链接 1.点击下载 2.安装你对应集成开发环境对应的安装包,我用

    2024年02月09日
    浏览(36)
  • C++实现贪吃蛇(含源代码)—基于easyx图形库

                                            食用指南:本文在有C++基础的情况下食用更佳                                           🍀 本文前置知识: C++基础                                        ♈️ 今日夜电波:toge—あよ              

    2024年02月09日
    浏览(43)
  • C/C++图形库EasyX保姆级使用教程(一) Microsoft Visual Studio 2022和EasyX的下载及安装使用

    第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用

    2024年02月11日
    浏览(51)
  • 【C/C++小游戏】2048 大作战!(基于Easyx图形窗口实现)

    写在前面 游戏简介 Easyx 图形库 编写游戏 预编译代码 第一步:初始化棋盘 第二步:绘制棋盘 第三步:用户操作 第四步:封装函数 完整代码 效果展示 大家好! 本人是一个12岁六年级小学生,今年9月开始学习C++,曾经学过1年Python。 这是我的第一篇博客,决定分享一个游戏

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包