如果你还不了解Easy2D或者刚刚接触Easy2D,那么建议你前往Easy2D官网学习或者巩固一下自己的Easy2D基础概念:

        Easy2D 轻量级游戏开发框架 

也可以加入Easy2D群聊与群友一起讨论问题:

608406540


个人建议:

如果想要写出属于自己的游戏,一定要多练习写代码,熟能生巧。不要怕bug,有bug就修,不会就search。


原理:

绘画的本质就是画直线,不过是检测的次数多了,就可以实现曲线的效果了。


正文:

1、首先,我们先生成一个类:

2、将这个类取名为PrinterPen,以public方式继承Node类  (继承Node类是为了重载使用Node类内onUpdate函数,onUpdate每一帧都会被Easy2D调用)

3、修改包含文件

为了方便后面的顺利进行,我们包含easy2d.h头文件,并使easy2d名空间标准化

修改后的头文件如下:

#pragma once
#include <easy2d/easy2d.h>
using namespace easy2d;class PrinterPen :public Node
{
};

4、重载onUpdate

class PrinterPen :public Node
{
public:void onUpdate()override;
};

5、添加变量,前面的原理我们已经说了,绘画的本质不过是画线,但是,怎么才能确定直线的两点坐标呢?当前鼠标的坐标好确定,关键是另一个坐标,对了,另一个坐标就是上一帧鼠标的坐标,所以我们可以用lastPoint(Point)变量来储存每一帧鼠标的坐标。又有一个问题,第一次绘画时的坐标怎么确定,我们可以在第一次绘画时不绘制直线,只保存鼠标坐标即可。另外我们用isJustPressed(bool)变量来标识状态

class PrinterPen:public Node
{
public:PrinterPen();void onUpdate()override;private:Point lastPoint;bool isJustPressed;
};

6、完善.cpp文件

首先我们完成构造函数

#include "PrinterPen.h"PrinterPen::PrinterPen()
{lastPoint = {0,0};isJustPressed = false;
}

接下来实现onUpdate函数

void PrinterPen::onUpdate()
{//检测左键是否按下if (Input::isDown(MouseCode::Left)){if (isJustPressed){//创建Lineauto shape = ShapeNode::createLine(lastPoint, Input::getMousePos());//设置节点颜色为黑色shape->setStrokeColor(Color::Black);//获取当前场景并加入节点SceneManager::getCurrentScene()->addChild(shape);}//更新数据isJustPressed = true;lastPoint = Input::getMousePos();}else{isJustPressed = false;}
}

7、测试代码

在源.cpp文件中加入测试代码

