请问这个Cpp源码应该怎么改正才对?

今天整理了下cppcheck的源码结构,为什么通过写一个个子文件就能够扩展cppcheck的功能呢?

看了下代码,并通过简化代码,略懂一二了。

    首先我们定义一个基类test.h,只定义一个头文件足够:

别人的永远是别人的,整理理解成自己的才永远是自己的,查阅复习也方便。

【1.1】项目/引擎/插件 目录


  • 变量名称前有一个额外的大写字母用于区分不同的类型和普通的变量名

  • 内容—— 包含一套来自UE4 核心编程的普遍存在类型,全部都是 #include"XXX.h"


  • 内容——虚幻所生成的所有反射数据都会放入到该文件当中
  • 作用——反射是指在运行状态下,任意一个实体类都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性
  • 含义——这种动态获取信息以及动态调用对象方法的功能称为语言的反射
  • 实现——C++本身并不支持反射。虚幻在C++上搭建了自己的一套反射机制。虚幻使用反射可以实现
    • 蓝图/C++ 通信和相互调用

  • 作用——收集信息,所有的U标记都会被收集处理。
  • 工作原理——UCLASS UFUNCTION UPROPERTY 这些宏就是参与这个阶段,当UHT 处理代码时,遇到这些宏标记,就知道接下来的代码需要进行处理。
  • 处理结果——生成 xxx.generated.h,注入内容。被定义为当前文件相对于工程根目录的路径,保证唯一。

  • 项目名称大写_API—— ModuleName_ API,可以理解为一个命名空间,避免类名冲突。

  • 作用——因为引擎为当前创建类所生成的代码太多,所以这里用宏简洁写出。编译的时候会把生成的代码替换到当前GENERATED_BODY()位置。

  • AShitActor()——默认构造函数,每次创建类的新对象时执行(即拖拽到场景当中变对象执行)
    • 想要被子类更改功能的函数,都被声明为虚函数。并让子类重写它们。
    • 如果没有声明为虚函数,说明这些函数的功能是不能被子类改动的。
    • (就类似unity不能改源码,unreal git clone 后可以让我们查看并重写它们)

    • PrimaryActorTick——将此Actor设为逐帧调用Tick(),如果不需要这个功能,可以关闭提高性能。
    • 理解——其实就相当于把蓝图这根Tick线断掉,Tick有实现函数,而这个就是判断是否连线。另外,看这个bCanEverTick,以b开头,就是一个boolean布尔变量,来true false的。

  • 注意事项——必须放在子类的构造方法中(成员方法不可以),即void AShitActor::BeginPlay() 同类名构造方法中。
  • 作用——调用这个函数之前会先调用父类里面的函数

【4.1】:头文件新增 静态网格体组件 指针

    • VisibleAnywhere,编辑器可见(要不然灰色显示不可改动)

需要注意的是它不是一个变量,它是一个指针,相当于蓝图中添加静态网格体组件变量。我们可以看下区别。

  • 注意AddComponent是直接在蓝图中生成组件,变量是只定义组件,未生成。

【4.2】:源文件新增

  • ShitMesh=xxx——把地址值给我们在头文件中声明的指针(跟蓝图Get Set一样)

  • 静态类中包含一个声明模板结构体
  • ConstructorHelpers 是 ObjectBase.h 中定义的特殊命名空间,是为资源或寻找引用、以及创建并寻找组件的助手模板。即查找资源地址,即从ContentBrowser资源浏览器当中查找资源并加载。
  • 如果资源不存在的情况,那么编辑器就会直接崩溃掉。

如果没有StarterContent的话,我们可以新添加。

我们还可以直接复制粘贴 引用网格体模型 的路径。

  • if Succeeded 防止崩溃——如果路径下有这么个资源的话,就把这个资源给到静态网格体并设置相对位置为 原点位置。

【4.4】Tick每帧执行函数:

这个就近似取sine函数的值了。

  • FVector就类似我们在蓝图变量面板里面声明一个Vector变量是一模一样的,Rotator一样。
  • 20.0f 其实就是一个 float factor,就我们蓝图中 加减乘除空出来的那个pin 引脚接口。

注意蓝图里面的Sine函数跟材质里面的Sine函数周期不一样,一个是2pi,一个是1

  • 高低循环往复运动,用GameTime(数值不断增大)配合Sine,不断地来回-1~1运动
  • 左右旋转运动,用Tick(数值较稳定),配合一个因子乘就可以了,0~360度自动旋转,到360也就是0了,继续重新开始转。

写成蓝图就是这个样子,蓝图得连半天,对于吾等强迫症来说,节点不对齐真的心里跟刀绞了一样,真想哪个剪刀把蓝图线给剪穿。()

简化后(跟代码不一样),高低跟着FPS 数值变。可以t.maxFPS 1 检测。


    • (1,2,3,4,5)为标号,注意不能重复,重复的那个屏幕上就会打印不出来
  • 右键Peek Definition可以在当前文件内速览定义。(不用新打开定义文件)
  • 我们使用Tab 键可以自动补全代码。
  • 注释变绿字儿:选定要注释的区域:ctrl+K,然后再ctrl+C。
  • 解注释变代码:选定要注释的区域:ctrl+K,然后再ctrl+U
  • F5 Debugging 是还带启动项目调试的。(修改完代码在解决方案中右键Games Build即可重新编译,第一次编译比较慢,如300多s,后面就快了,4s,5s就好了)

我要回帖

更多关于 改正马虎的办法有哪些 的文章

 

随机推荐