【游戏引擎Easy2D】学C++还在面对黑框框?那是你没看这篇文,游戏引擎教会你

这篇具有很好参考价值的文章主要介绍了【游戏引擎Easy2D】学C++还在面对黑框框?那是你没看这篇文,游戏引擎教会你。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  •   🧛‍♂️iecne个人主页:点赞关注收藏评论支持哦~
  • 💡每天关注iecne的作品,一起进步
  • ✨一起学习内容专栏:C++保姆级入门教程  C++每日一题  C++游戏设计教程
  • 👉本文收录专栏:C++游戏引擎教程与实战
  • 🐳希望大家多多支持🥰一起进步呀!

 文章来源地址https://www.toymoban.com/news/detail-811109.html

目录

✨前言

坐标系和节点坐标

1)精灵

 2)坐标和锚点

1. 0.5,0.5测试 

 2.获取屏幕信息

3.居中显示

使用Visual Studio打开图片

1)文件夹的使用

2)在Visual Studio的使用

输出精灵(图片)代码实例

关于命名

总结


✨前言

哈喽大家好,我是iecne,本期为大家带来的是CPP/C++游戏引擎Easy2D教程 —— 精灵与坐标,包教包会,快来看看吧!

引擎支持 Visual Studio 2013 及以上版本,如果你使用的是较低版本的 VS,那么你需要考虑一下更新你的编译器了


坐标系和节点坐标

1)精灵

Easy2D 使用左手坐标空间,坐标系原点在屏幕的左上角,x 轴向右为正,y 轴向下为正。

为了研究 Easy2D 的坐标系,我们将一张图片复制到工程目录下,并把它转化为 精灵(Sprite)

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 使用下面的代码设计游戏内容,将图片的路径和文件名传入精灵的构造函数中,可以看到屏幕上显示了这张图片

// 创建一个场景
auto scene = gcnew Scene;
// 创建一个精灵
auto sprite = gcnew Sprite(L"图片名.png");
// 把精灵添加到场景中
scene->addChild(sprite);
c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

场景实例

 


 2)坐标和锚点

节点的Position (坐标) 代表了它在屏幕上显示的位置,节点的坐标由 x 和 y 两个值组成,x 坐标值越大,它在屏幕上的位置越靠右,y 坐标值越大,它在屏幕上的位置越靠下。节点的默认坐标为 (0, 0),也就是屏幕左上角。

节点的Anchor(锚点) 是一个重要属性,它相当于节点的 “把手”。有了中心点,你就可以 “抓着” 它移动这个节点,或者旋转它。

Node::setAnchor 函数用于设置节点的中心点,它需要两个 float 类型的参数,两个参数的取值范围都是 [0, 1],代表了中心点的位置。中心点一定在节点的内部,中心点设置为(0, 0)代表节点的中心点在它的左上角,(1, 1)代表中心点在它的右下角,(0.5, 1)代表中心点在它的底部的中心位置。

例如,下图是一个精灵在中心点分别为 ( 0.5, 0.5 ) 和 (0, 0) 时进行旋转得到的结果:

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

1. 0.5,0.5测试 

我们把刚才创建的精灵中心点设为 ( 0.5, 0.5 ) 进行测试

sprite->setAnchor(0.5f, 0.5f);

运行结果如下图所示,可以看到精灵的一部分被遮住了。这是因为精灵的默认坐标为(0, 0),也就是屏幕左上角,而精灵的中心点位置是图片的正中心,所以显示出的结果为 “精灵正中心的位置在屏幕左上角” 。

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

修改了中心点后的精灵

 2.获取屏幕信息

现在我们想完整地看到精灵,可以把精灵向右下方移动宽度和高度的一半,这样整个精灵就显示在屏幕中了。

Node::getWidthNode::getHeight函数可以获取节点的宽度和高度,如下所示

// 获取精灵的宽度
float width = sprite->getWidth();
// 获取精灵高度
float height = sprite->getHeight();

