Lua框架MVC层下的动态跟随摇杆移动的简单贪吃蛇游戏

练习简单的摇杆跟随移动(身体动态跟随蛇头移动)

摇杆插件  二维游戏  蛇身跟随蛇头

MVC框架中的V层  用的 xlua-framework框架

了解一下框架就明白了

local UISnakeView = BaseClass("UISnakeView", UIBaseView)

local base = UIBaseView

用的

local function OnCreate(self)

    base.OnCreate(self)

    -- 窗口生命周期内保持的成员变量放这

    self.body={}

    self.snakeHead=self:AddComponent(UIImage,"Head")

    table.insert(self.body,self.snakeHead)

    self.foodParent=self:AddComponent(UIImage,"FoodParent")

    self.tips=self:AddComponent(UIImage,"Tips")

    self.tips:SetActive(false)

    self.snakeHead.transform:GetComponent(typeof(CS.Trigger2D)).onTriggerEnter2D=function (collision)

       

        if collision.gameObject.tag=="AAA" then

            Time.timeScale = 0;

            self.tips:SetActive(true)

            print("死亡")

        else

            GameObjectPool:GetInstance():RecycleGameObject("UI/Prefabs/View/Food.prefab",collision.gameObject)

            GameObjectPool:GetInstance():GetGameObjectAsync("UI/Prefabs/View/Body.prefab",function (go)

                go.transform:SetParent(self.transform)

                local pos=self.body[#self.body].transform.localPosition+Vector3(20,20,0)

                go.transform.localPosition=pos

                go.transform.localScale=Vector3.one

                go.transform.localEulerAngles=Vector3.zero

                table.insert(self.body,go)

            end)

        end

    end



 

    for i = 1, 100, 1 do

        GameObjectPool:GetInstance():GetGameObjectAsync("UI/Prefabs/View/Food.prefab",function (go)

            go.transform:SetParent(self.foodParent.transform)

            local x=Mathf.Random(-640,640)

            local y=Mathf.Random(-350,350)

            go.transform.localPosition=Vector3(x,y,0)

            go.transform.localScale=Vector3.one

        end)

    end

end

-- 打开

local function OnEnable(self)

    base.OnEnable(self)

    -- 窗口关闭时可以清理的成员变量放这

end

local dir=Vector3(0,1,0)

local function  Update(self)

 -----蛇头的默认移动方向

   self.snakeHead.transform.localPosition=self.snakeHead.transform.localPosition+dir*Time.deltaTime*100

--蛇身的跟随上一个移动

    for k, v in ipairs(self.body) do

        if k~=1 then

            v.transform.localPosition=Vector3.Lerp(self.body[k].transform.localPosition,self.body[k-1].transform.localPosition,Time.deltaTime*4)

        end

    end

    local y=CS.ETCInput.GetAxis("Vertical")

    local x=CS.ETCInput.GetAxis("Horizontal")

    if x==0 or y==0 then

        return

    end

    dir.x=x

    dir.y=y

    local angle=Mathf.Atan2(y,x)*Mathf.Rad2Deg-90

    self.snakeHead.transform.localEulerAngles=Vector3(0,0,angle)

end

-- 关闭

local function OnDestroy(self)

    base.OnDestroy(self)

    -- 清理成员变量

end


 

UISnakeView.OnCreate = OnCreate

UISnakeView.OnEnable = OnEnable

UISnakeView.OnDestroy = OnDestroy

UISnakeView.Update = Update

return UISnakeView

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值