关于cocos2dx虚拟摇杆的lua实现

来源:互联网 发布:淘宝下拉框关键词 编辑:程序博客网 时间:2024/06/06 06:47

看到网上不少虚拟摇杆的代码,但是都是在c++里面实现,非常不方便,所以我自己把c++的代码移植到lua里面


local VitrualController = class("VitrualController", cc.Layer)function VitrualController:ctor(app, name)    if self.onCreate then self:onCreate() endendfunction VitrualController:onTouchesEnded(touches, event )    self:_deactive()endfunction VitrualController:onTouchesBegan(touches, event )    self.start_pos = cc.p(touches[1]:getLocation())self:_active(self.start_pos)endfunction VitrualController:onTouchesMove(touches, event )    local pos = cc.p(touches[1]:getLocation())    local distance = cc.pGetDistance(self.start_pos,pos)    local direction = cc.pNormalize(cc.pSub(pos,self.start_pos))    self:_update(direction,distance)endfunction VitrualController:onCreate()    self.joystick = cc.Sprite:create( "res/Joystick_03.png")    self.joystick:setScale(0.2,0.2)    self.joystick_bg = cc.Sprite:create( "res/Back_04.png")    self.joystick_bg:setScale(0.3,0.3)    self:addChild(self.joystick_bg)    self:addChild(self.joystick)    local listener = cc.EventListenerTouchAllAtOnce:create()        listener:registerScriptHandler(function(...) self:onTouchesBegan(...) end,cc.Handler.EVENT_TOUCHES_BEGAN  )    listener:registerScriptHandler(function(...) self:onTouchesEnded(...) end,cc.Handler.EVENT_TOUCHES_ENDED  )    listener:registerScriptHandler(function(...) self:onTouchesMove(...) end,cc.Handler.EVENT_TOUCHES_MOVED  )    local eventDispatcher = self:getEventDispatcher()    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)endfunction VitrualController:_active(pos)    self.joystick:setPosition(pos)    self.joystick_bg:setPosition(pos)    self.joystick:setVisible(true)    self.joystick_bg:setVisible(true)endfunction VitrualController:_deactive(pos)    self.joystick:setVisible(false)    self.joystick_bg:setVisible(false)endfunction VitrualController:_update(direction,distance)    print("seayoung udpate",direction.x,direction.y,distance)    local start = cc.p(self.joystick_bg:getPosition())    if distance < 32 then        self.joystick:setPosition(cc.pAdd(start , (cc.pMul(direction ,distance))))    else if distance > 96 then        self.joystick:setPosition(cc.pAdd(start , (cc.pMul(direction ,64))))    else        self.joystick:setPosition(cc.pAdd(start , (cc.pMul(direction ,32))))    endendendreturn VitrualController


                                             
1 0
原创粉丝点击