猿创征文|【C++游戏引擎Easy2D】学C++还不会绘制一个简单的二维图形?一篇文章教会你

news/2024/5/6 6:49:11/文章来源:https://blog.csdn.net/CSDN_linyanchen/article/details/126426149

在这里插入图片描述

🧛‍♂️iecne个人主页:iecne的学习日志
💡每天关注iecne的作品,一起进步
💪学C++必看iecne
本文专栏【C++游戏引擎】.
🐳希望大家多多支持🥰一起进步呀!
iecne


✨前言

互相学习,或者加入粉丝群,可以添加vx YAN_Pisces_Boom
哈喽大家好,我是iecne,本期为大家带来的是CPP/C++【游戏引擎Easy2D】绘制一个简单的二维图形,例如矩形、圆形等。包教包会,快来看看吧!
引擎支持 Visual Studio 2013 及以上版本,如果你使用的是较低版本的 VS,那么你需要考虑一下更新你的编译器了

任务描述

如何根据据Button制作鼠标控制按钮类
本实践旨在通过多个代码的案列,让大家理解和掌握如何使用Easy2D引擎来绘制一个简单的二维图形,例如矩形、圆形等。

在这里插入图片描述


文章目录

  • ✨前言
    • 任务描述
  • Easy2D导读
  • 安装 Easy2D
  • 一.Easy2D图形
    • 1.1 形状分类
    • 1.2 形状的使用方法
    • 1.3 填充与轮廓
      • 1.3.1 理论
      • 1.3.2 实例使用
  • 二.对比EasyX图形库
  • 三.关于引擎的杂谈
  • 关于命名
  • 总结


Easy2D导读

对于编程而言,初学者最需要的不是技能,而是成就感。
如果你喜欢用 C/C++ 编写自己的小游戏,那么 Easy2D 将是个不错的选择,它大大简化了游戏制作过程,可以帮助你快速开发 Windows 上的 2D 小游戏。
它的特点和它的名字一样,Everything is Easy!


安装 Easy2D

使用简易安装器
运行里面的 install.bat 文件进行安装。
点击此链接进行下载(纯免费,给官方搞成了VIP)
点击下载
安装程序会检测您已经安装的 Visual Studio 版本,并根据您的选择将对应库文件解压至 VS 库目录下。
Easy2D 不支持 VS2012 及以下的版本(包括 VC6.0),如果你使用的是低版本的 VS,那你需要尝试一下新版的 Visual Studio 了。

安装环境:
操作系统:Windows 7 及以上操作系统。
编译环境:Visual Studio 2013 (x86 & x64) 及以上版本。


一.Easy2D图形

Shape 是节点的一种,它用于绘制一个简单的二维图形,例如矩形、圆形等。

1.1 形状分类

Easy2D 仅提供了四种简单图形,分别是

  • RectShape 矩形
  • RoundRectShape 圆角矩形
  • CircleShape 圆形
  • EllipseShape 椭圆形

1.2 形状的使用方法

创建四种形状的方式分别为:

// 创建一个宽高为 (10,20) 的矩形
auto rect = gcnew RectShape(Size(10, 20));
// 创建一个宽高为 (10,20) ,圆角角度为 (40,20) 的圆角矩形
auto roundRect = gcnew RoundRectShape(Size(10, 20), 40, 20);
// 创建一个半径为 10 的圆形
auto circle = gcnew CircleShape(10);
// 创建一个半径为 (10,20) 的椭圆形
auto ellipse = gcnew EllipseShape(10, 20);

因为形状也是节点的一种,所以具备节点的所有性质,例如移动

// 创建一个宽高为 (10,20) 的矩形
auto rect = gcnew RectShape(Size(10, 20));
// 移动矩形到 (100, 100) 坐标处
rect->setPos(100, 100);

在这里我们的移动是

rect->setPos(100, 100);

(100,100)则是坐标

若我们需要移动到100,200,则代码如下

rect->setPos(100, 200);

前提是,你的窗口大小一定要大于100,200,这样才能出现在窗口中


1.3 填充与轮廓

接下来我们详细讲解如何使用填充和轮廓

1.3.1 理论

所有的形状都可以设置样式,样式包括以下三种:

  • 填充
  • 轮廓
  • 填充+轮廓
enum Style
{Solid,  /* 填充 */Round,  /* 轮廓 */Fill,   /* 轮廓 + 填充 */
};

Tip

  • 轮廓: 解释为构成图形或物体的外缘的线条
  • 填充: 解释为图形没有轮廓,中间实心
  • 轮廓+填充:结合1、2

1.3.2 实例使用

例如,设置一个形状仅显示轮廓,不显示填充颜色:

// 设置形状样式为,轮廓
shape->setStyle(Shape::Style::Round);

所有的形状都可以设置填充色和轮廓颜色

创建一个宽高为 (10,20) 的矩形