Node::setPos 函数用来直接设置节点在屏幕上的位置,它需要两个 float 类型的参数,分别表示节点的 x 坐标和 y 坐标。

// 移动精灵的位置
sprite->setPos(width / 2, height / 2);

3.居中显示

 节点的中心点为它的正中心时,如果把它的 x 坐标设置为屏幕宽度的一半,y 坐标设置为屏幕高度的一半,那么它将显示在屏幕正中央。

// 获取窗口宽度
float width = Window::getWidth();
// 获取窗口高度
float height = Window::getHeight();
// 移动精灵到屏幕中央
sprite->setPos(width / 2, height / 2);

运行后的效果如下图:

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D


使用Visual Studio打开图片

刚刚呢,我们主要讲解了如何去系统的使用,以及实际的位置,而接下来我们可以用Visual Studio来简单的P图

1)文件夹的使用

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D以VS2019为例子,我们点击创建新项目

 然后选择控制台应用,并且填写信息

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 

 等待生成了新项c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D目我们再看看,位置(L)中的文件夹

 

 打开文件夹,在文件夹里边放上自己的图片

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 比如作者加入了一张图片

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 并且命名为ooo

切记:图片名字一定要简单,图片多的时候要有规律,这样方便


2)在Visual Studio的使用

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 

点击这个图标,选择图片,便可以打开文件夹里的图片进行修改了

如下:

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 这样就可以打开了


输出精灵(图片)代码实例

#include <iostream>
#include <easy2d/easy2d.h>

using namespace std;
using namespace easy2d;

int main()
{
	if (Game::init())
	{
        /* 设计游戏内容 */
        // 创建一个空场景,记得不是new,用gc释放内存
        auto scene = gcnew Scene; 
        // 进入 scene 场景
        SceneManager::enter(scene);
        // 创建一个精灵
        auto sprite = gcnew Sprite(L"ooo");
        // 把精灵添加到场景中
        scene->addChild(sprite);
        //开始!
        Game::start();

	}
    Game::destroy();
    return 0;
}

首先看一段代码,规规矩矩有头有尾,创建了一个精灵,并且添加到了场景中

但是效果如下:

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 Warning: Load Image from file failed

意思是

警告:从文件加载图像失败

那么如何修改呢?

#include <iostream>
#include <easy2d/easy2d.h>

using namespace std;
using namespace easy2d;

int main()
{
	if (Game::init())
	{
        /* 设计游戏内容 */
        // 创建一个空场景,记得不是new,用gc释放内存
        auto scene = gcnew Scene; 
        // 进入 scene 场景
        SceneManager::enter(scene);
        // 创建一个精灵
        auto sprite = gcnew Sprite(L"ooo.jpg");
        // 把精灵添加到场景中
        scene->addChild(sprite);
        //开始!
        Game::start();

	}
    Game::destroy();
    return 0;
}

加上图片后缀,记住一定要看文件夹里的图片是怎么样的就怎么写上去

还是那句话

切记:图片名字一定要简单,图片多的时候要有规律,这样方便

看结果:

c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 


关于命名

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

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

总结

 本节课主要是讲解了Easy2D引擎实现的教程,至此该课示例的思想博主已经真真切切彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。

帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!

 

原创不易,还希望各位大佬支持一下

 

点赞,你的认可是我创作的动力!

 

收藏,你的青睐是我努力的方向!

 

评论,你的意见是我进步的财富!

 


  感谢每一个观看本篇文章的朋友,更多精彩敬请期待:iecne的博客_CSDN博客-C++保姆级入门教程领域博主

文章存在借鉴,如有侵权请联系修改删除!c++ 2d游戏引擎,【C++游戏引擎】,c++,前端,Easy2D

 

 

 

