3D游戏精灵-兔子脚本 (lua语言开发,xfun平台)最新版

本文档详细介绍了使用Lua语言在xfun平台上开发3D游戏精灵的移动脚本,包括精灵初始化、随机移动路径、事件处理函数等关键函数的实现,以及如何响应人物靠近和定时器事件,确保精灵的智能移动行为。
摘要由CSDN通过智能技术生成
require "XLuaBase"

--{ {XFUN EVENT
    --在此处添加事件
X_ON_LUAINIT(OnItemInit)  
X_ONSPRITECLOSETO(OnSpriteCloseTo)
X_ON_TIMER(OnItemTimer)  
--}}XFUN EVENT

--范围半径
#define NRADIUS 1000

--精灵移动时两个节点之间的最短距离
#define NMOVE_MINDISTANCE              100

--人物靠近的触发距离
#define NPERSON_CLOSEDISTANCE          5

--检查是否主控
#define NTIMER_MAINCTRL_ID 1000
#define NTIMER_MAINCTRL_TIME 10000

--检查命令是否快结束了
#define NTIMER_CMDEND_ID    1001

---------------------------------------------
--事件处理函数
---------------------------------------------

LXRandomMove = {}
LXRandomMove.__index = LXRandomMove

objRandomMove = {}
setmetatable(objRandomMove,LXRandomMove)                    ---设置元表数据
---------------------------------------------
--类实现函数
---------------------------------------------
--物体初始化
function LXRandomMove:OnItemInit(objSprite)
    math.randomseed(os.time())    
    
    --初始化
    self:Init(objSprite, NRADIUS)

    --精灵靠近
    objSprite.EnableClosetoEvent(NPERSON_CLOSEDISTANCE)

    --设置定时器
    objSprite.SetTimer(NTIMER_MAINCTRL_ID, NTIMER_MAINCTRL_TIME)
end

--初始化数据
function    LXRandomMove:Init(objSprite, fRadius)
    self.objSprite = objSprite                    --精灵对象

    local objTrans = objSprite.GetTranslate()    --中心点位置
    self.ptCenter = objTrans.GetPosition()
 
    --todo
    objTrans.SetScale(1.2)
    objSprite.ApplyTranslate(objTrans)

    self.fRadius = fRadius                        --范围半径
 
    self.Nodes = {}                                --当前路径的节点    
    self.nNodeMoveCount = 10                    --当前移动次数
    self.nNodeAnimateCount = 10                    --当前动作次数
    if self.Nodes then
         for i = 1, self.nNodeMoveCount + self.nNodeAnimateCount, 1 do    --节点数据
            self.Nodes[i] = {}
            self.Nodes[i].ptStart = X3DPoint.CreateObject()     --起始移动位置
            self.Nodes[i].ptEnd = X3DPoint.CreateObject()     --目标移动位置
            self.Nodes[i].ptDir = X3DPoint.CreateObject()     --移动方向
            self.Nodes[i].vMove = math.random(1.2*10, 1.6*10) /10      --移动速度
            self.Nodes[i].fTime = 0                             --时间
            self.Nodes[i].fStartTime = 0                     --多长时间开始
            self.Nodes[i].bMoveByTerrain = true                 --是否沿着地表移动
            self.Nodes[i].bActionLoop = true                 --动作循环
            self.Nodes[i].nAction = NANIMATEID_MOVE             --动作索引
            self.Nodes[i].strMove = "Move"                     --是否要移动位置
        end
    end

    self.bMainCtrl = false                                    --是否主控
    self.fStartTime = 0                                        --当前动画总共时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值