auto rect = gcnew RectShape(Size(10, 20));

设置填充颜色为红色

rect->setFillColor(Color::Red);

设置轮廓颜色为白色

rect->setLineColor(Color::White);

设置轮廓线条宽度为 2

rect->setStrokeWidth(2.0);

合起来如下:

// 创建一个宽高为 (10,20) 的矩形
auto rect = gcnew RectShape(Size(10, 20));
// 设置填充颜色为红色
rect->setFillColor(Color::Red);
// 设置轮廓颜色为白色
rect->setLineColor(Color::White);
// 设置轮廓线条宽度为 2
rect->setStrokeWidth(2.0);

二.对比EasyX图形库

C++/C还有一个可视化的非引擎,名为EasyX
他们都有Easy,让作者联想起他们的关联
由于作者两个都会,所以就拿过来对比一下

setbkcolor 设置当前设备绘图背景色。
setbkmode 设置当前设备图案填充和文字输出时的背景模式。
setfillcolor 设置当前设备填充颜色。
setfillstyle 设置当前设备填充样式。
setlinecolor 设置当前设备画线颜色。
setlinestyle 设置当前设备画线样式。
在这里插入图片描述


三.关于引擎的杂谈

两者区别不大,但是EasyX的更加全面,毕竟EasyX 是针对 C/C++ 的图形库的。所以EasyX的画图作用高于Easy2D
但是我们在编写游戏的时候,可以EasyX和Easy2D结合。博主以前写过一个程序,由于Easy2D的MessegeBox没有EasyX的功能,我就直接加入EasyX的库,将EasyX和Easy2D结合,这样就更好了
还有,如果我们在写项目的时候,也可以加入这两个库,对于我们Cpp写程序的时候有益无害
但是写题目的时候千万不要加入这两个库,因为我们很多的测试平台不会加上Easy2D和EasyX,这就和你写题目用Unity3D、虚幻等大引擎,编译错误一样的,区别不大
对于初学者,没有专门学游戏开发的Cpp学者,还是建议学一下Easy2D,这样可以拓展知识面,而Unity2D和虚幻等国际有名的大引擎,对于我们来说难度偏高,学入门所需要的时间不是一时半会儿的,所以我们用Easy2D拓展知识面熟悉一下引擎的样子,其实Easy2D和QT的区别也不会特别大,一通百通,学会举一反三即可。


关于命名

Easy2D 按照以下规律命名函数:

小驼峰式命名法则,第一个单词小写,后面的单词首字母大写,如Window::setTitle
所有函数均按照动词+名语形式命名,如Logger::showConsole
获取对象的属性值:get+属性名,如Node::getWidth
修改对象的属性值:set+属性名,如Node::setPos
获取对象的状态(bool值):is+状态名,如Node::isVisiable


总结

本节课主要是讲解了Easy2D引擎实现的教程,至此该课示例的思想博主已经真真切切彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!
原创不易,还希望各位大佬支持一下
点赞,你的认可是我创作的动力!
收藏,你的青睐是我努力的方向!
评论,你的意见是我进步的财富!
iecne


感谢每一个观看本篇文章的朋友,更多精彩敬请期待~( ̄▽ ̄~)~:
iecne的博客
若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

iecne

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4959.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Maven 3.6.0的下载安装和环境配置(详细图解+不限速下载链接)

标题工具/原料 apache-maven-3.6.0 下载地址 云盘不限速下载 或者进入官网按下图下载 方法/步骤一 安装 打开压缩包,将maven压缩包解压至软件安装处,建议D根目录或其他,记住安装位置 类似于 方法/步骤二 环境变量配置 变量 1.新建变…

Eolink 通过可信云权威认证,数据保护能力业内领先!

Eolink 正式通过由中国信息通信研究院组织发起的可信云评估考核,在数据安全保障领域获得权威认证,并荣获 “企业级 SaaS 服务” 认证证书。 在云时代,保护用户数据安全、预防隐私泄露是数字化企服厂商的重中之重。Eolink 作为一个 API 在线管…

计算机毕业设计ssm+vue基本微信小程序的个人健康管理系统

项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了小程序的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数…

IIC协议详解

文章目录1 IIC简介2 IIC物理层2.1 IIC硬件2.2 IIC协议特点3 IIC协议层4数据传输4.1 IIC写数据4.2 IIC读数据1 IIC简介 IIC(Inter-Integrated Circuit)总线是一种由 NXP(原 PHILIPS)公司开发的两线式串行总线, 用于连接微控制器及其…

s19.基于 Kubernetes v1.25.0(kubeadm) 和 Docker 部署高可用集群(一)

基于 Kubernetes v1.25.0 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成容器运行时 CRIKubernetes v1.25 新特性Kubernetes v1.24 之后不再支持 Docker 的解决方案Kubernetes v1.25 高可用集群架构基于 Kubernetes v1.25.0 和 Docker 部署高可用集群实战案例 …

