EasyX图形化学习(三)
1.帧率:
即每秒钟界面刷新次数,下面以60帧为例:
1.数据类型 clock_t:
用来保存时间的数据类型。
2.clock( ) 函数:
用于返回程序运行的时间,无需参数。
3.例子:
先定义所需帧率:
const clock_t FPS = 1000 / 60;
然后定义两个变量,用于表示一次循环运行前后的时间,再用Sleep函数休眠即可。
while (true){startTime = clock();//balabalafreamTime = 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.精灵表动画:
首先需要一张包含全部动画帧的图片:
然后设置切帧的参数:
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(注:对音乐格式有要求)
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图形化学习(三)
1.帧率: 即每秒钟界面刷新次数,下面以60帧为例: 1.数据类型 clock_t: 用来保存时间的数据类型。 2.clock( ) 函数: 用于返回程序运行的时间,无需参数。 3.例子: 先定义所需帧率: const …...

git-生成证书、公钥、私钥、error setting certificate verify locations解决方法
解决方法 方法1-配置证书、公钥、私钥打开Git Bash设置名称和邮箱执行,~/.ssh执行,ssh-keygen -t rsa -C "这是你的邮箱",如图:进入文件夹可以看到用记事本之类的软件打开id_rsa.pub文件,并且复制全部内容。…...

论文笔记(四十)Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds
Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 学习 6D 抓握政策3.1 背景3.2 从点云抓取 6D 策略3.3 联合运动和抓握规划器的演示3.4 行为克隆和 DAGGER3.5 目标--辅助 DDPG3.6 对未知物体进行微调的后视目标 4. 实…...

k8s学习-Deployment
Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 , Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…...

Unity之四元数
欧拉角 万向节死锁 四元数是什么 Unity中四元数的初始化 四元数和欧拉角的互相转换 补充 四元数相乘代表旋转四元数...

【计算机硬件】3、输入输出技术、总线结构
文章目录 输入输出技术内存与接口地址的编址方法1、 内存与接口地址独立编址方法2、内存与接口地址统一编址方法 计算机和外设间的数据交互方式1、程序控制(查询)方式2、程序中断方式3、DMA方式(直接主存存取) 总线结构 输入输出技术 内存与接口地址的编…...

k8s的对外服务--ingress
service作用体现在两个方面 1、集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器,把流量ip端口,不涉及转发url(http,https&a…...

CSS 雷达监测效果
<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…...
C# System.MissingMethodException
C#应用程序工程调用C#类库工程生成的动态链接库调试时报错: System.MissingMethodException HResult0xFFFFFFFF Message找不到方法…… 软件结构如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi…...
Redis面试题23
Redis 的持久化机制是什么? 答:Redis 提供了两种持久化机制来保证数据的持久性,即 RDB(Redis Database)和 AOF(Append Only File)。 RDB 持久化:RDB 是 Redis 默认的持久化方式。它…...

Linux中的yum源仓库和NFS文件共享服务
一.yum简介 1.1 yum简介 yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键,可以一键下载,一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…...
【LeetCode2744】最大字符串配对数目
1、题目描述 【题目链接】 标签:数组,哈希表,字符串,模拟 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以…...

安全加速SCDN是什么
安全加速SCDN(Secure Content Delivery Network,SCDN) 是集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络(CDN)或全站加速网络(ECDN)的用户&…...

Android 布局菜鸟 android中的布局类型和特点?
一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…...
2023总结与2024寒假计划
王泽政 2023 的总结 学习总结 关于 2023 学习总体上来讲,2023 学的东西还是不少的,有对技术栈广度的扩展,也有对计算机深度的挖掘。 学习内容总结: 学习 React 学习浏览器渲染原理 学习计算机网络 学习 Next.js 学习 Nest.…...

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx
第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发:传统开发模式 前后端分离开发:当前最为主流的开发模式 页面原型需求案例:分析出接口文档 离线开发文档示例: 2、YAPI(官网已停用) 202…...

如何给新华网投稿发稿?新华网的媒体发稿方法步骤
现如今,互联网已经成为了人们获取信息的主要途径,各大媒体网站也成为了发布自己作品的首选平台。其中,新华网作为中国最具影响力的新闻媒体之一,其内容覆盖面广、触及人群众多,因此,能够在新华网上发表文章…...

为什么 macOS 比 Windows 稳定?
在计算机操作系统领域,macOS 和 Windows 分别是苹果公司和微软公司的主打产品。尽管两者都拥有大量的用户群体,但在稳定性和用户体验方面,macOS 常常被认为优于 Windows。那么,为什么 macOS 比 Windows 更稳定呢? 我们…...

从matlab的fig图像文件中提取数据
这里用的是openfig()函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…...

基于网络爬虫的微博热点分析,包括文本分析和主题分析
基于Python的网络爬虫的微博热点分析是一项技术上具有挑战性的任务。我们使用requests库来获取微博热点数据,并使用pandas对数据进行处理和分析。为了更好地理解微博热点话题,我们采用LDA主题分析方法,结合jieba分词工具将文本分割成有意义的…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...