游戏开发
CoderHustlion
这个作者很懒,什么都没留下…
展开
-
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 · 12968 阅读 · 4 评论 -
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 · 430 阅读 · 0 评论 -
Bezier 与 Hermite 描述直线的条件推导
Bezier 和 Hermite 都是三次曲线,只要解出令 2、3 次项的系数为 0 的参数值即可。解法如下,有解,故可以用 Bezier 与 Hermite 曲线描述直线。原创 2021-02-08 18:57:36 · 406 阅读 · 0 评论 -
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 · 2211 阅读 · 1 评论 -
Visual Studio 2013断点无效(源代码与原始版本不同)解决办法
此报错的原因根源在于调试的目标二进制文件与项目中加载的源文件不一致。可能的原因至少有:调试器调试的路径不对,调试的根本不是刚刚生成的 exe 文件;生成最新 exe 后,没把最新的 exe 拷贝的调试的路径下;未对代码生成调试信息文件,无调试信息可用。以下介绍针对以上可能的排查步骤:调试器目录是否准确。操作:项目–>属性–>配置属性–>调试,关注命令、命令参数、工作目录三项,要能正确指向最终生成的目标文件。最新 exe 生成后,是否正确拷贝到调试器目录。操作:项目–>属原创 2021-01-18 15:16:40 · 1417 阅读 · 0 评论 -
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 · 1292 阅读 · 0 评论 -
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 · 307 阅读 · 0 评论 -
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 · 627 阅读 · 0 评论 -
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 · 5892 阅读 · 0 评论 -
在 Windows 系统下 JavaCC 的 Docker 镜像制作与运行方法
在 Windows 系统下 JavaCC 的 Docker 镜像制作与运行方法简介本文介绍如何制作一个可运行 JavaCC 的 Docker 镜像及该镜像的使用办法。环境准备笔者使用的是 Win10(版本1803)。先下载好 Docker for windows 并安装,安装时选择 Linux Container。首次启动时会提示开启 Hyper-V,按提示开启即可。注意,开启 Hyp...原创 2019-07-17 10:14:09 · 360 阅读 · 0 评论 -
Lua 基于组件的对象系统设计与实现
Lua 基于组件的对象系统设计与实现简介MMO 中主角色属性、功能特别多。Character 类可迅速达到上万行的体量。笔者参考《饥荒:联机版》代码的角色实现,发现各种功能特性是以组件的形式添加到主体上的。使得功能组件非常清晰,复用性也很好,逻辑不会全部堆在一起,方便维护。类似以下形式:inst:AddComponent("inventoryitem")inst.components.i...原创 2019-07-18 14:43:58 · 979 阅读 · 0 评论 -
Lua LINQ 快速上手
Lua LINQ 快速上手什么是 LINQLINQ (Language Integrated Query)就是语言集成查询。Lua LINQ 库选择笔者现在找到了两种实现。一种是 xanathar/lualinq,使用说明:手册另一种是 Henkoglobin/lazylualinq。小数据量情况下(10个元素), xanathar 的 lualinq 的性能好低,笔者简单测试发...原创 2019-07-10 15:23:03 · 833 阅读 · 0 评论 -
基于 Rx 和 curry 的延迟调用队列在 Lua 中的实现
基于 Rx 和 curry 的延迟调用队列在 Lua 中的实现简介本文是基于函数式编程 curry 概念的 Lua 函数调用暂存机制 的泛化包装,提高了通用性。此实现利用了 ReplaySubject 在 subscribe 时会把所有消息重放的特性。主要用法:-- 引用库require('delayedInvocationQueue')-- 创建对象。fn: 是否调用真正对象的判断...原创 2019-07-10 14:14:33 · 667 阅读 · 0 评论 -
Cocos 检查 Lua 文件是否存在
以下函数可以用 require 的路径格式来检测 lua 文件是否存在:local function isLuaModuleExist(moduleName) local convertedModuleName = moduleName:gsub('%.', '/') local path = 'src/'..convertedModuleName..'.lua' return cc...原创 2019-07-09 22:11:12 · 1449 阅读 · 0 评论 -
Lua 自动属性实现
Lua 自动属性实现在 MMORPG 游戏中,玩家具有非常多的属性,有多数情况下这些属性都是从服务器获取然后不需要经过运算即可展示。在项目规范较好的情况下,不会直接取用存储的数值而是使用 getter, setter。但是这些没有额外逻辑的 getter setter 写起来很麻烦。所以笔者利用 lua 灵活的机制实现了一个简单的自动属性特性。具体如下。实现使用时将要自动生成的属性传给...原创 2019-07-09 11:59:48 · 1538 阅读 · 0 评论 -
Unity UGUI 血条实现
本文目标在 Unity 中使用 UGUI 制作角色血条,实现血条跟随玩家模型的效果。 通过使用动态加载的 Slider,动态计算目标模型的头部位置世界坐标在屏幕空间的对应点位置来实现。另外一种实现是使用 World Canvas 将血条直接绑定到玩家模型上,对此实现方法本文不作描述。软件版本Unity 2018.1.5f1 Personal (64bit)Visual S...原创 2018-08-14 16:21:08 · 6823 阅读 · 0 评论 -
Unity 摇杆功能的 UGUI 实现
本文目标在 Unity 中使用 UGUI 实现摇杆功能,并将此摇杆模块化以提高其通用性。软件版本Unity 2018.1.5f1 Personal (64bit)Visual Studio 2017思路基于 UnityEngine.UI.ScrollRect 来实现摇块。 ScrollRect 是矩形的,要实现圆形的摇动区域,可通过代码设定摇块可移动半径来实现。...原创 2018-08-13 14:16:56 · 4959 阅读 · 1 评论 -
显示文件名与行号、多等级、多输出打印、支持循环表的 Lua 打印器模块实现
模块简介本文提供一款在 Lua 中实现的显示文件名与行号、多等级、多输出打印、支持循环表的打印器模块。此模块主要参照《饥荒:联机版》 Lua 源码改写完成,在此表示感谢。环境Lua 5.1.5模块特性支持多种输出级别,比如 Error Warning, Info支持所有 Lua 类型,包括循环表支持输出到多个目标,例如同时输出到终端及某个集合中(例如饥荒的游戏内控制台)支持显...原创 2018-09-19 10:58:22 · 1010 阅读 · 0 评论 -
在 Lua 中实现类似于 Swift Extension 的机制
本文目标本文在 Lua 中实现类似于 Swift Extension 的机制,使得在不改变类继承关系、不进行重复代码实现的前提下,实现一些函数的复用。主要作用是减少代码重复。主要思路是在运行时将作为 extensionClass 的表的元素依次拷贝到目标类中。软件版本Lua 5.1.5代码遍历扩展类/表,将其中的对象依次拷贝到目标类中。具体实现如下:function extendC...原创 2018-09-25 16:31:41 · 446 阅读 · 0 评论 -
Unity Image.sprite 与 Image.overrideSprite 的区别
Unity Image.sprite 与 Image.overrideSprite 的区别Override sprite is for it you want to quickly set a image without changing the original. If you want to change something on a permanent basis use sprite....原创 2018-10-11 11:59:32 · 7250 阅读 · 2 评论 -
Unity Mecanim 动画播放延迟问题解决
问题描述Unity 的 Animator 配置的 Animation Controller 中,通过变量来控制动画状态转换时,变量修改了但是有一定延迟才会播放对应的动画。分析idle 是有一个循环动画的,在这段动画播放的中途改变变量,需要等待这段动画播放完才会切到下一段。解决取消勾选 idle -> ready 的 transition 的 Has Exit Time ,这样在对...原创 2018-10-11 17:04:43 · 2092 阅读 · 1 评论 -
Unity 2018.2.5f1 单元测试简介
简介本文目标是在 Windows 环境下为 Unity 进行单元测试以提高代码质量、稳定已完成特性和固化已经完成的 bug 修复方案。Unity 中的测试工具是 Unity Test Runner, 它基于 NUnit,并增加了 UnityTestAttribute 以提供跳过当前帧的功能,这对于涉及到 Update() 等生命周期函数的测试非常有用,例如 GameObject 的运动测试。...原创 2018-10-08 17:05:11 · 5081 阅读 · 6 评论 -
Lua 数组 append (给数组添加元素)
用 table.insert 方法:foo = {}table.insert(foo, "bar")table.insert(foo, "baz")参考:怎么给数组追加元素?Lua 数组How do I append to a table in Lua原创 2018-10-31 11:40:35 · 27186 阅读 · 0 评论 -
浅谈 Vim
从初次接触 Vim 到现在也有三四年了,已经不记得最初是怎么发现 Vim 了,可能是在折腾自己的服务器的时候?印象中在大三上计算材料学的课折腾 Ubuntu 搭建从头计算法环境的时候已经能够 :wq! 了。哈哈,那就是14年的时候了。最近在正式的工作中,算是真的把 Vim 融入到核心工作流里面了。于是决定把相关知识体系化一波。此文作为开端吧。什么是 Vim —— 我在四年使用后的理解原生的 ...原创 2018-11-09 14:13:27 · 397 阅读 · 0 评论 -
Unity 获取屏幕当前宽度和高度
宽度:UnityEngine.Screen.width高度:UnityEngine.Screen.height参考:https://docs.unity3d.com/ScriptReference/Screen.html原创 2018-11-13 12:02:16 · 34585 阅读 · 0 评论 -
Unity Tolua 对于带有 out 参数的函数的导出方式分析 —— 以 ColorUtility 为例
以 ColorUtility 的 TryParseHtmlString 函数为例。https://docs.unity3d.com/ScriptReference/ColorUtility.TryParseHtmlString.html在配置导出 ColorUtility 类之后,打开 UnityEngine_ColorUtilityWrap.cs,可以看到导出的函数是:[MonoPInvok...原创 2018-11-23 10:46:15 · 1715 阅读 · 0 评论 -
基于函数式编程 curry 概念的 Lua 函数调用暂存机制
基于函数式编程 curry 概念的 Lua 函数调用暂存机制引子客户端代码收到服务器多条消息,其中有一条主消息和多条补充修改此主消息的补充消息。但是在实际使用时,发现有些补充消息比在主消息先到达客户端。所以我们需要把这些“补充消息”先暂存起来。一种实现方式是制作一个数据缓存,约定一种数据结构把先到达的数据先存好,在主消息到达后再去按照约定的结构一项一项把数据更新到主消息中。这种方式有效...原创 2019-07-09 11:03:07 · 414 阅读 · 0 评论 -
Pomelo 的聊天室 Unity 端 demo
Pomelo 的聊天室 Unity 端 demo最近研究了一下网易的服务器端引擎 Pomelo,跟着做了一下聊天室的例子。官方 wiki 教程侧重介绍服务器端编程,然后客户端是 web 的,可正常使用。也提供了 unity 端的例子,但是已经过时(最后更新是2013年),于是动手修改了一下,让 demo 重新运行了起来,消除了一些坑。欢迎大家测试和学习交流。地址:https://g...原创 2018-03-14 17:54:48 · 1182 阅读 · 0 评论