`
plmkome
  • 浏览: 41511 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Vision引擎中 Lua 脚本介绍

 
阅读更多

 

引言
Vision 的 Lua 编辑工具组提供多种节省时间的功能,例如代码完成和预定义代码模板。
 
   重要说明:请注意,我们采用 SWIG 封装 Lua 中的 C++ 类,所以所有对象的行为都类似指针 - 包括向量(Vision.hkvVec3)或颜色(Vision.VColorRef)。 因此,赋值(vector1 = vector2)所修改的是指针而非数据。 在这种情况下,您应当使用 clone() 而非赋值(vector1 = vector2:clone())。 ‘+’、‘-’、‘*’、‘/’等关键字可以放心使用,因为它们会为您生成一个新实例:vector1 = vector2 + vector3
 
代码插入
代码插入图标提供一份传递到 Lua 系统的可用事件类型的列表。 右键单击列表中的某条目,该函数将被放置到您的脚本的末尾。

例如,选择 OnThink(self) 条目将生成如下 Lua 代码片段:
function OnThink(self)	
 
end
 
自动完成
输入代码时,当您在 Timer 等定义符号后方输入一个圆点或冒号,程序会显示自动完成对话框,包括对象所包含的函数。

切换脚本编辑器工具栏上的自动完成图标可启用 / 关闭该功能。

自动完成功能也可手动激活,方法为组合键 CTRL + SPACE,也可用 ESC 键关闭。

脚本缓存
脚本面板提供在 vForge 中启用 / 关闭脚本缓存的选项。 该选项仅影响编辑器中的行为。 脚本缓存默认为启用状态,也就是说,在每个脚本组件的实例化期间,将使用一份脚本资源的缓存版本(如可用)。 如果脚本缓存被关闭,在每个脚本组件的实例化期间,脚本文件将被检查,脚本资源将被重新载入,以防存在任何更改。 该行为模式的使用案例之一是,如果您在在编辑器中运行模式下也想编辑脚本,并为场景添加使用更新后脚本的脚本组件,则应该关闭缓存。 如果您的工作流不明确要求这一行为模式,请将脚本缓存保留为启用状态,因为其性能更佳(载入有大量脚本组件的场景时速度也更快)。

Lua 帮助
为协助您开发 Lua 脚本,您可以随时打开 Lua Scripting API,方法为选择脚本编辑工具栏中的 Lua 帮助图标,或按 F1 键:

该图标会打开一份标准帮助文档,全面涵盖 Vision Lua 类,另有使用中的命令的简单示例。
 
   提示:如果您想获得有关某个具体命令的帮助,例如”OnCreate”、”SetPosition”等等,只需在脚本编辑器中选择文本并按 F1 键,帮助程序会立刻为您搜索关键词。

Vision Lua 101
ScriptingAPI CHM 对于所有脚本命令都是一份宝贵的资源,但为帮助您在 Lua 学习过程中入门,有一些简单的命令和规则需要了解:
 
  信息:示例项目中有一份脚本示例:<VisionSDK>/Data/Vision/Samples/Engine/Scripting/LuaScripting.project
 
Self
self 变量用于引用该脚本所附的实体。 对于某个实体类型,我们可以使用如下脚本行。
 
self:SetMesh("Models\\Warrior\\Warrior.model")
self:SetScaling(2)
这个小示例会把实体模型文件设给 Warrior,并将其统一缩放增加到 2。
 
调试打印
如果您需要测试变量内容或仅插入简单的追踪,打印到屏幕是快捷而简单的反馈方法。 您可使用如下命令:
Debug:PrintLine("Hello World")
请使用双点技巧在 PrintLine 函数方法中合并字符串。
local numProps = self:GetNumProperties();
Debug:PrintLine("The entity has " .. numProps .. " prop(s)")
当您需要打印某个矢量的内容,请使用 tostring(var) 函数方法。
Debug:PrintLine("Setting a new property value...")
self:SetProperty("myProp", Vision.hkvVec3(1.2, 2.3, 3.4));
propVal = self:GetProperty("myProp");
Debug:PrintLine("The entity's new property value is: " .. tostring(propVal))	
时间增量
为确保运动在不同帧率下保持恒速,您可以将速度因数乘以时间增量。 当前时间增量(从上次调用至今的时间)可从 Timer:GetTimeDiff() 函数方法返回。
function OnThink(self)
    -- rotate entity over time
    local t = Timer:GetTimeDiff()
    self:IncOrientation(t*10, 0, 0)
end

转自:project anarchy中文社区

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics