练习简单的摇杆跟随移动(身体动态跟随蛇头移动)
摇杆插件 二维游戏 蛇身跟随蛇头
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