当前位置: 首页 > news >正文

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.帧率&#xff1a; 即每秒钟界面刷新次数&#xff0c;下面以60帧为例&#xff1a; 1.数据类型 clock_t&#xff1a; 用来保存时间的数据类型。 2.clock( ) 函数&#xff1a; 用于返回程序运行的时间,无需参数。 3.例子&#xff1a; 先定义所需帧率&#xff1a; const …...

git-生成证书、公钥、私钥、error setting certificate verify locations解决方法

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

论文笔记(四十)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的生命周期 。 为了满足不同业 务 景 &#xff0c; Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…...

Unity之四元数

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

【计算机硬件】3、输入输出技术、总线结构

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

k8s的对外服务--ingress

service作用体现在两个方面 1、集群内部 不断跟踪pod的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器&#xff0c;把流量ip端口&#xff0c;不涉及转发url&#xff08;http&#xff0c;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#类库工程生成的动态链接库调试时报错&#xff1a; System.MissingMethodException HResult0xFFFFFFFF Message找不到方法…… 软件结构如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; usi…...

Redis面试题23

Redis 的持久化机制是什么&#xff1f; 答&#xff1a;Redis 提供了两种持久化机制来保证数据的持久性&#xff0c;即 RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append Only File&#xff09;。 RDB 持久化&#xff1a;RDB 是 Redis 默认的持久化方式。它…...

Linux中的yum源仓库和NFS文件共享服务

一.yum简介 1.1 yum简介 yum&#xff0c;全称“Yellow dog Updater, Modified”&#xff0c;是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键&#xff0c;可以一键下载&#xff0c;一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…...

【LeetCode2744】最大字符串配对数目

1、题目描述 【题目链接】 标签&#xff1a;数组&#xff0c;哈希表&#xff0c;字符串&#xff0c;模拟  给你一个下标从 0 开始的数组 words &#xff0c;数组中包含 互不相同 的字符串。  如果字符串 words[i] 与字符串 words[j] 满足以下条件&#xff0c;我们称它们可以…...

安全加速SCDN是什么

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

Android 布局菜鸟 android中的布局类型和特点?

一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…...

2023总结与2024寒假计划

王泽政 2023 的总结 学习总结 关于 2023 学习总体上来讲&#xff0c;2023 学的东西还是不少的&#xff0c;有对技术栈广度的扩展&#xff0c;也有对计算机深度的挖掘。 学习内容总结&#xff1a; 学习 React 学习浏览器渲染原理 学习计算机网络 学习 Next.js 学习 Nest.…...

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx

第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发&#xff1a;传统开发模式 前后端分离开发&#xff1a;当前最为主流的开发模式 页面原型需求案例&#xff1a;分析出接口文档 离线开发文档示例&#xff1a; 2、YAPI&#xff08;官网已停用&#xff09; 202…...

如何给新华网投稿发稿?新华网的媒体发稿方法步骤

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

为什么 macOS 比 Windows 稳定?

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

从matlab的fig图像文件中提取数据

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

基于网络爬虫的微博热点分析,包括文本分析和主题分析

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

前端图片转base64 方法

在uni-app、Vue.js或其他前端框架中&#xff0c;将图片转换为Base64编码的过程是相似的。以下是一个简单的示例&#xff0c;说明如何在这些环境中使用JavaScript将图片转换为Base64编码。 1. HTML部分 首先&#xff0c;你需要在HTML中放置一个文件输入元素&#xff0c;用于选…...

Go语言数据结构(一)双向链表

list容器 Go语言中list容器定义在"container/list"包中&#xff0c;实现了一个双向链表。本文第一部分总结源码包中的方法&#xff0c;第二部分展示使用list包的常见示例用法以及刷题时的用法。 食用指南&#xff1a;先看第二部分的常用示例用法然后再用到时在第一部…...

【MySql】MySQL 如何创建新用户

具体代码与实现方法 登录 MySQL&#xff1a; 使用 root 用户或具有相应权限的用户登录到 MySQL。可以使用以下命令&#xff1a; mysql -u root -p这里 -u 后面跟的是用户名&#xff0c;-p 表示提示输入密码。 创建新用户&#xff1a; 使用以下 SQL 命令创建新用户&#xff1a;…...

【DFS】200.岛屿数量

题目 法1&#xff1a;DFS 最简单的DFS必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int numIslands(char[][] grid) {int m grid.length, n grid[0].length, ans 0;if (m 0 || n 0) {return ans;}boolean[][] visited new boolean[m][n];for…...

Vue动态添加新的属性到实例上(vue的问题)

当我们去看vue文档的时候&#xff0c;发现如果在实例创建之后添加新的属性到实例上&#xff0c;它不会触发视图更新。比如我们我们开始创建了一个对象实例&#xff0c;在实例创建之后为其增加新的属性&#xff0c;我们发现这个属性不能生效,此时需要使用this.$set()方法。 &…...

HarmonyOS应用开发者高级认证

一、判断题 云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用&#xff08;错&#xff09; 在column和Row容器组件中&#xff0c;aligntems用于设置子组件在主轴方向上的对齐格式&#xff0c;justifycontent用于设置子组件在交叉轴…...

设计模式复盘

一、背景 在项目中&#xff0c;对于单据的扩展是基于类似于接口扩展实现的。从业务横行来看&#xff0c;业务有A、B、C&#xff1b;从纵向来看&#xff0c;单个业务逻辑编排也可以划分为基础数据查询&#xff0c;决策判断&#xff0c;逻辑执行三大块。 单据扩展&#xff1a;平…...

电力能源三维可视化合集 | 图扑数字孪生

电力能源是现代社会发展和运行的基石&#xff0c;渗透于工业、商业、农业、家庭生活等方方面面&#xff0c;它为经济、生活质量、环境保护和社会发展提供了巨大的机会和潜力。图扑软件应用自研 HT for Web 强大的渲染引擎&#xff0c;助力现代化的电力能源数字孪生场景&#xf…...

What is `@Repository` does?

Repository 是Spring注解&#xff0c;标识数据访问层组件&#xff08;DAO, Data Access Object&#xff09; 当一个类被标记为 Repository 时&#xff1a; 1、组件扫描与自动代理&#xff1a; Spring通过组件扫描&#xff08;Component Scan&#xff09;机制发现带有 Reposit…...

c# 自定义 滑块TrackBar

辛苦半天做出来的&#xff0c;如果觉得好用&#xff0c;记得点赞 效果图如下&#xff1a; 具体操作&#xff1a; 1 、添加代码&#xff08;代码在下面&#xff09;&#xff0c;重新生成下整个工程&#xff0c;在工具栏中就出现控件&#xff0c;将控件拖到窗体中 2、只需要调整…...