#include <easy2d/easy2d.h>
using namespace easy2d;#include "PrinterPen.h"int main()
{if (Game::init("Printer",1200,800)){//Renderer::showFps();auto scene = gcnew Scene;SceneManager::enter(scene);auto pen = gcnew PrinterPen;scene->addChild(pen);Game::start();}Game::destroy();return 0;
}

8、优化代码

但是如果我们测试一下就会发现当鼠标左键按下且鼠标坐标不动时,仍在源源不断地生成节点,会严重影响性能,所以这个时候我们应该加入限制条件:

void PrinterPen::onUpdate()
{//检测左键是否按下if (Input::isDown(MouseCode::Left)){if (isJustPressed){//加入限制条件-------------------------if(Input::getMousePos() != _lastPoint){//创建Lineauto shape = ShapeNode::createLine(lastPoint, Input::getMousePos());//设置节点颜色为黑色shape->setStrokeColor(Color::Black);//获取当前场景并加入节点SceneManager::getCurrentScene()->addChild(shape);}}//更新数据isJustPressed = true;lastPoint = Input::getMousePos();}else{isJustPressed = false;}
}

这时我们再测试一次,完美!

9、Enjoy!


完整代码

Printer.h

#pragma once
#include <easy2d/easy2d.h>
using namespace easy2d;class PrinterPen:public Node
{
public:PrinterPen();void onUpdate()override;private:Point lastPoint;bool isJustPressed;
};

PrinterPen.cpp

#include "PrinterPen.h"PrinterPen::PrinterPen()
{lastPoint = {0,0};isJustPressed = false;
}void PrinterPen::onUpdate()
{//检测左键是否按下if (Input::isDown(MouseCode::Left)){if (isJustPressed){//加入限制条件-------------------------if(Input::getMousePos() != _lastPoint){//创建Lineauto shape = ShapeNode::createLine(lastPoint, Input::getMousePos());//设置节点颜色为黑色shape->setStrokeColor(Color::Black);//获取当前场景并加入节点SceneManager::getCurrentScene()->addChild(shape);}}//更新数据isJustPressed = true;lastPoint = Input::getMousePos();}else{isJustPressed = false;}
}

源.cpp

#include <easy2d/easy2d.h>
using namespace easy2d;#include "PrinterPen.h"int main()
{if (Game::init("Printer",1200,800)){//Renderer::showFps();auto scene = gcnew Scene;SceneManager::enter(scene);auto pen = gcnew PrinterPen;scene->addChild(pen);Game::start();}Game::destroy();return 0;
}

投票

你们希望我再出一期简单绘画的博客吗?请投出你手中珍贵的一票。

游戏引擎Easy2D-教程-简单绘画-蜡笔(基于版本V2.1.14)相关推荐

  1. Unity3D 游戏引擎之构建简单的游戏世界(三)

    Unity3D 游戏引擎之构建简单的游戏世界 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archi ...

  2. 【游戏引擎Easy2D】一篇打通引擎进阶类型,Keycode+MouseCode+Image

    [游戏引擎Easy2D]一篇打通引擎进阶类型,Keycode+MouseCode+Image

  3. 《Genesis-3D游戏引擎系列教程-进阶篇》6:动画

    2019独角兽企业重金招聘Python工程师标准>>> 注:本系列进阶教程仅针对引擎编辑器:v1.2.2及以下版本 脚本控制与分割动画 资源下载   工程文件 经过一些编辑器基本操作 ...

  4. 《Genesis-3D游戏引擎系列教程-入门篇》五:脚本

    2019独角兽企业重金招聘Python工程师标准>>> 注:本系列入门教程仅针对引擎编辑器:v1.2.2及以下版本 脚本系统 工程文件 这是Genesis-3D脚本系统的一个实例,使 ...

  5. 《Genesis-3D游戏引擎系列教程-入门篇》九:发布到移动平台

    2019独角兽企业重金招聘Python工程师标准>>> 注:本系列入门教程仅针对引擎编辑器:v1.2.2及以下版本 1.发布到Android平台 在游戏制作完毕后,需要进行平台打包才 ...

  6. 《Genesis-3D游戏引擎系列教程-进阶篇》10:动画融合

    2019独角兽企业重金招聘Python工程师标准>>> 注:本系列进阶教程仅针对引擎编辑器:v1.2.2及以下版本 地形高度图的导入 素材资源   工程文件 Genesis-3D编辑 ...

  7. Cherno_游戏引擎系列教程(1):1~16

    文章目录 1. Introducing the GAME ENGINE series! 2. What is a GAME ENGINE 3. DESIGNING our GAME ENGINE 4. ...

  8. 【游戏引擎Easy2D实战】选择关卡场景示例

    哈喽大家好,我是iecne,本期为大家带来的是CPP/C++游戏编写 -- 选择关卡场景示例 ,包教包会,快来看看吧! 本片文章所用到的是Easy2D引擎,快点赞收藏关注评论支持以下博主,蟹蟹 // ...

  9. 【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)

    在字体的显示和绘制中,Libgdx的作者(Mario Zechner,美国人)给我们提供了一个非常好用的工具 --Hiero,那么下面就来看看它具体的使用方法. 一.Hiero工具的使用 1.Hier ...

最新文章

  1. zynq学习05 Zynq 7000 emio的gpio操作
  2. 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论...
  3. 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理
  4. centos连接jupyter方法并安装jupytext插件
  5. Android之解决YouTubePlayerView启动在Android5.0左右的手机出现奔溃问题
  6. JVM调优总结(2):基本垃圾回收算法
  7. 如何在Java 8中使用LocalDateTime格式化/解析日期-示例教程
  8. 大学计算机课程考试系统C语言题库,《大学计算机基础》考试题库(含答案).doc...
  9. scipy.stats.norm
  10. MJRefresh的使用
  11. Golang 中 RSA 算法的使用
  12. 囚徒困境、价格大战与 iPhone 的价格
  13. Android---真机调试时不能识别手机的解决方案
  14. python3 使用冒泡排序法原理解析,简单易懂
  15. java开发spc分析软件,告诉你们什么才叫真的SPC软件?
  16. matlab 三对角矩阵 追赶法,计算方法追赶法解三对角矩阵方程
  17. axure原型素材模板-手机端蓝色科幻科技动态酷炫游戏大数据手机H5页面模板素材聊天
  18. html 语音识别输入法,9种外语语音识别 搜狗输入法成国内支持语种最多输入法...
  19. 如果我们遇上得州寒潮,会不会「悲剧」?
  20. Linux中有关文件的命令总结(查看、编辑、压缩、配置)

热门文章

  1. 相机光学(零)——分辨率测试
  2. 【论文解读--力控电机+四足机器人载体设计】(Cheetah mini)A Low Cost Modular Actuator for Dynamic Robots
  3. python编写网络防火墙_dnxfirewall:一款纯Python实现的下一代防火墙系统
  4. Qt学习总结之QFileDialog
  5. Mysql入门技能树-使用数据库
  6. Hi3798CV200 Datasheet01-基本信息
  7. Unity3d代码及效率优化总结
  8. C#中用Microsoft Agent为自己的程序创建精灵助手
  9. 独家!华为、腾讯齐聚香港,一起密谋着什么?
  10. 五杆机构正运动学公式、逆运动学公式MATLAB代码