godot引擎学习4
基本数据结构
1, SafeNumeric 安全数值类 原子操作
2, SafeRefCount 引用计数类,组合SafeNumeric类
3,mutable变量的值 ,某个常成员函数的调用次数时
4, next_power_of_2返回大于,并且是2的次幂,如输入17,返回32
5,CowData<T> 一个数组, 写时复制(copy-on-write),
指针前一个位置放大小,
前二个位置存放引用计数,采用定位分配空间 new(args) T
主要成员:
Error resize(int p_size);
Error insert(int p_pos, const T &p_val)
T *ptrw()
const T *ptr()
6 , CharProxy,Char16String,CharString,String类,主要是组合CowData<T>
特殊成员函数
float String::similarity(const String &p_string) const 相似度
uint32_t hash() const; /* hash the string */
uint64_t hash64() const; /* hash the string */
String md5_text() const;
String sha1_text() const;
String sha256_text() const;
xml特殊字符处理
路径判断等
7,List<>,Vector<>,Map<>,Set<>红黑树
RingBuffer<>环形缓冲区
ThreadWorkPool线程池
8,
alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。
Variant可变数据类型,有原子类型,数学类型,混合类型,数组类型
主要数据成员
union {
bool _bool;
int64_t _int;
double _float;
Transform2D *_transform2d;
::AABB *_aabb;
Basis *_basis;
Transform3D *_transform3d;
PackedArrayRefBase *packed_array;
void *_ptr; //generic pointer
uint8_t _mem[sizeof(ObjData) > (sizeof(real_t) * 4) ? sizeof(ObjData) : (sizeof(real_t) * 4)]{ 0 }; //字符串及其他类型
} _data alignas(8);
9,基本函数
CLAMP(m_a, m_min, m_max),如果小于最小值,返回最小值,如果大于最大值,返回最大值,否则返返回自己
10,SceneTree *sml = Object::cast_to<SceneTree>(main_loop);
return dynamic_cast<T *>(p_object);
dynamic_cast 用于在类的继承层次之间进行类型转换,它既允许向上转型(Upcasting),也允许向下转型(Downcasting)。向上转型是无条件的,不会进行任何检测,所以都能成功;向下转型的前提必须是安全的,要借助 RTTI 进行检测,所有只有一部分能成功。
向上转型时,只要待转换的两个类型之间存在继承关系,并且基类包含了虚函数(这些信息在编译期间就能确定),就一定能转换成功。因为向上转型始终是安全的,所以 dynamic_cast 不会进行任何运行期间的检查,这个时候的 dynamic_cast 和 static_cast 就没有什么区别了。
向下转型是有风险的,dynamic_cast 会借助 RTTI 信息进行检测,确定安全的才能转换成功,否则就转换失败。
系统相关类
1, Memory内存分配, DefaultAllocator分配器
2, (1)、std::mutex:该类表示普通的互斥锁, 不能递归使用。
其中std::mutex就是lock、unlock。std::lock_guard与std::mutex配合使用,把锁放到lock_guard中时,mutex自动上锁,lock_guard析构时,同时把mutex解锁。mutex又称互斥量。
(2)、std::timed_mutex:该类表示定时互斥锁,不能递归使用。std::time_mutex比std::mutex多了两个成员函数
(3)、std::recursive_mutex:该类表示递归互斥锁。
(4)、std::recursive_timed_mutex:带定时的递归互斥锁。
MutexImpl<>,MutexLock<>对上面封装
3,
std::shared_mutex用于管理可转移和共享所有权的互斥对象,适用场景比较特殊:一个或多个读线程同时读取共享资源,且只有一个写线程来修改这个资源,这种情况下才能从shared_mutex获取性能优势
shared_timed_mutex 类是能用于保护数据免受多个线程同时访问的同步原语。与其他促进排他性访问的互斥类型相反,拥有二个层次的访问:
共享 - 多个线程能共享同一互斥的所有权。
排他性 - 仅一个线程能占有互斥。
共享互斥通常用于多个读线程能同时访问同一资源而不导致数据竞争,但只有一个写线程能访问的情形。
shared_lock是read lock。搭配std::shared_mutex使用,被锁后仍允许其他线程执行同样被shared_lock的代码。
lock_guard和unique_lock是write lock。被锁后不允许其他线程执行被shared_lock或unique_lock的代码。
typedef std::shared_lock<std::shared_mutex> ReadLock;
typedef std::lock_guard<std::shared_mutex> WriteLock;
RWLock读写锁基类,对shared_timed_mutex 封装, RWLockRead,RWLockWrite
4, std::condition_variable
条件变量提供了两类操作:wait和notify。这两类操作构成了多线程同步的基础。
wait是线程的等待动作,直到其它线程将其唤醒后,才会继续往下执行,是堵塞函数
notify_one 唤醒等待的一个线程,注意只唤醒一个。
notify_all 唤醒所有等待的线程。使用该函数时应避免出现惊群效应。
Semaphore 用于线程同步
自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。
SpinLock,管理std::atomic_flag locked
5, Thread类
Thread::start(Thread::Callback p_callback, void *p_user, const Settings &p_settings)
{
std::thread new_thread(&Thread::callback, this, p_settings, p_callback, p_user);
thread.swap(new_thread);
}
调用std::thread thread;
6,OS类,虚基类
OS_Windows : public OS
主要成员:
HINSTANCE hInstance;
MainLoop *main_loop;
HWND main_window;
主要函数
open_dynamic_library
close_dynamic_library
get_dynamic_library_symbol_handle
execute(const String &p_path, const List<String> &p_arguments,
create_process(const String &p_path, const List<String> &p_arguments
void Run()
{
while (!force_quit) {
DisplayServer::get_singleton()->process_events(); // get rid of pending events
if (Main::iteration())
break;
};
}
7,文件访问类
class FileAccess 抽象类
class FileAccessCompressed : public FileAccess
class FileAccessEncrypted : public FileAccess
class FileAccessMemory : public FileAccess
class FileAccessNetwork : public FileAccess
class FileAccessPack : public FileAccess
class FileAccessZip : public FileAccess
class FileAccessUnix : public FileAccess
class FileAccessWindows : public FileAccess ACCESS_FILESYSTEM
class FileAccessAndroid : public FileAccess
FileAccess *FileAccess::create_for_path(const String &p_path) {
FileAccess *ret = NULL;
if (p_path.begins_with("res://")) {
ret = create(ACCESS_RESOURCES);
} else if (p_path.begins_with("user://")) {
ret = create(ACCESS_USERDATA);
} else {
ret = create(ACCESS_FILESYSTEM);
}
return ret;
}
8,各种各样的弹出对话框
9,新增导出类
一般在core_bind.h实现
godot定制开发 QQ 38454348
godot引擎学习4相关推荐
- godot引擎学习5
中文文档 https://docs.godotengine.org/zh_CN/latest/about/introduction.html 基础类 register_core_types 先调用,主 ...
- godot引擎学习6
项目管理器结构: 主要类ProjectManager 1,CanvasItem : public Node 任何2d的基类. void _draw ( ) virtual 调用(如 ...
- godot引擎学习10
调试进入进程, 进入方式 --path E:/G4WorkProject/SimpleDebug --remote-debug tcp://127.0.0.1:6007 --allow_fo ...
- godot引擎学习7
编辑器进程, 进入方式 D:\godot2\bin\godot.windows.tools.32.exe --path E:\G3WorkCode\Simple --editor E:\godot\b ...
- godot引擎学习9
游戏进入参数 D:\godot2\bin\godot.windows.tools.64.exe --path E:\G3WorkCode\SimpleDebug --remote-debug tcp ...
- Godot3游戏引擎入门之零一:【翻译】为什么要选择 Godot 引擎
前言 本文作为我的 Godot 系列文章的第二篇,是一篇翻译文作为 Godot 的优点说明吧,虽然文章发布于去年,但还是很有借鉴意义,翻译的不是很好请海涵! :smile: 作者简介:Rock Mil ...
- Godot引擎 4.0 文档 - 第一个 2D 游戏
本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正.英文原版页面: Your first 2D game - Godot Engine (stable) docum ...
- ue4 迁移模型_UE4虚幻引擎学习云笔记(六)-关卡设计入门-[5.地形快速入门]
[六.关卡设计入门(Level Designer Quick Start)] 19-09-29 UE4虚幻引擎学习云笔记(六)-关卡设计入门zhuanlan.zhihu.com UE4虚幻引擎学习云 ...
- velocity(vm)模板引擎学习介绍及语法
velocity模板引擎学习 velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,( ...
最新文章
- 《赢道:成功创业者的28条戒律》成都签售会魅力登场(背景)
- 为什么 C+标准每三年发布一次?
- 总结:一款Loading动画的实现思路
- opencv-api fitEllipse
- 平方取中法随机数函数
- java 15道经典,15道非常经典的Java面试题
- JavaScript的一些名词(持续更新中-取自javaScript高级程序设计)
- zendstudio13.6配置xdebug调试
- 计算机等级考试网络工程师介绍,全国计算机等级考试网络工程师
- 【已解决】win10+py3.6+anaconda3 安装fbprophet(利用安装包离线安装)
- 【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-7
- esp8266点灯LCD12864心知天气+农历+空气质量ArduinoJson6
- 开发webgl应用时,cesium快速定位相机角度、相机位置的方法
- python二级题库 第四套
- easy_nbt——Bugku
- myEclipse(MyEclipse)下VSS的安装和使用
- sw运行很卡怎么办_打开SolidWorks软件卡顿怎么办?教你完美解决
- iOS经典面试题之深入分析图像的解码渲染与基本原理
- ac3168无线网卡驱动下载_笔记本 及 普通PC 无线网络连接方法
- 在VISTA系统下使用IPX协议
热门文章
- 审阅模式中word保存不了
- 语音识别之前端处理及相关算法
- 逍遥模拟器 设置端口号
- #51CTO学院四周年# 感谢51CTO学院让我走出迷茫
- HTML5/JavaScript 图像边缘羽化— 打造图像处理类库第二步
- win10系统如何进入BIOS
- 安装Win10之后如何进入BIOS
- 将Hexo个人博客部署到个人云服务器--最详细踩坑教程
- 论文阅读 Learning Motion in Feature Space: Locally-Consistent Deformable Convolution Networks
- 理解 Serenity,Part-1:深度抽象