lua数学库LuaMathLib

来源:互联网 发布:如何p图淘宝评价管理 编辑:程序博客网 时间:2024/05/13 12:24

实在厌倦了做了多个游戏项目之后,对常用的数学计算总是算了又忘忘了再算。与其他技术问题相比,一个解决一个数学型问题有着费时不易调试逻辑错误边界条件不明显有隐患没成就感等特点。本着坑不能踩n+1次的心态,我做了这个东西——LuaMathLib。

今天的主角是LuaMathLib,一个通用可移植的纯Lua数学库。

语言层面上的特点

  • 面向对象 即封装、实例化那堆术语了,目的是在任何面向对象语言中可移植
  • 支持Getter/Setter 按照ECMA语法风格,对象属性可以是个函数返回值等
  • 支持索引器 可以按语义方式访问Vector3.x,也可以按索引方式访问Vector3[1]

结构特点

  • 核心算法移植自Unity3D和XNA,它们的稳定性是经过多年时间无数游戏的践踏而十分坚实的
  • 我提供了些附加测试,对API的正常工作做个不完全的保证
  • 可移植到其他语言

使用方法

你可以在CSDN上找到源码,它同时是一个可在Quick-x中运行的项目。使用这个数学库,能够快速达成很多有趣效果,下面以一个效果很棒的转盘为例说一下。

场景onEnter()函数中

self._vRot = 0self._rot = 0self._arrow = display.newSprite("spin/arrow.png"):scale(0.5):pos(display.cx, display.cy+5):addTo(self)self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, function(dt)    self._rot = self._arrow:getRotation()    self._rot, self._vRot = Math.SmoothDamp(self._rot, 7200, self._vX, 4, 1000, dt)    self._arrow:setRotation(self._rot)end)self:scheduleUpdate()

效果下如图

Math.SmoothDamp()极其适合这种高加速低减速的运动,同类的应用如摄像机推拉、宠物跟随等。

参考资料

项目中不提供文档,但你可以查阅Unity文档(主)和XNA文档(辅)的数学部分,因为LuaMathLib会全部支持。

项目状态

LuaMathLib以开源形式托管在https://code.csdn.net/lolofinil/luamathlib。目前对Unity3D数学库移植程度大约在30%,已经可以在Lua代码中访问几乎所有UnityEngine.Mathf、Vector2.Mathf和Vector3.Mathf。计划内的任务包括完成Vector4、Quaternion、Matrix4x4移植、用空间矢量改善2D计算、合并XNA特有API如Vector3.Catmull等。

原文链接:http://www.lolofinil.com/2014/08/03/luamathlib_intro/

0 0