- 博客(218)
- 收藏
- 关注
原创 Blender 导入导出 mesh 格式(Ogre Mesh)
简介Particle Universe Editor 提供的 3D 粒子效果示例采用的模型格式是 Ogre mesh,为了能够进行编辑、修改转换,研究了一下相关工具。Blender 导出 mesh版本:Blender 2.8xhttps://github.com/OGRECave/blender2ogreBlender 导入 mesh版本:Blender 2.8xio_mesh_Kenshi下载地址:https://www.lofigames.com/phpBB3/viewtopic.ph
2021-06-01 18:14:00
12280
4
原创 Lua 大小写不敏感替换
local gisub = function(s, pat, repl, n) pat = string.gsub(pat, '(%a)', function (v) return '['..string.upper(v)..string.lower(v)..']' end) if n then return string.gsub(s, pat, repl, n) else return string.gsub(s, pat, repl) e
2021-05-20 17:10:04
1103
原创 Unity 获得 UI 控件所在的 Canvas
// 参考:https://forum.unity.com/threads/how-do-you-get-the-parent-canvas.311240/// 法1:得到一个 canvas,不确定在嵌套 cavnas 情况是什么反应GetComponentInParent<Canvas>()// 法2:得到顶层 canvasCanvas topmostCanvas = transform.root.GetComponentInChildren<Canvas>();/
2021-04-02 17:07:51
3972
原创 Unity 计算 UI 控件的包围盒(屏幕坐标)
// 以某一控件的左上、右下为例进行计算。Canvas canvas; // 自行赋值为控件所在的 Canvasvar rt = GetComponent<RectTransform>();var worldCorners = new Vector3[4];rt.GetWorldCorners(worldCorners);var bounds = new Bounds(worldCorners[0], Vector3.zero);for (int i = 1; i < 4;
2021-04-01 21:38:30
925
1
原创 Cocos2dx 3.10 Shader 使用示例
以下提供一个函数完成顶点着色器、片元着色器、GLProgramState 设置,方便进行快速测试。正式项目中应该合理保存到相应的文件并使用通用函数。function setupFXToNode(node) local vs = [[// 由 cocos2d-x-3.10/cocos/renderer/ccShader_PositionTextureColor_noMVP.vert 修改而来#ifdef GL_ESprecision lowp float;#endifattrib
2021-03-16 15:21:33
386
原创 Makefile 与 Shell 的函数定义对比(示例)
差异的根源:make 会把每行命令送到一个单独的 shell 里面。这样的格式 /bin/sh -ce "命令内容",所以,在 makefile 里面写复杂语法结构的时候要视为单行,用转义符和分号。具体举例如下:正常的 shell 代码:copyMk { s1=$(md5 -q $1) s2=$(md5 -q $2) if [ ${s1} == ${s2} ]; then echo "sth" else cp -rf $1 $2
2021-02-23 16:06:03
303
原创 Bezier 与 Hermite 描述直线的条件推导
Bezier 和 Hermite 都是三次曲线,只要解出令 2、3 次项的系数为 0 的参数值即可。解法如下,有解,故可以用 Bezier 与 Hermite 曲线描述直线。
2021-02-08 18:57:36
380
原创 Hermite 与 Bezier 曲线的转换公式
简介本文给出 Hermite 与 Bezier 曲线互转的公式及其推导过程。Bezier 曲线p(t)=p0B0(t)+p1B1(t)+p2B2(t)+p3B3(t),t∈[0,1]\mathbf{p}(t) = \mathbf{p}_0 B_0(t) + \mathbf{p}_1 B_1(t) + \mathbf{p}_2 B_2(t) + \mathbf{p}_3 B_3(t), t \in [0, 1] p(t)=p0B0(t)+p1B1(t)+p2B2(t)+p3B3(t)
2021-02-07 18:03:49
2143
1
原创 Python 利用上下文管理器实现 pushd
import contextlibimport os@contextlib.contextmanagerdef pushd(new_dir): previous_dir = os.getcwd() os.chdir(new_dir) try: yield finally: os.chdir(previous_dir)with pushd('somewhere'): print os.getcwd() # "somewher
2021-01-27 21:02:13
555
原创 项目文件无任何修改时 VS 反复编译的解决(以 Debug 正常增量编译,Release 版反复全量编译为例)
可能原因:打开了调试模式,却没有设置调试文件的格式。所以每次都为了生成调试文件而把所有文件重新编译。排查办法:打开诊断模式,这有助于精确了解为何 VS 对项目进行重新编译。步骤:工具–>选项–>项目和解决方案–>生成并运行,MSBuild 项目生成输出详细信息,设置为”诊断“。编译项目,仔细查看 VS 输出。查看 项目–>属性–>配置属性–>C/C+±->常规–>调试信息格式,发现是”无“,选成程序数据库(/Zi)。同时检查其他依赖项目的设
2021-01-18 15:38:03
1994
原创 Visual Studio 2013断点无效(源代码与原始版本不同)解决办法
此报错的原因根源在于调试的目标二进制文件与项目中加载的源文件不一致。可能的原因至少有:调试器调试的路径不对,调试的根本不是刚刚生成的 exe 文件;生成最新 exe 后,没把最新的 exe 拷贝的调试的路径下;未对代码生成调试信息文件,无调试信息可用。以下介绍针对以上可能的排查步骤:调试器目录是否准确。操作:项目–>属性–>配置属性–>调试,关注命令、命令参数、工作目录三项,要能正确指向最终生成的目标文件。最新 exe 生成后,是否正确拷贝到调试器目录。操作:项目–>属
2021-01-18 15:16:40
1370
原创 lua 标准库函数的实现的查找办法——以module函数为例
简介在使用 lua 语言时,有时会用到一些标准库函数,但是文档不够清楚或者搜不到官方的说明,此时就需要看一下源码、确认函数的作用。本文以 module 函数为例来说明查找的办法。查找办法首先,根据对 lua 源码的理解,我们知道 linit.c 负责内嵌库的初始化,具体是由 luaL_openlibs 函数调用来触发库的初始化。默认要加载的库是在 static const luaL_Reg loadedlibs[] 里面记录的。linit.c --> loadedlibs 数组 -
2021-01-18 14:03:00
560
原创 WSL 离线安装无法启动、提示“超时时间已过”/The service has not been started解决办法
现象WSL 安装的 ubuntu 2004.exe 长时间无法启动,最终提示超时时间已过解决办法不使用双击 appx 的方式安装,而是直接将 appx 解压,然后双击其中的 exe 文件来安装。例如 ubuntu 2004 就是对应于 ubuntu2004.exe,双击安装。之后可在 Windows Terminal 中看到新增的 WSL tab,也可以正常启动。参考WSL manual installation The service has not been started...
2021-01-05 22:08:14
4743
1
原创 Android.mk 函数定义与调用
与正常的 Makefile 的函数定义不一样,在 mk 文件中,函数是一个变量,相关语句基本上用 eval 执行。例如添加一个静态库的函数如下:# 定义一个用于存储库列表的变量MY_LIBRARIES :=# 定义 addLib 函数addLib = \ $(eval include $(CLEAR_VARS)) \ $(eval libName := $1) \ $(eval LOCAL_MODULE := $1) \ $(eval LOCAL_SRC_FILES
2021-01-05 10:27:59
1232
原创 SVN 命令行手动进入冲突合并
在解决 svn 冲突时,有时在冲突发生时退出了,本地留有了冲突文件。重新进入冲突解决状态,可以使用以下命令:svn resolve C状态的文件
2020-12-24 11:20:53
403
原创 GLFWError #65542 Happen, WGL: The driver does not appear to support OpenGL 问题解决
简介在使用远程桌面时,使用 opengl 的 exe 启动时会报错 GLFWError #65542 Happen, WGL: The driver does not appear to support OpenGL,无法正常启动。本文介绍针对这一情况的解决方案。方法访问 https://fdossena.com/?p=mesa/index.frag下载 32 位版本 Mesa3D for windows:https://downloads.fdossena.com/geth.php?r=mes
2020-12-21 17:19:30
22201
2
原创 Python Cheetah UnicodeDecodeError: ‘ascii‘ codec can‘t decode解决
打开 Cheetah/Compiler.py 文件,按以下注释划定的范围加入代码import sys# ...currentTime=time.time#....# 以下是添加代码reload(sys)sys.setdefaultencoding('utf-8')# 以上是添加代码# ....class Error(Exception): pass原因应该是要处理的代码有中文编码,添加此处代码后可正确处理。参考:UnicodeDecodeError: ‘ascii’ codec
2020-12-17 21:53:52
235
原创 C++ 将 lua table 读取为 std::map 的一种办法
前置要求lua51.dll 及相应的头文件。可参考Windows 下编译安装 Lua 5.3.5制作。lua53.dll 也可,相应修改链接库名称即可。文件-- 此文件保存为 test.luaGroundMaterialType = { BM_NULL = 0, BM_MUD = 1, BM_SNOW = 2, BM_SAND = 3,}GroundMaterialSoundEvents = { [GroundMaterialType.BM_NULL]
2020-12-16 22:20:04
741
原创 Lua 报错 PANIC: unprotected error in call to Lua API (no calling environment) 解决办法
问题表现lua_State *L = lua_open(); /* opens Lua */luaopen_base(L); /* opens the basic library */luaopen_table(L); /* opens the table library */luaopen_io(L); /* opens the I/O library */ <---- 这里出错。luaopen_string(L); /* opens the string lib. */luaope
2020-12-14 15:49:56
3694
原创 Cocos2dx lua 版本号查找方法
找到 cocos2dx\external\lua\lua\lua.h 文件,由其中的 LUA_VERSION、LUA_RELEASE 确定。例如:#define LUA_VERSION "Lua 5.1"#define LUA_RELEASE "Lua 5.1.4"则可以确定使用的是 lua 5.1.4.
2020-12-14 12:01:51
1186
原创 bat/cmd/shell/bash 遍历文件夹用工具把某种格式转成另一种格式
set rootPath=%1set currentPath=%~dp0set toolBin=somePathcd %rootPath%for /R %%f in (*.luac) do ( echo processing: %%f %toolBin% %%f %%~dpf%%~nf.yourExtension :: 符号含义:d 盘符,p 完整路径,n 文件名。)cd %currentPath%...
2020-11-17 15:00:43
293
原创 Unity Editor 中的 GL 线条绘制
// 参考 https://docs.unity3d.com/ScriptReference/GL.html// 绘制一个线框public class TestWindow : EditorWindow { private Material m_material; void OnEnalbe() { // 准备用于 GL 绘制的材质。 m_material = new Material(Shader.Find("Hidden/Internal-Colore
2020-11-16 11:18:23
1205
原创 Unity 在 Windows 下调用 bat 脚本、等待返回码,并且重定向的示例
// 调用,等待返回码,并且重定向输出using System.Diagnostics;var batPath = @"Assets\Plugins/Vendor/test.bat"; // 这里的路径分隔符风格似乎对结果没影响。var filePath = @"C:/Test/test.lua";var startInfo = new ProcessStartInfo() { FileName = batPath, // 要运行的文件 Arguments = $"\"{file
2020-11-12 14:40:31
678
原创 Cocos2dx 3.10 Windows 平台打包 APK 步骤
简介本文介绍Cocos2dx 3.10 Windows 平台打包 APK 步骤。使用的版本是:http://cocos2d-x.org/filedown/cocos2d-x-3.10.zip步骤以下给出关键库的下载链接,主要是设置一些环境变量,然后用 cocos 命令打包即可。请对应修改路径。以下在 cmd 中运行::: https://mirrors.gigenet.com/apache//ant/binaries/apache-ant-1.9.15-bin.zipset ANT_ROOT=D:
2020-10-14 20:53:34
696
原创 Cocos2dx 3.17 Windows 平台打包 APK 步骤
简介本文介绍Cocos2dx 3.17 Windows 平台打包 APK 步骤。使用的版本是:https://github.com/cocos2d/cocos2d-x/releases/tag/cocos2d-x-3.17对应 commit: 5c381d8下载:https://github.com/cocos2d/cocos2d-x/archive/cocos2d-x-3.17.zip步骤解压 cocos2d-x-3.17.zip。用 Android Studio(AS) 直接打开:co
2020-10-14 20:35:33
896
原创 svn 命令行提交特定文件/通过 changelist 提交文件
简介命令行 svn 提交文件时,直接 svn ci 会将所有 M 状态(modifiled)的文件都提交,需要通过 changelist 系列命令达到只提交特定 M 状态文件的目的。命令将文件加入 changelist格式是 svn changelist 名称 文件名称# 单个svn changelist fix-issue-237 foo.c # 递归加目录svn changelist fix-issue-237 --recursive path/to/directory将文件从 ch
2020-10-12 11:54:42
4761
原创 svn status 看不到 .a 文件和svn add . 没有添加 .a 文件原因和解决办法
问题表现svn status 看不到 .a 文件svn add . 没有添加 .a 文件原因这是 *.a 文件被忽略所致。在 ~/.subversion/config 里面有一个 global-ignores 配置,里面列出了模式 *.a。所以默认的 svn add . 是会忽略 .a 文件的。svn status 遵循忽略模式,看不到未添加到版本中的 .a 文件。解决办法单个.a 文件添加svn add filename.a批量添加 *.afind . -name '*.a' |
2020-08-13 14:24:30
1989
原创 Unity Driven 属性(代码控制属性)使用示例
文章目录简介示例备注简介本文给出 Unity 中 DrivenRectTransformTracker 属性的使用示例。示例public Sample : MonoBehavior { private DrivenRectTransformTracker m_Tracker; // 定义 private RectTransform m_Transform; void Update { m_Tracker.Clear(); if (m_Tra
2020-08-06 12:21:00
754
原创 TortoiseGit 的 SSH 配置原理解析
问题描述在配置 TortoiseGit 的教程中,我们经常可以看到为了配置 ssh key 而使用 puttygen 生成 key,然后再进行很多操作。而有时我们不做任何配置就能使用之前在 git bash 中配置过的 ssh key。原因分析Tortoisegit 使用 TortoiseGitPlink 作为默认的 ssh 客户端。而 PuTTY and TortoiseGitPlink ...
2020-01-03 12:20:42
1263
原创 cocos2dx 的 Repeat 函数的一种等效用法(lua 接口)
引子在使用多个 cc.RotateBy 来创建连续的旋转动画时,发现 Repeat 函数调用后,传入的参数是 3,却跑了 4 次。传 6 跑 7。传 9 跑 9。函数表现得比较奇怪,一时源码中又看不出 bug 所在。于是想到了利用 Sequence 做一个等效实现。实现办法local r = cc.RotateBy:create(0.1, 60)local xs = { r:clone...
2019-11-14 15:42:28
613
原创 conda 创建的绿色版 python 之 zerorpc 运行问题解决 (sys/un.h 找不到)
简介在利用 conda create 制作绿色 python 时,安装 zerorpc 包 import 遇到问题:“sys/un.h”: No such file or directory本文介绍此情况的解决办法。原因分析zerorpc 用到 zmq,是 zmq 找不到 dll 导致无法正常运行,故,简单办法就是把相应的 dll 复制过来。相应 dll 有两个,一个是 libzmq...
2019-11-13 15:48:46
1007
原创 conda 创建绿色便携版/绿色版/免安装版 python
简介本文介绍使用 conda 创建绿色便携版 python 的方法。此版本不但有 Python 的完整环境,还可带上指定的 python 包。方法利用 conda create 命令,指定输出目录和需要集成安装的 Python 包即可。脚本如下:@echo offset workingDir=%~dp0\..set pywinDir=%workingDir%\pywinecho "...
2019-11-13 15:30:53
7534
2
原创 在 cmd 脚本中使用 conda 的方法
简介本文介绍在 cmd 脚本中使用 conda 的方法。方法一把 Conda 的 Scripts 目录加入到环境变量中然后正常调用。方法二此方法不需要修改环境变量,使用这样的结构即可::: 保存为 test.bat@echo offset condaRoot=E:\anaconda3call %condaRoot%\Scripts\activate.batcall conda ...
2019-11-13 14:59:31
13930
1
原创 Lua 模块热更的一种典型实现
Lua 模块热更的一种典型实现原理主要是通过重载 require,然后匹配 require 接收到的模块名,对应清理 package.loaded 与 package.preload 的内容,再重新 require 来完成热更。单体实现__old_require = __old_require or require -- 这样写是避免做成 __old_require 反复嵌套requi...
2019-11-12 19:08:32
666
原创 the archive does not come from apple/压缩包不是来自 apple 问题解决
解压 Xcode_10.2.1.xip 的时候,提示压缩包不来自 apple。疑似这些压缩包的签名过期了。将系统时间向前调几个月即可。例如现在是 2019-10-29,调到2018-10-29就又能正常用了。根治的办法可能还是去苹果官网下载有最新签名的压缩包吧。参考:https://forums.developer.apple.com/thread/125108...
2019-10-29 17:17:03
2002
原创 Python 跨平台父路径写法
python 跨平台父路径写法本文介绍一种跨平台的 Python 父路径写法。可以避免硬编码时要考虑到的不同操作系统有路径分隔符的问题(/ unix, \ windows)。代码如下:# 参考:https://stackoverflow.com/a/14150750/4394850uppath = lambda _path, n: os.sep.join(_path.split(os.se...
2019-10-11 12:44:42
907
原创 Cocos lua 堆栈信息中路径太长被截取问题解决办法
此方法需要修改 lua 虚拟机实现,但是只需要修改一个宏定义即可。打开 cocos2d-x-3.10/external/lua/lua/luaconf.h找到 LUA_IDSIZE 定义,将其值 60 改为需要的值,例如 200重新编译项目/运行游戏即可。说明:这个宏控制 debug 信息中的路径信息的最大字符数,所以改大一些就能显示更长的路径。...
2019-08-19 17:35:19
808
原创 Xwiki 行内代码高亮格式修改方法
点到以下位置:administer wiki/Look&Feel/Themes/Color Theme/Customize/Advanced如图:加入以下代码/* xwiki 需要写 .monospace 用于显示, tt 用于编辑时 */.monospace, tt { border-radius: 5px; -moz-border-radius: 5px;...
2019-08-19 10:58:52
1156
原创 cocos/cocos studio/cocos creator/cocos2dx 的关系辨析
引子Cocos 相关名词较多,笔者在刚接触时感到比较疑惑,故在了解之后整理成本文。本文涉及到 cocos, Cocos2d-x, Cocos2d-js, Cocos Creator, Cocos Studio.目前(2019-8-14)官网产品页只写了两类:Cocos2d-x http://www.cocos2d-x.org/products#cocos2d-xCocos Creato...
2019-08-14 14:09:24
5800
原创 软件开发中的热更新概述
什么是热更所谓的热更新(本文中将其与热加载等同),就是运行时更新代码和资源。在主动热更新过程中,客户端向服务器发送请求询问是否有更新,若服务器告知客户端没有更新,就直接进入下一流程。但如果是告知有更新,那就会进入更新流程。按照约定下载指定的文件进行客户端内容的替换和更新。热更新也可以做成被动的,直接约定由服务器发送的某条消息触发热更流程。为什么要热更这里说的热更,包括开发时热更新以及产品...
2019-08-07 18:02:41
3849
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人