- 博客(206)
- 资源 (25)
- 收藏
- 关注
原创 捉虫(Bug)小记
,于是当游戏中一次同步包含大量玩家的时候,部分玩家就不会收到同步信息,于是便出现了问题(而一般的游戏流程中,基本不会触发上述的接口问题,而出问题的多人副本玩法本身比较特殊,所以容易触发这个问题).至此我不禁想起了多年前另一个让我印象深刻的 Bug,这个 Bug 的表现是玩家会在某个多人副本游玩过程中出现’卡死’情况,这里说的’卡死’并不是指玩家死机了,而是指玩家的游戏界面状态会和实际游戏状态不一致,继而导致玩家无法继续游戏,并且这个’卡死’是概率性的,本地测试时极难重现,线上环境也是偶尔重现.
2026-04-17 20:53:43
272
原创 浅尝一下 AI 游戏开发
网上 AI 一键生成游戏的案例一大把,自己平时工作中虽然也会使用 AI 工具,但大抵以辅助为主,完全放手让 AI 来生成一个完整游戏确实还没试过,所以决定简单尝试一下看看(娱乐为主) ~
2026-03-22 17:20:47
388
原创 来来来,让我们‘手搓‘一篇读后感 ~
摘要:这是一篇温馨的亲子共读记录。作者与孩子约定共读《尼尔斯骑鹅旅行记》并手写读后感。孩子的读后感充满童真,着重描写了尼尔斯从顽皮到乐于助人的成长;父亲的感悟则更为深刻,从成人视角反思现代生活的麻木,赞叹书中展现的广阔世界与真挚情感。两篇手写读后感虽然文笔各异,但都体现了阅读带来的思考与快乐。母亲部分暂时空缺,期待后续补全。这次亲子共读不仅增进了家庭互动,也让作者重新体验到手写文字的魅力。
2026-02-28 15:28:41
281
原创 简单理解万向锁
本文通过数学推导解释了万向锁(Gimbal Lock)的成因。欧拉角通过三个轴的旋转描述物体姿态,但存在旋转顺序问题。当Y轴旋转90°时,通过矩阵运算可证明外旋情况下,原本的三轴旋转会退化为二轴旋转,导致一个旋转自由度丢失。同时指出内旋同样存在万向锁问题,纠正了静态欧拉角不存在万向锁的常见误解。
2026-02-14 21:00:56
715
原创 闲聊游戏开发 : 一位老码农的自喃
至此,当前的游戏需求开发便告一段落了,只不过游戏需求的变动性非常之高,这也是游戏开发和其他程序开发最为不同的一点,无论是通过后期的游戏反馈,还是突然受到’某种启发’,亦或是突然的’灵光乍现’,之前确定好的游戏需求都会有所变化,甚至是推倒重来,于是乎上述所言的游戏开发循环便又开始了,不同的是,我们之前为此所付出的时间都实实在在的失去了,不再回来 …开发过程中如果我们发现功能表现不如预期,一般便会打上断点,单步调试,以期找到问题所在,这个便是我们常规意义上的程序调试,而我这里说的调试,其实是。
2025-12-30 15:33:35
722
原创 Sweet Snippet 之 指数函数优化
本文探讨了指数函数(pow)在正整数参数下的优化方案。作者首先实现了标准库调用版本,针对正整数参数特化出循环连乘版本(pow_uint_mul),经测试性能优于标准实现。随后尝试递归分治版本(pow_uint_recur)但因函数调用开销较大而放弃,最终改进为迭代分治版本(pow_uint_iter)。测试表明迭代分治版本性能最优但实现复杂,作者建议对于常规场景优先选择更简单可靠的循环连乘方案。
2025-05-27 20:49:49
283
原创 崩溃(Crash)简记
总结来看,对于容器遍历中的各类操作,一般我们应该都会了解一些相关的注意事项(譬如遍历中需要删除元素的话就不能简单的直接调用容器的移除操作,还需要保证后续迭代的正确性),但是如果代码涉及更深层次的调用逻辑,那么往往会让问题隐晦起来,这方面除了加强开发人员的认识以外, AI 代码检测工具应该是个更靠谱的方案 ~
2025-03-01 17:29:25
1321
原创 Sweet Snippet 之 计算 MaxSortedDistance
很久没有动手写博文了,原因能"编"出来很多,大抵都是些老生长谈的东西,不赘述了,今天也仅是兴盛所致写了一篇,希望以后能多写一些了,是为记.所谓 MaxSortedDistance,是指一个无序数组经过排序后相邻元素的最大差值.本文简述了 计算 MaxSortedDistance 的一些方法。但是排序数组的时间复杂度比较高,有可能进一步降低吗?代码简单直白,通俗易懂.
2023-11-12 16:45:32
294
原创 Sweet Snippet 之 PlayMode实现
其中 PingPong 模式的处理会有些特殊,但是了解了上面 Elapsed 的处理方式(PingPong 模式下)就容易理解了,有兴趣的朋友可以细看一下.作用就是处理浮点数的除法和取模(用以解决除零等问题)以及线性插值.本文简述了一种 PlayMode 的实现方式。
2023-04-20 20:58:53
976
原创 [译]Lua编程技巧
这个原则((YAGNI原则))和你计划在将来添加的程序特性有关,该原则是 “You aren’t gonna need it(你不会需要它的)” 的缩写.你不应该在需求明确之前添加新的程序功能或者程序特性,任何新的程序特性其实都会对程序的扩展性产生限制,所以一个不必要的程序特性很可能会影响到之后新增的一些必要的程序特性,并且当程序特性需求不明确时,我们也很难定义该程序特性实际的开发内容和测试方法.相比较复杂代码,简单代码往往更优雅,更不易产生Bug, 同时也更方便构建扩展,程序员之间也经常会提起这两个原则(
2022-06-04 21:24:29
403
原创 Sweet Snippet 之 最短增广路径算法
本文简单实现了最短增广路径算法首先我们简单实现 queue(队列) 数据结构 :local queue = {}queue.__index = queuefunction queue:push(val) table.insert(self.data, val)end function queue:pop() if #self.data > 0 then return table.remove(self.data, 1) endend.
2022-05-12 20:32:38
629
原创 Sweet Snippet 之 四则运算求值
本文简单介绍了一种四则运算求值的实现方法(基于语法分析)双栈算法可以实现四则运算的求值,但是扩展性比较低,更好的方式是基于语法分析来实现,整体大概包括以下几个步骤:词法分析语法分析语法树生成运算求值我们先来看词法分析:首先定义我们需要用到的词法类型:local token_type = { add = 1, -- '+' minus = 2, -- '-' mul = 3, -- '*' div = 4, -- '/' lbrace = 5,.
2022-01-28 14:17:26
789
原创 Sweet Snippet 之 大整数乘法
本文简单介绍了一种大整数乘法的实现方式当整数范围较大时,直接使用乘法运算符(*)很容易导致数值溢出,如果开发工作中确实需要处理这种大范围的整数,那么我们便需要实现一下大(范围)整数的乘法运算(一般方法便是将大整数表达为字符串,然后基于字符串来进行乘法运算).在实现大整数乘法之前,我们先来实现一下大整数的加法运算,朴素方法便是从低到高按位进行加法操作,并考虑进位的影响,代码大概如下(Lua):local big_int = {}local function digit_num(v) re.
2022-01-04 21:23:31
404
1
原创 Sweet Snippet 之 计算逆序数
本文简单介绍了几种计算逆序数的实现方法简介所谓逆序数,是指一个排列中所有逆序对的总数,而所谓逆序对,则是指排列中前后位置和大小顺序相反的数对,举个简单的例子:{ 1,4,2,3 }\{\ 1, 4, 2, 3 \ \}{ 1,4,2,3 }上面的排列中,有下面两个逆序对:<4,2> <4,3><4, 2>\ <4, 3><4,2> <4,3>所以该排列的.
2021-12-21 21:00:34
1067
原创 UE4 微笔记 之 调整网格材质参数
简单记录一下调整网格(Mesh)材质参数的方法修改网格材质参数一般有以下几个步骤:首先创建材质参数(这里有较详细的说明)创建动态材质实例(UMaterialInstanceDynamic)设置动态材质参数(通过 SetVectorParameterValue 等方法)以下是一段简单的代码示例:void SetMeshMaterial(UMeshComponent* MeshComponent, int MaterialIndex){ if (MeshComponent) { a.
2021-12-03 17:56:37
1240
原创 Sweet Snippet 之 骑士金币问题
本文简述了骑士金币问题的两种实现方法首先我们来看下什么是 骑士金币问题:骑士金币问题国王要用金币赏赐忠于他的骑士.骑士在就职的第一天得到一枚金币,接下来的两天(第二天和第三天)每天会得到两枚金币,接下来的三天(第四、五、六天)每天会得到三枚金币,接下来的四天(第七、八、九、十天)每天会得到四枚金币,这样的赏赐形式会一直持续下去,问题是给定一个天数(譬如第十天),求骑士将会获得的总的金币数量.举个简单的例子,如果给定第十天(NNN = 10),那么骑士将会获得的总的金币数量(CCC)为:C=1+.
2021-10-07 12:50:35
1031
原创 Sweet Snippet 之 PlayerPrefs for UE4
在 Unity 中进行本地存储,我们一般会用到 PlayerPrefs,而在 UE4 中,我们一般会使用 USaveGame,不过 USaveGame 在使用上和 PlayerPrefs 相差较大,这里给出一个 UE4 的 PlayerPrefs 实现,原理上仅是对 USaveGame 做了进一步的封装首先我们继承 USaveGame 创建 UPlayerPrefsSaveGame 类型#include "CoreMinimal.h"#include "GameFramework/SaveGa.
2021-08-17 19:46:49
413
原创 C++(UE4) Memory Management Review
以下是关于 C++(UE4) 内存管理的一点简单分享原始方式(Raw)malloc/free 是 C 中用于分配内存和释放内存的主要方式new/delete 是 C++ 中用于分配内存和释放内存的主要方式,除了内存管理之外, new/delete 还负责调用对象的构造函数和析构函数new[]/delete[] 是 new/delete 的数组形式比较重要的一点是, new/delete 等内存管理的调用一定要匹配,譬如调用了 new 就一定要调用 delete(而不能 不调用 delete.
2021-08-15 22:27:31
464
原创 Sweet Snippet 之 RingBuffer for UE4
本文简述了一种 环形缓冲区(ring buffer) 的实现方法环形缓冲区(ring buffer)在一些情况下非常有用, UE4 中提供了一个默认的实现 TCircularBuffer(代码较短,下面直接贴出完整源码):// Copyright Epic Games, Inc. All Rights Reserved.#pragma once#include "CoreTypes.h"#include "Misc/AssertionMacros.h"#include "Containe.
2021-08-10 20:32:41
485
原创 MiniGame 之 扫雷实现
本文是 扫雷(MiniGame) 的一个实现样例(使用 Unity/C#),主要以代码为主,辅以一点简单的注解实现样例中的扫雷实现主要是两个类型(BombGame 和 BombGrid),下面是完整代码:// desc bomb game implementation// maintainer hugoyuusing System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngi.
2021-07-18 16:15:41
341
1
原创 代码宏的一点小知识
本文是一篇关于宏定义的短文C/C++ 中我们可以定义宏来做一些代码的简化工作,一般我们不推荐使用宏,因为使用过程中很容易出现问题,目前有一些方法可以用来取代宏的部分功能(譬如内联函数),但是仍然有些宏功能现在还没有更可靠方便的替代方法,遇到这些使用情境的话,我们还是需要使用宏.宏的一个简单应用就是定义重复常量,譬如:#define MAX_COUNT 1024通过使用这种常量宏,我们可以较方便的维护代码中常量的变更.我们也可以定义参数宏,能够起到"模拟"函数等作用:#define MAX(.
2021-07-07 15:06:30
321
原创 UE4 微笔记 之 HitResult (持续更新)
UE4 中使用 FHitResult 结构来存储碰撞检测后的相关数据,在此简单记录一下该结构中各个成员的含义.FHitResult 结构对应于蓝图中有一个 Break Hit Result 节点,我们可以参照该节点来了解 FHitResult 中各个成员数据(为了便于理解,下面记录的成员数据顺序有所调整):Blocking Hit如果发生了碰撞则为 true, 否则为 falseInitial Overlap用于表示碰撞检测起始处是否与碰撞体发生了重叠, 发生了重叠为 true, 否则.
2021-06-20 07:25:54
5097
1
原创 编程小知识 之 range search
本文简述了 range search 的一些知识问题所谓 range search,是指给定一些数值范围(range)和某一数值,我们来搜索该数值所属的数值范围,譬如我们给定以下的数值范围:[0, 10] -> range 0[11, 50] -> range 1[51, 100] -> range 2给定的数值为 32,那么我们可以搜索得到 32 所属的数值范围为: range 1.实现如果给定的数值范围比较少,我们直接遍历搜索就可以了,代码大概如下:publi.
2021-04-09 20:33:11
964
原创 Sweet Snippet 之 Lua Utils
之前写过不少关于 Lua 的 Utils 代码,不少都挺实用的,但是平时使用中却又总是觉得零散,遂而收集整理了一个 repo,希望可以持续完善,有兴趣的朋友可以看一看,欢迎 PR ~以下内容仅为当前 repo 的 readme 内容,后面持续更新:lua utilsdescthis is a simple lua util functions collection for easy usage and intergrationfunction reference(TODO)table u.
2021-02-17 09:38:45
402
1
原创 编程小知识 之 Base64 编码
本文简述了 Base64 编码的一些知识简介在一些 支持可打印字符(而不(完善)支持其他字符) 的开发场景下(譬如原始的电子邮件中),为了能够传输存储二进制数据(广义上的非打印字符),我们需要一种将二进制数据转换为可打印字符的编码方式, Base64 就是这么一种编码方式.基础Base64 编码的步骤如下:将待转换的字节数组(即二进制数据)按每 3 个字节分为一组(共 3 x 8 = 24 bit(二进制位))将上述 24 bit 按每 6 bit 一组重新分为 4 组分别计算上面 4 .
2021-01-30 20:26:52
347
原创 Sweet Snippet 之 Lua readonly table
Lua table 用作静态配置是常见的使用情境,而用作静态配置的 Lua table 往往都有保持只读的需求,本文简单介绍了一些让 Lua table 变更为只读的知识 (代码基于 Lua 5.4)基础基础变更 Lua table 为只读的方法,在 《Programming in Lua》 中就已经给出了(这里),基本思路即是通过 __index 和 __newindex 两个元方法来做 table 的读写限制,代码大体如下:function readonly(t) local prox.
2021-01-19 19:41:10
432
原创 C++ 标准库の使用迷思
转眼 2020 已经过去,回顾来看总有些迷幻,新年之际,自己倒不打算写些什么年终总结,想想还是记一小篇技术小文: C++ 标准库的使用迷思.了解 C++ 的朋友对于标准模板库肯定不陌生,平日用 C++ 开发时基本也是离不开标准模板库的,举个最普遍的例子:当我们需要动态数组时,甚至于仅需要静态数组时,我们都会第一个想到 vector :#include <vector>std::vector<int> int_array;原因就在于使用 vector 方便且稳定,不用自.
2021-01-02 17:35:02
390
翻译 [译]寻路优化
看到一篇关于寻路优化的文章,简单翻译了一下,原文在这里译文并未照搬原文翻译,多处是意译原文图片已经失效,不过其他转载网址仍有图片,我对应着补了一下寻路对很多游戏来讲都是不可或缺的元素,在一般的游戏中,使用一些基本的寻路算法(譬如 BFS, Dijkstra 或者 A* 等等)就可以很好的解决寻路问题,但是在另一些游戏中,尤其是在游戏地图比较庞大的情况下,这些基本寻路算法需要耗费大量的时间进行寻路,进而造成游戏卡顿,这使得寻路优化变得非常重要.在这篇文章中,我会简单介绍一下 A* 算法以及该算.
2020-12-16 17:56:41
3180
5
原创 Sweet Snippet 之 统计二进制中 1 的个数
本文简述了几种用于统计二进制中 1 的个数的方法简介二进制中1的个数是汉明重量(Hamming Weight)的一种,广泛应用于二进制比较等操作中,举例来说,二进制 1011 的汉明重量便是 3,因为该二进制中总共包含 3 个 1.实现遍历最简单的实现方法便是遍历二进制的各个位,然后统计各个位中 1 的个数,代码实现的话大概是这个样子(Lua 代码(5.4),下同):function count_1_raw(val) local count = 0 while .
2020-10-28 11:34:58
343
原创 小记 TypeScript 中的循环引用问题
随着项目规模的不断增长,循环引用问题似乎总是不可避免,本文就 TypeScript 中可能出现的循环引用问题做了一些简单记录~平时编写 TypeScript 代码时,一般都倾向于使用模块(Module),通过结合使用 import 和 export 我们便可以方便的进行模块的导入和导出.举个简单的例子,假设我们有以下的 TypeScript 代码文件(A.ts):export class A { // methods here}可以看到,上述代码使用 export 导出了类型 A,如.
2020-10-09 19:43:24
8812
1
原创 Octave 笔记
简单用了一下 Octave,发现用他来进行数据运算、矢量绘制等操作的时候还是非常方便的,在此做一点简单笔记.注释% 或者 # 为单行注释# this is line comment% this is line comment%{ 与 %} 或者 #{ 与 #} 为块(多行)注释%{ block comment%}#{ block comment#}向量在 Octave 中我们可以直接创建向量,使用 空格 或者 逗号 来分隔列;使用 分号来分隔行.>&g.
2020-09-02 11:28:27
961
原创 简单聊聊 Perlin 噪声(下篇)
程序开发中总会用到随机方法,一般的随机方法虽然通用,但是产生的随机数又因为过于"随机",不适合用来生成平滑连续的随机数据(譬如自然地形的高度),这个时候我们便需要使用特殊的随机方法了, Perlin 噪声便是一种能够产生平滑(随机)数值的随机方法.Perlin 噪声理解了二维的 Value 噪声,我们就可以进一步来看 二维的 Perlin 噪声了.二维 Perlin 噪声的生成方式和 二维 Value 噪声的生成方式大体相同,二维 Perlin 噪声也是根据给定的坐标选取对应的正方形,并将该正方形.
2020-08-31 16:05:43
1131
原创 简单聊聊 Perlin 噪声(上篇)
程序开发中总会用到随机方法,一般的随机方法虽然通用,但是产生的随机数又因为过于"随机",不适合用来生成平滑连续的随机数据(譬如自然地形的高度),这个时候我们便需要使用特殊的随机方法了, Perlin 噪声便是一种能够产生平滑(随机)数值的随机方法.Value 噪声为了更容易的理解 Perlin 噪声,我们先从较简单的 Value 噪声看起:首先我们考虑 一维 情况(即通过一维坐标来获取随机值),如果我们仅使用一般随机方法的话,得到的随机数值是这样的:可以看到数据杂乱无章,远不能说是平滑连续,有.
2020-08-27 10:38:05
2055
原创 Lua 5.4 新特性概览
本文简单介绍了一些 Lua 5.4 的新特性Lua 5.4 正式发布了,很多朋友应该会比较好奇 Lua 5.4 与之前版本的区别,本文就此简单介绍一些 Lua 5.4 的新特性.完整的 Lua 5.4 变更列表可以在这里找到,本文我们仅简单概览下其中主要的几点变化:分代 GC之前 Lua 采用的是 分步 GC 算法来进行垃圾回收, Lua 5.4 加入了 分代 GC 算法,值得注意的一点是, Lua 5.4 仍然支持 分步 GC 算法(并且目前 分步 GC 算法仍然是默认的 GC 算法),我们可.
2020-07-08 14:35:36
6241
原创 ZeroBrane Studio 简易适配 Lua 5.4
本文介绍了 ZeroBrane Studio 简易适配 Lua 5.4 的一些细节Lua 5.4 已经到 rc4 版本了,相信不少朋友都已经有所尝试,最简单的测试方法应该就是手动编译一个 lua.exe,然后直接命令行执行脚本:lua.exe lua_script_path当然,使用 IDE 来编写测试脚本会更方便些,自己平时用 ZeroBrane Studio 比较多,不过最新版本的 ZeroBrane Studio 还没有直接支持 Lua 5.4 脚本的运行和调试,自己简单尝试适配了一下,发.
2020-06-03 20:07:30
1112
Mastering the C++17 STL.zip
2019-09-14
The Modern C++ Challenge.zip
2019-09-14
C++ Concurrency in Action.zip
2019-09-14
Mastering C++ Multithreading.zip
2019-09-14
Optimized C++.zip
2019-09-14
Effective.Modern.C++.zip
2019-09-14
The C++ Standard Library A Tutorial and Reference (2nd Edition).zip
2019-09-14
C++17 STL Cookbook.zip
2019-09-14
Modern C++ Programming Cookbook.zip
2019-09-14
Beginning C++17 From Novice to Professional, 5th edition.zip
2019-09-14
Professional C++ 4th.zip
2019-09-14
Discovering Modern C++ An Intensive Course for Scientists.zip
2019-09-14
C++17 Quick Syntax Reference.zip
2019-09-14
2013 Stroustrup - The C++ Programming Language 4th Edition.zip
2019-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