LuaMathLib - 在Quick-x中使用Unity3D数学API

博客原文: http://www.lolofinil.com/2014/08/03/luamathlib_intro/

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

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

语言层面上的特点

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

结构特点

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

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

场景onEnter()函数中
self._vRot = 0
self._rot = 0
self._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()极其适合这种高加速低减速的运动,同类的应用如摄像机推拉、宠物跟随等。

参考资料
项目中不提供文档,但你可以查阅(http://docs.unity3d.com/ScriptReference/index.html)(主)和(http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.aspx)(辅)的数学部分,因为LuaMathLib会全部支持。

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

必须不错的啊说 :2::2:

–update–

很棒, 期待更多 demo

不仅仅是在游戏里面使用, 某些应用也能使用得上哦

http://www.lolofinil.com/2014/06/26/icocos_01/

嗯, 加上网格貌似更好理解 anchor, pos 等属性了

:2: 会的~我自己也是边用边整理

恩,那个最初为了帮助自己理解,从Quick的例子里拿出来的。

顶起!:2:

thx ~~ :14:

挖 好东东挖 :7::7::7:

:7: :7::7:

很实用啊~~~~~

:2: markmark :2: