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分词工具将文本分割成有意义的…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...