Redis持久化机制分析

什么是持久化? 简单来说持久化就是将数据保存到磁盘,让即使服务宕机、重启、断电等操作后数据仍热存在,并且是完整的。 1、为什么要持久化? 1、Redis是一个内存数据库,宕机之后存储在内存的数据会消失。2、Redis重启…

传述最详细的干货,让简历面试不再成为你找工作的绊脚石

📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

【蓝桥杯省赛真题37】Scratch三国演义字数统计 少儿编程scratch编程蓝桥杯省赛真题讲解

​​​​​​​ 目录 scratch三国演义字数统计 一、题目要求 编程实现 二、案例分析 1、角色分析

Linux内核设计与实现 第三章 进程管理

3.1进程 实际上,进程就是正在执行的程序代码的实时结果。 进程是出于执行期的程序以及相关的资源的总称。 进程的另一个名字是任务。 进程不仅仅局限于一段可执行程序代码通常进程还要包含其他资源,像打开的文件,挂起的信号,内核…

springboot项目整理(持续更新)

SpringSecurity 1.导入依赖&#xff1a; 在pom.xml中导入依赖&#xff0c;再访问页面就会出现login&#xff0c;这是SpringSecurity自己写的页面&#xff0c;用于登录认证 <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

整合流量与资源的分享购商业模式,实现整个生态布局

大多数企业都很容易忽视一个市场&#xff0c;就是我们的日常生活服务板块&#xff0c;所谓民以食为天&#xff0c;我们应该顺应人们的生活习惯而做出来的电商商业模式&#xff0c;才是最贴合民心的&#xff0c;也能够从用户的最基础的需求出发来为其打造商业模式。 将目标放在生…

Room (三) RecyclerView 呈现列表数据

1. 用到的组件 Room&#xff0c;ViewModel&#xff0c;LiveData&#xff0c;Repository&#xff0c;AsyncTack 2. Module 中 build.gradle 文件中添加 dependencies {def room_version "2.4.3"implementation "androidx.room:room-runtime:$room_version&quo…

【Linux操作系统】-- 多线程(三)-- 线程池+单例模式

目录 线程池 场景 代码实现 线程安全的单例模式 懒汉实现方式和懒汉实现方式 饿汉方式实现单例模式 懒汉方式实现单例模式 实战代码演练单例模式 线程池 在C中用户使用new/malloc都是向操作系统OS申请的&#xff0c;在系统的角度&#xff0c;就相当于new/malloc在底层封…

MySQL之临时表

写在前面 本文一起看下MySQL的临时表。 1&#xff1a;什么是临时表 通过create temporary table t语句创建的表&#xff0c;就是临时表&#xff0c;临时表的临时体现在其是其生命周期是和会话一样的&#xff0c;当会话结束&#xff0c;即连接关闭时MySQL会自动将创建的临时表…

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求 离子液体(ILs)&#xff0c;是完全由离子组成的液体&#xff0c;可以进一步定义为熔点低于100C的熔盐。 离子液体是在室温或接近室温下可呈现液体的液态有机盐。离子液体因具有一些优良的特性使其在分离…

树的直径 树形dp+2次dfs

题目描述 给定一棵树 T &#xff0c;树 T 上每个点都有一个权值。 定义一颗树的子链的大小为&#xff1a;这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 输入描述: 第一行输入一个 n,1≤n≤105。 接下来一行包含n个数&#xff0c;对于每个数 ai,−10^5…

我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(下)

上一篇我们说了爆款内容的四大共性和底层逻辑&#xff0c;今天我们来看一看如何去设置标题、封面和剧情&#xff0c;实现视频的完播率。 第三个技巧叫内容高潮。 要在3秒钟之内让用户兴趣高涨&#xff0c;把这样的脚本写出来&#xff0c;怎么样去做&#xff1f;你要把特效、悬…

PCL 生成空间圆点云

目录 一、算法原理二、代码实现三、结果展示一、算法原理 三维空间圆形式如下: 三维空间圆的参数方程: { x ( θ ) = c

蚂蚁核心架构师内部Java并发编程进阶笔记,白嫖简直太香了!

并发编程作为Java开发者很重要以及非常核心的知识&#xff0c;我希望读者朋友具备以下的预备知识&#xff1a; 希望你不是一个初学者线程安全问题,需要你接触过Java Web开发、Jdbc 开发、Web服务器、分布式框架时才会遇到基于JDK8 ,最好对函数式编程、lambda 有一定了解采用了…

thinkphp使用dompdf导出pdf(html转pdf)

目录一 、安装二、安装字体&#xff08;解决无法输出中文&#xff09;三、使用3.1 示例3.2 入参声明3.3 调用声明四、总结一 、安装 命令行安装&#xff1a; composer require dompdf/dompdf下载 GitHub Dompdf库 二、安装字体&#xff08;解决无法输出中文&#xff09; 因…