自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Muzzik的博客

三人行,必有我师焉

  • 博客(54)
  • 资源 (3)
  • 收藏
  • 关注

原创 Git常用命令注解

环境配置:ssh配置(推荐):https://jingyan.baidu.com/article/a65957f4e91ccf24e77f9b11.htmlssh配置(配图多):https://www.cnblogs.com/jinzhaozhao/p/10012504.html常用命令:git init 新建一个空的仓库git status 查看状态git add . 添加所有文件git commit -m ‘注释’ 提交添加的文件并备注说明git remote add origi..

2020-05-30 05:15:14 306

原创 【muzzik 分享】关于 MKFramework 的设计想法

而且自定义框架提供了构建 d.ts 的工具,

2024-04-16 17:09:40 717

原创 【muzzik 分享】3D模型平面切割

一年一度的征稿到了,倒腾点存货,3D平面切割通常用于一些解压游戏里,例如水果忍者,切菜这些,今天我就给大家讲讲怎么实现3D切割以及其原理,帮助大家更理解3D中的 Mesh(网格),以及UV贴图和法线由于和参赛帖另一篇文章主题相同,先自证一下这是存货本来想等 Store 审核通过再发,但是免得大家说我抄袭就先上了。

2024-04-11 10:34:13 918

原创 【muzzik 分享】原生预览调试!我给Cocos加了个新功能,原生开发者福音

一年一度的征稿到了,倒腾点存货,在之前阅读云风大佬文章的时候,发现他的引擎调试机制是在手机上实时刷新预览,而不是在PC上调试,作为一个 Cocos 原生开发者,我深有体会,主要有以下原因Creator 在原生只能达到大概 95% 的一致性例如多 Bundle 脚本引用顺序错误,龙骨/Spine闪退,渲染异常(极少发生)性能测试PC网页可以使用CPU降速达到原生大概的性能,但是并没有真机准确以及不能测试是否发热UI/交互设计。

2024-04-10 17:41:34 639

原创 Ts模块拆分

// 原模块// test.tsexport module test { export class1 {...}; export class2 {...};};//----------------拆分后// class1.tsexport class1 {...};// class2.tsexport class2 {...};// test.tsexport { class1 } from "./class1.ts";export { class2 } fro

2020-07-14 14:37:33 815

原创 C++模板使用记录

