第六章第三节Lua脚本demo
Posted iLoboke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章第三节Lua脚本demo相关的知识,希望对你有一定的参考价值。
Lua脚本的demo解析及调试问题
>>拿球射门战术实例代码解析
第一步:拿球(“GetBall”)
1)助攻任务:让中场足球机器人去拿球,小球可以是场上任意位置
Receiver = task.GetBall("Receiver","Receiver")
--Receiver为中场角色名
--GetBall("Receiver","Receiver")为指定“Receiver”角色朝向球门拿球,
--GetBall 函数说明详见6.1.7(本章不附说明)
2)射手任务:前锋去接球点,接球点的位置是按照场上球的位置做相应逻辑获得的
Kicker = task.GoRecePos("Kicker")
--Kicker为中场角色名
--GoRecePos为指定“Kicker”角色去接球点
--GoRecePos 函数说明详见6.1.9(本章不附说明)
3)跳转条件:当接球者离球的距离小于30mm时,状态跳转到第二步”PassBall”
if CBall2RoleDist("Receiver") < 30 then
return "PassBall"
End
--CBall2RoleDist(“Receiver”)函数返回“Receiver”到球的距离
--CBall2RoleDist 函数说明详见6.2.1.4(本章不附说明)
>>第二步:传球(“PassBall”)
1)助攻任务:让中场足球机器人传球给前锋
Receiver = task.PassBall("Receiver","Kicker")
--Receiver为传球角色名
--Kicker为接球角色名
--PassBll 函数说明详见6.1.12(本章不附说明)
2)射手任务:前锋去接球点,接球点的位置是按照场上球的位置做相应逻辑获得的
Kicker = task.GoRecePos("Kicker")
--Kicker为中场角色名
--GoRecePos为指定“Kicker”角色去接球点
--GoRecePos 函数说明详见6.1.9(本章不附说明)
3)跳转条件:当传球者将球踢出,状态跳转到第三步”Shoot”
if CIsBallKick("Receiver") then
return "Shoot"
end
--CIsBallKick(“Receiver”)函数返回”Receiver”是否将球踢出的判断
--CIsBallKick函数说明详见6.2.1.10(本章不附说明)
>>第三步:射门(”Shoot”)
1)助攻任务:中场球员进入防守任务
Receiver = task.RefDef("Receiver")
--Receiver为防守角色名
--RefDef函数说明详见6.1.16(本章不附说明)
2)射手任务:前锋射门
Kicker = task.Shoot("Kicker")
--Kicker为射门角色名
--Shoot 函数说明详见6.1.15(本章不附说明)
3)跳转条件:当射门者将球踢出,状态结束
if CIsBallKick("Kicker") then
return "finish"
End
--CIsBallKick(“Kicker”)函数返回”Kicker”是否将球踢出的判断
--CIsBallKick函数说明详见6.2.1.10(本章不附说明)
拿球射门战术实例完整代码
示例战术脚本名为Ref_passAndShoot.lua
gPlayTable.CreatePlay{
firstState = "GetBall", --起始状态拿球“GetBall”
--“GetBall”拿球状态
["GetBall"] = {
switch = function()
if CBall2RoleDist("Receiver") < 30 then --判断“Receiver”离球距离是否小于30
return "PassBall"
end
end,
Kicker = task.GoRecePos("Kicker"), --“Kicker”前锋跑到接球点
Receiver = task.GetBall("Receiver","Receiver"), --“Receiver”中场去拿球
Goalie = task.Goalie() --“Goalie”守门员守门
},
--“PassBall”传球状态
["PassBall"] = {
switch = function()
if CIsBallKick("Receiver") then --判断“Receiver”中场是否踢球
return "Shoot"
end
end,
Kicker = task.GoRecePos("Kicker"),
Receiver = task.PassBall("Receiver","Kicker"), --“Receiver”中场传球
Goalie = task.Goalie()
},
--“Shoot”射门状态
["Shoot"] = {
switch = function()
if CIsBallKick("Kicker") then --判断“Kicker”前锋是否踢球
return "finish"
end
end,
Kicker = task.Shoot("Kicker"), --“Kicker”前锋射门
Receiver = task.RefDef("Receiver"), --“Receiver”中场防守
Goalie = task.Goalie()
},
name = "Ref_passAndShoot" --脚本名称
}
Lua的调试操作比较简单,在《机器人控制软件》中第4章节,我们有了解到如何使用SOM3.x软件的“测试模式”执行单个lua脚本程序。执行操作中,我们需要注意的是,选择正确的脚本类型。如果是“Ref_BackKick.lua”,就选择“后场任意球”战术类型。在模拟调试过程中,可以将对方球员拖入到场地实现效果。
建议在lua脚本调试中,先模拟后实地。修改调整lua脚本程序,直到满足设计需求后,再转为正式脚本。
以上是关于第六章第三节Lua脚本demo的主要内容,如果未能解决你的问题,请参考以下文章