到了这里,关于【游戏引擎Easy2D】学C++还在面对黑框框?那是你没看这篇文,游戏引擎教会你的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(102)
  • 如何制作自己的C++游戏引擎

    你想了解更多关于游戏引擎的知识、并自己来写一个吗? 这可是非常牛皮的一件事。为了帮助你学习,这里有一些C++库和依赖项的推荐,可以帮助你快速上手。 游戏开发一直是我的学生学习更高级计算机科学主题的好帮手。我的一位导师Sepi博士曾经说过: “有些人认为游戏

    2023年04月08日
    浏览(28)
  • 如何使用现代C++特性构建游戏引擎

    游戏引擎是用来设计、开发和构建计算机游戏的软件框架。它们由一些基本的工具和程序构成,可帮助游戏设计师和开发者轻松地创建、管理和优化游戏。基本上,游戏引擎是实现游戏的所有技术的一个集合。 现代C++(指C++11、C++14和C++17)为游戏引擎的开发提供了强大的功能

    2024年02月05日
    浏览(32)
  • C++GameEngine深入探索:游戏引擎的C++技术

    作者:禅与计算机程序设计艺术 游戏引擎是一个复杂的软件系统,用于创建和运行各种类型的游戏。游戏引擎通常由多个组件组成,包括渲染器、物理引擎、音效、动画系统、UI 系统、脚本系统等等。游戏引擎的开发者需要熟悉这些组件的工作原理和设计模式,才能更好地构

    2024年02月16日
    浏览(29)
  • 规则引擎----easy rules

    将复杂的if else判断剥离出来 2.1、引入POM 2.2、编写规则 2.2.1、注解 2.2.2、表达式 2.2.3 yml配置文件 2.2.4 组合规则 2.2.5 组合规则说明 类 说明 UnitRuleGroup 要么应用所有规则,要么不应用任何规则(AND逻辑) ActivationRuleGroup 它触发第一个适用规则,并忽略组中的其他规则(XOR逻辑

    2024年02月13日
    浏览(30)
  • Easy-Rules引擎

    ​ 当代码需要多次进行 if/else 硬编码的时候,会导致代码的可读性大大降低,后期维护的成本增高。所以引入规则引擎,easy-rules是一个简单但是功能强大的 规则引擎 ,提供了以下特性: 轻量级 框架和易学习的API 基于POJO 的开发 支持从原始规则进行 规则的组合 支持表达式

    2024年02月03日
    浏览(26)
  • Easy Rules规则引擎(2-细节篇)

    在 Easy Rules规则引擎(1-基础篇) 中我们已经简单介绍了 Easy Rules 规则引擎的使用示例,这节我们详解介绍一下规则引擎的相关参数配置实例还有组合规则。 Easy Rules 规则引擎支持下面参数配置: 参数名称 参数类型 必选 默认值 rulePriorityThreshold int 否 Integer.MAX_VALUE skipOnFirst

    2024年02月11日
    浏览(30)
  • Easy Rules规则引擎(1-基础篇)

    最近团队在做一些 Visa 、 Master 卡的交易风控,运营团队提供了一些交易风控的规则,比如针对卡号MCC设置单笔交易限额,24小时交易限额,72小时交易限额等等,还有触发风控规则是否拦截交易还是只发告警邮件等等等。 虽然写各种条件判断也能实现,但是随着后面规则增加

    2024年02月12日
    浏览(25)
  • 规则引擎入门-基于easy-rules

    描述一个简单的处理: 基于一堆现实情况,运用规则引擎、经过处理得到对应的结果,然后再据此做后续的事情 。 fact: 事实,已有的现实情况,即输入信息 rules: 规则集合,由一系列规则组成,可能有不同的规则排列 rule: 规则,包含基本的判断条件和条件符合要做的动作。

    2024年02月07日
    浏览(28)
  • 规则引擎架构-基于easy-rules

    描述一个简单的处理: 基于一堆现实情况,运用规则引擎、经过处理得到对应的结果,然后再据此做后续的事情 。 fact: 事实,已有的现实情况,即输入信息 rules: 规则集合,由一系列规则组成,可能有不同的规则排列 rule: 规则,包含基本的判断条件和条件符合要做的动作。

    2024年02月08日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包