设置默认模板参数template<class T, typename = typename **这里写模板参数限制**>void func(T a) { // ...}模板返回类型限制// 这里限制了只能T只能为int和bool两种类型template<class T, typename = typename std::enable_if<std::is_same<int, T>::value || std::is_same<bool, T&.

2020-07-13 01:46:54 164

原创 C++ 左右值参数兼容, 让你的函数变得更为易用

这里可以模拟STL中的实现,自己改良了一下,让其可以返回值。template<class T, class... Args>T _func(Args&&... args_) { T data(std::forward<Args>(args_)...); return static_cast<T>(data);}test& func(test& data_) { return _func<test&>(da

2020-07-12 20:17:41 347

原创 C++ 右值使用技巧

延长将亡生命周期第一种方法:test get_t() { return test();}int main() { test t = get_t();}调用顺序: 构造第二种方法:test get_t(test&& a) { return a;}int main() { test t = get_t(test());}调用顺序: 构造 -> 移动构造 -> 析构备注: 这里之所以不能避免移动构造和析构个人猜测是因为不知道接收.

2020-07-12 20:10:40 169

原创 npm使用注解

安装项目所有依赖包:npm i查看项目依赖:npm ls安装指定包:npm i 包名备注:package.json中的dependencies和devDependenciesdevDependencies是开发时的依赖,上线打包时并不会出现打包进代码中,比如gulp相关的工具,只是用于开发阶段dependencies是线上运行时需要的依赖,打包时会被打包处理,比如angular、vue、vue-router等等,没有这些依赖,你的程序又怎么能跑起来呢。项目中做依赖处理的时候要注意,项目中依.

2020-07-11 03:02:23 255

原创 PS去除锯齿

复制图层0图层->魔棒选中图像->菜单栏->选择->修改->收缩(1-2)像素->反选->del删除1图层->魔棒选中图像->菜单栏->选择->修改->羽化(1-2)像素->反选->del删除修改0/1图层模式为叠加->选择两个图层->合并图层->完成...

2020-07-02 04:29:29 542

原创 PS中光芒四射游戏效果

PS中效果(加了黑色背景方便对比):游戏编辑器中实际效果:看到这里大家是不是很熟悉,只要加个循环旋转动画就能让它动起来了,哈哈那么来说下实现流程:#. 新建一个500*500透明图层(大小可以自己调整)#. 菜单栏->图层->新建填充图层->渐变->黑白渐变->点击左上角的小方块->调整不透明度为0->点击右上角的小方块->调整不透明度为80(也可以不调整右边,会更加明亮)#. 菜单栏->滤镜->扭曲->波浪->提示

2020-07-02 03:46:03 361

原创 JavaScript(ES 6)统计数组内符合条件数据的简洁方法

数组示例let users = [ {“name”:“张三”,“age”: 10},{“name”:“李四”,age: 14},{“name”:“王五”,age: 9},…]要求统计出数组里年龄大于10的人数。方法一:使用filter和lengthconst result = users.filter(u => u.aage > 10 ).length;方法二:使用reduceconst result = users.reduce((c, u) => u + (u.ag

2020-07-01 23:48:01 4257 1

原创 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。一次奇怪的错误

在release环境下,我的代码原本是这样:assert(WSAStartup(MAKEWORD(2, 2), &wsa) == 0);莫名其妙的出现的这个错误,结果我认真看了几次,发现vs直接跳过了这个函数的执行, 当时就傻眼了,知道release会优化,但是这样太变态了吧,assert断言内的函数语句不会执行。然后我改回了下面这样就好了int re = WSAStartup(MAKEWORD(2, 2), &wsa);if (re) { //错误处理}...

2020-06-07 11:06:29 5020

原创 最精简的sha1编码函数,还不快来试试?

······在网上很多sha1编码代码是臃肿且难以理解的。不过没关系,我的代码只有难以理解(滑稽)。创造期间参考了这位兄弟的代码,写的不错。······接下来大家可以试试我的代码。唯一的好处就是简洁,性能上还没和一般的对比过。大家可以试试:亮代码:void sha1(std::string& data_) { // 计算占用空间 uint32_t size, i, n; uint32_t len = static_cast<uint32_t>(data_.length());

2020-06-06 07:53:09 699

原创 C++ 死锁检测

······不想写注解了,认真点的人看代码和注释都能懂。第一版,还没优化性能。另外建议不要将死锁处理的代码镶入release版本之中,会影响性能。最好的办法是用来调试。在debug时先将出现死锁的地方排除。然后发布时去掉这个死锁检测系统,可以利用宏。······源码及使用代码都在下面了,命名和函数体都可以按照自己习惯进行重构。希望能帮到大家。如果觉得还行那就给个赞吧。struct test { CRITICAL_SECTION cri; test() { InitializeCriticalS

2020-06-02 21:04:47 2254

原创 关于AcceptEx函数

AcceptEx函数的第一个参数listen_socket和第二个参数accept_sock不能相同。并且第一个参数listen_socket必须开启监听,否则会返回10022错误。AcceptEx函数的缓冲区如果设为0字节,那么每次发到客户端将延迟10ms左右,底层原因。。如果收到连接请求,GetQueuedCompletionStatus函数的lpCompletionKey参数将是调用CreateIoCompletionPort绑定listen_socket到完成端口的第三个参数。...

2020-06-01 23:22:33 761

原创 C++判断是否为有效IP地址

std::string ip("199.199.199.199");std::regex check_ip("(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-

2020-06-01 06:06:28 1262

原创 C++ std::regex正则表达式

使用std::string str("123456");std::regex check("123");bool re1 = regex_match(str, check); //falsebool re2 = regex_search(str, check); //truestd::smatch result; //匹配结果if (regex_search(ip, result, check_ip))//这里用regex_match或者regex_search都可以{ fo.

2020-06-01 05:19:09 1520

原创 让VS的debug程序在其他电脑运行

······大家都知道,除非是安装了VS的电脑,不然在其他电脑上运行VS编译的debug程序就会显示运行时错误(0x0000…)这样的弹窗。其实这是因为没有debug的运行库导致的,那怎么查看运行时的dll呢。这也是我在调试程序时发现的。那就是利用dmp转储文件查看。······首先我们需要设置转储文件函数。这里请大家百度 C++生成dump文件。 然后在程序内手动抛出一个异常,使用throw即可。然后我们吧dmp文件拖到VS内,就会出现这个画面看到了吗?模块那里有我们运行时调用的所有dll。这下就简

2020-06-01 02:01:31 1804 1

原创 std::stringstream、std::istringstream、std::ostringstream有何意义?为何使用它们?

std::stringstream所能办到的事std::string也能办到,那它有何意义呢?······我在实际使用中发现,std::stringstream变量可以使用 << 输入数字类型。而std::string.append只能连接字符串。······所以用std::stringstream会更加便捷。std::stringstream的str()函数是返回的一个std::string临时变量,所以我们在使用过程中最好用一个std::string temp(std::stringst

2020-05-31 23:29:32 664

原创 error LNK1266: 读取检测文件“*.pgd”时出错;未找到文件

其实这是因为我修改了项目属性的原因。由于我胡乱操作,导致了error LNK1266错误,解决方案如下项目->属性->链接器->优化->链接时间代码生成改为 <从父级或项目默认设置继承> 这样就好了。...

2020-05-30 09:55:45 1660

原创 如何保证在多线程中对象的有效性?进来告诉你

大家一定在网上看过其他文章,都是说用std::shared_ptr,其实还有一种情况,就是在std::shared_ptr也销毁后的情况下调用对象的函数,这时候会直接抛出错误那么我们如何安全的使用一个对象呢,很简单,利用std::shared_ptr + std::enable_shared_from_this,如果我们在对象销毁后再调用对象成员函数 std::shared_from_this() 获取指针的时候就会抛出异常。起初觉得并没有什么用,用this访问其他成员也会报错啊。但是我转念一想,抛出异常

2020-05-30 00:40:34 208

原创 std::enable_shared_from_this有什么意义?进来告诉你

之前我一直不知道std::enable_shared_from_this有什么意义,官方的解答是传递自身的智能指针,但我也一直没用到,都是以第三者的身份管理和传递其他类型的智能但是,直到我看到了一篇知乎的帖子,上面是这么说的:需求: 在类的内部需要自身的shared_ptr 而不是this裸指针场景: 在类中发起一个异步操作, callback回来要保证发起操作的对象仍然有效.但是我自己测试了一下,对象销毁后再调用对象成员函数发现用std::enable_shared_from_this获取指针

2020-05-30 00:18:41 719 1

原创 C++利用模板推导数组长度

大家学会点个赞哦// 任意类型数组template <typename T, int N>int ArraySize1(T(&arr)[N]) { return N;}

2020-05-28 16:51:28 748

原创 std::shared_ptr的使用心得

如果要在一个lambda表达式中使用一个shared_ptr对象的话,不要使用 [&] () { 内部使用 } 这样的方式。因为捕获列表不会给shared_ptr增加引用数。就有可能导致我们使用的时候shared_ptr已经销毁了。正确的使用方式是 [] (std::shared_ptr& obj) { 内部使用 }, 然后再用std::bind函数绑定shared_ptr对象到lambda表达式 ,这样shared_ptr就会增加引用计数,我们之后使用也不会有问题了。...

2020-05-26 15:42:39 1024

原创 std::swap不是std的成员解决

其实swap的定义在utility头文件中,我们只需要 #include <utility> 就好了。

2020-05-25 23:02:05 1032

原创 C++用for遍历自定义类

正确的做法是像STL容器那样,创建一个迭代器类,然后里面重载 !=(比较), ++(递增),*(解引用) 这几个函数。例如:template <class T>class iterator {private: T* _data;protected:public: // 构造函数,传进迭代器管理的值 iterator(T* data_) : _data(data) {} bool operator !=(const iterator& that) { //

2020-05-24 22:26:35 2736 1

原创 C++ Sleep以及this_thread::sleep_for精度不够的问题

代码测试休眠5秒钟,一秒钟休眠一次测试,WaitForSingleObject函数的精度比sleep和sleep_for的精度提高10ms左右;WaitForSingleObject在等待的过程中会进入一个非常高效的沉睡等待状态,只占用极少的CPU时间片。使用代码:HANDLE eve = CreateEvent(NULL, FALSE, FALSE, NULL); while (WaitForSingleObject(eve, 超时时间(毫秒)) != WAIT_OBJECT..

2020-05-24 20:06:47 3602

原创 C++最大堆实现

max_heap.h#pragma once#include <cstdint>template <class T>class max_heap {private: struct node { uint32_t size; T* data; }; node* _heap; //最大堆 uint32_t _max_size; //最大存储数 uint32_t _size; //存储数 // 扩容 void expansion();

2020-05-24 01:37:11 347

原创 C++最小堆实现

mini_heap.h#pragma once#include <cstdint>template <class T>class mini_heap {private: struct node { uint32_t size; T* data; }; node* _heap; //最小堆 uint32_t _max_size; //最大存储数 uint32_t _size; //存储数 // 扩容 void expansion();

2020-05-24 01:35:47 404

原创 最小堆的指定删除

其实最小堆是可以指定删除某个节点的,包括最大堆。只要使用正确的方法伪代码:// 向下调整if (末尾节点key >要删除的节点key) { //这里就使用尾换头的方法调整,只不过把所谓的 "头" 换成了指定节点}// 向上调整else { //这里的逻辑比尾换头简单的多,也是我们删除指定节点重要的地方,向上调整 因为我们要删除的节点key >尾节点key,为了符合有序性的规则就必须将尾节点向上调整,调整方法也很简单:...

2020-05-23 23:51:58 1624

原创 C++基础数据类型最大值/最小值宏

包含#include <cstdint> 头文件后就能使用这些宏

2020-05-23 10:48:24 610

原创 VS设置生成后不跳转错误列表

调试>选项>项目和解决方案>常规>若在生成完成时有错误,则始终显示错误列表

2020-05-23 10:44:24 497

原创 Visual Studio 20xx 设置其他后缀的文件内语法提示

1. 打开VS, 点击右上角的齿轮按钮,点击选项进入选项后选择文件编辑器 -> 文件扩展名,添加扩展名即可效果图:

2020-05-15 23:21:32 188

原创 浅析std::string的append方法

string内部有多个append函数,我们就拿其中一个来说(基本原理都一样)。其中第一步中的if (_Count <= _Mypair._Myval2._Myres - _Old_size)可以翻译为如果(加入的字符大小<= 当前大小 - 已存在的字符占用大小) ,其内部直接就是将我们append的字符复制进的当前的数组内。第二步其实就很简单,重新创建一个满足需求大小的数组并将之前的数据和我们append添加的数据拷贝进去。那么创建的数组大小是多少呢,我们来看这个函数,这是第二部跳转

2020-05-15 05:09:53 5093

原创 关于inline的小知识

1. 要想实现inline函数必须将inline放在函数定义前,而不是函数声明前2. protected和public里的inline函数如果将定义放在了cpp文件中那么如果在其他源文件中使用此函数将会编译错误3. 最好将inline函数定义放在头文件中,某些inline private函数可以忽略...

2020-05-15 04:01:19 340

原创 减少锁竞争方法

1. 设置双重进入锁判断,例:bool enter = false;void test() { if (enter) { return; } mutex.lock(); if (enter) { return; } enter = true; mutex.unlock(); // 代码块.. enter = false;}第一次的判断可以防止在代码块执行的时间内其他线程频繁执行test函.

2020-05-11 02:55:58 281

原创 WSASend体会以及WSAENOBUFS错误思路

1. 无论投递多大的缓冲区它都是立即返回2. 返回成功只是表示将数据拷贝到了发送缓冲区3.GetQueuedCompletionStatus返回成功只表示发送成功,并不代表对方成功接收到数据4.WSAWaitForMultipleEvents 和 WSAGetOverlappedResult 同 3 类似个人结论:网上的宣称投递0字节WSASend并没有什么卵用。WSASend返回WSAENOBUFS不用理会,前提是你必须把发送缓冲列表里的数据放在GetQueuedCompletionStatu..

2020-05-10 05:27:58 691

原创 教你获取new出的数组大小

之前在网上没怎么看到获取数组大小的文章,现在给大家说一下自己的方法。首先,C++new出的数组或者对象C++都是知道其内存大小的,既占用字节,而这个占用字节在哪儿呢,没错,就在变量地址 - 4个int占用字节的大小 = 存放new对象的占用字节(仅在64位环境下测试,32位也可以试试)。那么知道这个就简单了。我们可以先获取到存放其占用字节的内存地址,内存地址 = (int*(对象指针)) -...

2020-05-07 18:15:16 4283 3

原创 C++线程安全的智能指针

smart_ptr.hpp#pragma once#include <cstdint>#include <memory>template <class T>class smart_ptr {private: T* _obj; uint32_t _count; void add(); void dec();protected:pub...

2020-05-04 05:31:35 807

iocp_tcp_example.zip

物超所值的IOCP_TCP服务器示例,内含一个简单的客户端,服务端已解决各种问题,不需要再去纠结资源释放,收发乱序,socket回收,send、recv出现的各种问题。如果有需要可以给我留言解决,如果出现未定义错误请把icc文件内容复制一遍,然后重新创建一个.h文件改名为原本的.icc,再把内容粘贴上去就好了

2020-06-10

Lua 5.3 参考手册

Lua5.3参考手册 需要的可以下载

2018-12-26

无法打开包括文件:“stdint.h”

fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的。 解决办法:下载文件之后将文件移动到include目录下 我安装的是VS2008,安装到的默认位置,因此include的路径就是: C:\Program Files\Microsoft Visual Studio 9.0\VC\include 通过以上方法,成功解决编译错误。

2018-12-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除