- 博客(53)
- 收藏
- 关注
原创 KCP技术原理
开源地址:KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,并以 callback的方式提供给 KCP。这里翻译一下,供参考。
2025-01-03 15:18:12 918
原创 UnityAPI:利器CullingGroup
本文介绍了Unity的CullingGroup API,用于实现高效的自定义遮挡剔除和LOD系统。CullingGroup通过将物体模拟为球形,并检测其与摄像机视窗的交集,通知应用层物体的可见性变化。示例代码展示了如何设置CullingGroup、绑定球体数组以及处理可见性变化的回调函数。该API性能优异,适用于需要频繁进行可见性检测的场景。文中还提供了效果展示的动画。
2025-01-14 15:46:55 298
原创 Unity WebGL:本机部署,运行到手机
简单介绍一下Unity WebGL的技术方案,在WebGL平台出包后,Unity的运行时C/C++代码是通过Emscripten编译成了WebAssembly/Wasm;图形部分使用WebGL做适配,目前Unity 2022默认出包WebGL 2.0版本,API对应OpenGL ES 3.0,功能基本可以匹配。Unity安装WebGL模块,切换平台后,就可以打包进行测试了。1. 因为ssl的证书是我们本地创建的,不被浏览器认可,如果弹窗安全提示我们选择继续访问。Win,安装OpenSSL,执行上述命令。
2025-01-14 11:59:38 583
原创 Unity Android AAB包GooglePlay上线备忘
本文档是关于XCity项目在Google Play上打包和上线的备忘。内容包括使用Unity生成AAB文件的方法,安装测试AAB文件的步骤,确保targetAPI Level为33,以及解决上传证书密钥强度太低的问题。具体步骤包括在Unity中勾选Build App Bundle选项,使用bundleTool生成和安装APKS文件,手动设置Target API Level为33,以及使用keytool创建2048位密钥的keystore。
2025-01-10 18:18:50 991
原创 清理Mac硬盘超大占用:.Spotlight-V100
如果你的Mac硬盘空间紧张,但是又找不到明显的占用文件,可以看一下这个隐藏文件夹的大小。它保存的是Spot light缓存信息,如果平时没有使用Spot light进行文件搜索的需求,那么完全可以把它删掉。它会非常大,占用了我的硬盘将近200G。但是,这个文件不能通过rm命令删除。
2025-01-10 18:11:10 467
原创 理解Unity脚本编译过程:程序集
本文介绍了Unity中C#脚本的编译过程。默认情况下,Unity按预定义的assembly规则分阶段编译脚本。通过定义宏可以实现条件编译,但在编辑器模式下需重新编译脚本。自定义assembly可以增强代码模块化和重用性。创建assembly的方法是使用Assets/Create/Assembly Definition,并在需要引用的文件夹内定义assembly definition reference。文中还提到类之间的引用和依赖关系。
2025-01-09 18:36:00 865
原创 .NET framework、Core和Standard都是什么?
本文介绍了.NET Framework、.NET Core和.NET Standard的概念。.NET是一个跨平台、开源的开发者平台,支持多种编程语言和应用类型。CLR是.NET的运行时环境,支持内存管理等核心功能。CLI是公共语言基础结构的标准,IL是.NET的中间语言。.NET Framework仅支持Windows,已停止新功能开发。.NET Core是跨平台的现代化版本。.NET Standard是API规范,确保不同.NET实现间的代码共享。
2025-01-09 18:30:18 1500
原创 数据结构:DisjointSet
Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做,Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合,用来确定两个元素是否同属一个集合等,是效率最高的常见数据结构之一。最近工作中制作一个模拟城市类型的游戏Demo,其中工业区和居民区之间需要有道路连通,两个区域才能发展,进行数值计算。使用Disjoint Set进行连通性测试,实现简单,性能绝佳。
2025-01-08 16:57:20 1082
原创 KCP解读:C#库类图
源码的核心类图,便于大家理解源码中的类型关系。作者做了很多接口、扩展的设计,核心逻辑定义在KcpCore部分,其他一些类可以进行重新、扩展。
2025-01-08 10:29:05 305
原创 KCP解读:拥塞控制
本文介绍了KCP协议中的快速重传和快速恢复算法。快速重传通过接收方发送三次重复ACK,发送方快速重传丢失的数据包。快速恢复算法在快速重传后调整拥塞窗口cwnd和慢启动阈值ssthresh,避免网络拥塞严重时的性能下降。具体步骤包括调整cwnd、重传丢失包、根据ACK调整cwnd等。文中还展示了KCP源码中相关变量和流程,如ssthresh、cwnd和nocwnd。
2025-01-07 13:37:39 1203
原创 KCP解读:滑动窗口
本文介绍了KCP协议中的滑动窗口机制。滑动窗口通过允许发送方在未收到确认应答前继续发送数据,提高了传输效率。窗口大小由接收方的处理能力决定,发送方根据接收方的窗口大小发送数据,避免接收方处理不过来。文中通过图示详细解释了发送方滑动窗口的工作原理,展示了已发送并确认、已发送未确认和未发送但在接收方处理范围内的数据部分。
2025-01-06 17:42:36 1274
原创 KCP解读:重传机制
本文介绍了KCP协议的重传机制,包括两种丢包情况及其处理方法。通过增加una字段,KCP实现了选择性重传,减少了不必要的重发。还介绍了快速重传机制,当收到三个相同的ACK报文时,提前重传丢失的报文段。文中提供了相关源码示例,解释了KCP如何通过una和fastack字段实现高效的重传机制。
2025-01-06 17:17:34 495
原创 KCP解读:基础消息收发
源码解读最基础的消息收发部分,这里以C#版本为基础讲解。kcp已经被port到很多语言和平台,它们都是C语言版本的移植,正常来说为了移植容易,保持一致性。方法、变量命名是一样的,区别不大。
2025-01-04 09:00:00 824
原创 Android应用程序签名
注:文章首次发布于个人博客,现将技术文章转移至此。 http://blog.go3k.org/android-sign/Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。Android系统仅仅会在安装的时候测试签名证书的有效期,如果应用
2014-12-26 23:12:45 3064
原创 cocos2d-x在iOS/Android双平台上嵌入WebView
注:文章首次发布于个人博客,现将技术文章转移至此。 http://blog.go3k.org/cocos2dx-add-webview/游戏中的帮助和游戏公告,可以通过嵌入显示WebView的方案来实现,通过编辑HTML来修改、更新公告的样式和内容都很方便。iOS平台嵌入iOS平台上的嵌入很顺利,网上有现成的教程加代码,关键是做好OC与C++代码混编的封装。 参考如下链
2014-12-25 17:03:41 11751
原创 游戏开发利器 TexturePacker
首先要赞一下TexturePacker的开发者Andreas LoewThanks very much for your free license.这是一个非常强的精灵纹理集处理工具:1. 自动为你加入的图片排放位置,自动计算整个sheet的尺寸。(2的指数倍)2. 可只使用高清Retina皮肤,自动生成缩小0.5倍的低分辨率纹理集。3. 最强大的地方,支持bash命令
2012-07-31 09:43:31 3440 2
原创 OjbC中NSObject面向对象特性的底层实现
#include typedef const struct objc_selector { void *sel_id; const char *sel_types;} *SEL;typedef struct objc_object { struct objc_class* class_pointer;} *id; typedef id (*IMP)(i
2012-03-19 18:16:38 12799
原创 引用计数+智能指针的自析构类 (一)基本实现
主要思路,对来值ref(refcount + 1),对去值deref(refcount - 1),这样不需手动做ref、deref操作就能合理的管理引用计数值。 以下是more effective c++中智能指针+引用计数的实现,它的组成为: 1. RCObject,引用计数类的基类,它封装了refcount +、- 操作ref()、deref()。无需其它额外操作。 2. R
2012-02-13 17:57:58 1437
原创 __FUNCTION__宏引发的字符串有关问题
今天想要用__FUNCTION__宏做打印输出,可是搞了半天和char*、char[10]、const char等等有关的问题。 把我搞糊涂了,可以用:format("function = %S", __FUNCTION__); 但是,我用了各种方法想要把__FUNCTION__值赋值到char相关的字符串上,但是怎么也不能成功。。。要细致的看一看。 这种情况应该果断做强转,
2012-02-13 16:03:42 1818
原创 设计模式入门学习 Facade外观模式
Facade外观模式:为子系统中的一组接口功能封装一个更上层的便捷的接口。使复杂的存在很多子系统的模块使用方便。 这个模式并不难理解,我做过的Libpng库到Symbian移植就应用了该设计模式。 定义一组Symbian的.h和.cpp文件,定义导出接口。C库图片解码的调用序列,封装到相应的接口中,编译成DLL。这样Symbian中使用时不必关心C库实现步骤如何,只需要按正确方式调用我
2012-02-13 14:33:08 583
原创 C++构造函数调用,自动类型转换
主要讲自定义类型中的自动类型转换原则。 class SomeTest {public: SomeTest(int i); virtual ~SomeTest(); }; 如上类型定义,有一个有意思的现象: SomeTest test = 5; 上面语句编译正常,不报错,为什么呢?? 原因很简单: 1. 编译器发现类型不匹配,需要做类型转换,先查查看看
2012-02-13 14:01:49 1854 2
原创 C++多重继承相关问题
多重继承的问题,首先想到多继承构造函数如何处理? Symbian下是可以一个C类多个M类多重继承的 C++中的多继承,构造函数处理并没有问题,对象构造的时候按照继承中声明的顺序调用多个父类的构造函数,析构函数同样遵守单继承中的原则。二意性问题 如果多基类中存在同名成员,会产生二意性的问题 比如,Root1类中声明DoAny()接口,Root2类中也声明了DoAny()接
2012-02-10 18:03:27 6343
原创 设计模式入门学习 Decorator装饰模式
需要补全 好容易混淆,觉得好多模式相比起来只是应用情境不一样,叫法就不太相同,但是实质上是很像的。 装饰(Decorator)模式:实现不改变类代码前提下,动态地给一个对象添加一些额外的职责。 举个很容易理解的例子: 有一个文本显示类,TextView,它只负责显示文本。没有实现其它逻辑,现在我们要对它加入ScrollBar,滚动条功能。 建一个ScrollDecor
2012-02-10 15:29:51 738
原创 Symbian DLL中可写静态数据问题 (二)DLL中实现单例模式
直接使用WSD的方式就不介绍了,和普通的单例实现一样。使用TLS的Singleton的典型实现。class CSingleton : public CBase {public: // 访问/创建Singleton实例 IMPORT_C static CSingleton& InstanceL();private: // 为了表示清楚,这些函数没有实现 CSingle
2012-02-10 14:05:04 816
原创 Symbian DLL中可写静态数据问题
可写静态数据在EKA1的DLL中是不允许的,因为EKA1中,DLL具有分离的程序代码和只读数据区域,没有可写数据的区域。 EKA2中,支持在DLL中使用可写静态数据,但不建议使用,因为从内存使用看它的代价很大。 本文只讨论EKA2的情况,对EKA1中的情况不做讨论。 正常情况下,如果在DLL中加入可写静态数据(如全局变量)当编译真机版DLL代码时,返产生编译错误"XXX.dl
2012-02-09 16:58:57 587
原创 符点数运算,值的精度问题
今天实际应用中还真遇到了有关浮点数精度的问题,下面为问题概括代码: float num = 1.15; float test = num * 100; int test1 = test; int test2 = num * 100; 能看出test1和test2的值之间有什么差别吗?它们的值分别是115和114,什么原因呢? 不同类型运算会自动进行类型
2012-02-09 15:53:52 1204
转载 Symbian编程总结-了解篇-活动对象正解(4)-异步函数的同步调用
转自:http://www.cnblogs.com/felixYeou/archive/2008/11/25/1340893.html 关键内容在第2和第3部分,这部分是如何进行异步转同步,了解即可。 在上一节里我们深入了解了活动对象、活动调度器及异步函数服务器的工作原理及运行机制,想必大家对活动对象的机制及体系结构的运用已经了如指掌。但是大家有没有觉得异步函数使用
2012-02-08 11:47:14 659
转载 Symbian编程总结-关键篇-活动对象正解(3)-活动对象的工作原理
转自:http://www.cnblogs.com/felixYeou/archive/2008/11/23/1339619.html在上一节里我们已经知道如何创建和使用活动对象,大家对活动对象的创建、使用都有了一定的了解。在这一节里我将深入活动对象机制,分为“活动对象的工作流程”、“信号迷失错误”两个部分,为大家剖析活动对象的工作原理。一、活动对象工作流程首先我们用时
2012-02-08 11:45:31 501
转载 Symbian编程总结-关键篇-活动对象正解(2)-使用活动对象
转自:http://www.cnblogs.com/felixYeou/archive/2008/11/23/1339205.html 第2部分和第3部分是系列文章的关键,着重理解。在上一节里我们已经大致了解了活动对象的基本概念,要使用活动对象机制,需要用到活动对象、活动调度器、异步函数。我们想使用异步函数,要按照应用程序->活动对象->活动调度器->异步函数的流程来使用。接下来
2012-02-08 11:42:56 573
转载 Symbian编程总结-基础篇-活动对象正解(1)-理解活动对象
转自:杨芹勍博客系列文章:http://www.cnblogs.com/felixYeou/archive/2008/11/20/1337334.html 深入浅出,总结的非常精彩!!Symbian OS中的活动对象的使用无疑是最基础的、最频繁的、最重要的。什么是活动对象呢?大家学习一个新的事物时,总是会将这个新的事物与自己认知的事物相比较,从而达到快速学习的目的。我开始
2012-02-08 00:06:53 443
原创 Symbian客户端/服务器框架结构
写一篇总结,来加深印象。Symbian OS内核和内存管理单元为每个进程实现不同的内存映射地址空间,同时防止无关进程重写另一个进程的内存。唯一能够“看到”整个物理内存的进程是内核进程自身。所有的线程都是内核服务器的客户,并且正是内核帮助进程和它们所包含的线程之间进行通信。 这段话让我有点恍然大悟,客户端部分的RSessionBase和服务器部分的CSession2可以理解是对Kerr
2012-02-08 00:05:49 609
原创 设计模式入门学习 适配器Adapter模式
Adapter适配器设计模式,主旨思想:通过一个Adapter来使不相关类的接口符合自己的需求。 可用2种方式实现: 1. 在Adapter中加入需要使用接口类的实例,再用该实例实现的Adapter的接口 2. Adapter多重继承逻辑抽象类和需要使用接口类,再分别实现Adapter的接口
2012-02-06 16:47:42 718
原创 IOS开发 对数据做文件存储
iPhone开发基础教程这本书介绍,常用的数据存储方式有三种: 属性列表,是指用基本数据结构如NSArray,NSDictnary等封装的writetoFile接口,把数据写入到plist,注意这种方式只支持基础数据类型,不多做介绍 对象归档(归档这个名字有点怪,是对archive的翻译),比较常用,主要对这种方式做个介绍。 SQLite3,个人认为不好用,不是特殊的应用情境也不
2012-02-06 15:04:44 4717
原创 IOS开发 NSLOG Format串含义
NSLog的格式如下所示:%@ 对象%d, %i 整数%u 无符整形%f 浮点/双字%x, %X 二进制整数%o 八进制整数%zu size_t%p 指针%e 浮点/双字 (科学计算)%g 浮点/双字%s C 字符串%.*s Pascal字符串%c 字符%C unichar%lld 64位长整数(long long)%
2012-02-06 14:33:36 2674
原创 设计模式入门学习 原型Prototype模式
创建型模式,需要多理解,现只明白用法,不能完全掌握适用情境。 为对象创建者传入一个对象做为原型,创建者通过拷贝这个对象来创建新的对象。
2012-02-06 11:13:45 543
原创 设计模式入门学习 桥接Bridge模式
主旨思想:逻辑部分用抽象类完成,具体的基础实现由实际类实现。抽象部分做桥梁作用,做为一个中转。多用于跨平台代码结构中,逻辑层用统一的类结构,平台层做真正的对应平台功能实现。
2012-02-06 10:39:34 2183
原创 设计模式入门学习 状态State模式
和策略模式比较类似,用法和适用情况稍有不同。 State对应操作的不同行为和不同操作,通过切换状态State来改变对象行为。
2012-02-03 10:58:46 444
原创 设计模式入门学习 享元(Flyweight)模式
享元模式 Flyweight:运用共享技术有效的支持大量细粒度的对象。 通过共享对象,来减小对象创建的数量,从而减少内存占用同时减少对象创建等开销,提高代码效率。 FlyWeight模式对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。例如: 文档编辑器可以为字母表中的每一个字符创建一个Flyweight,每个Flyweight存储一个字符代码,但它在文档中的位置和
2012-02-02 14:34:00 607
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人