第一次写教程
这里刀光的实现直接用的是MotionStreak ,估计很多人也都用过。这里的重点是如何选择刀光图片,具体请看CCMotionStreak .cpp。或者可以直接弄一张圆形的图片上去看下移动过程中图片是如何变化的,再确认自己要的刀光图形的形状,这里我们就直接用如下的图片来做了。
刀光加好了感觉没生气的话,可以再加个粒子效果上去,其他的实现看代码。
这是最后的效果图:
local MouseLayer=class("MouseLayer",function() return display.newLayer() end) local SLine=import("..ui.SLine") local app=app local math=math local cc=cc local dis=0 local pairs=pairs local lines=G_Lines function MouseLayer:ctor() -- cc.c3b(50, 220, 255) self.streak = cc.MotionStreak:create(0.3,3,30,cc.c3b(50, 220, 255), "blade.png"):addTo(self):align(display.CENTER,display.cx,display.cy) self.m_down=false self.tempx=0 self.tempy=0 self._frames=0 self._tempFrames=0 self:setTouchEnabled(true) self:setTouchSwallowEnabled(false) self:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE) self:addNodeEventListener(cc.NODE_TOUCH_EVENT,handler(self,self._onTouchFunc)) end function MouseLayer:onEnterFrame(dt) for k,v in pairs(lines) do v:update() end if(self.m_down==true)then self._frames=self._frames+1 if(dis>=60 and (self._frames-self._tempFrames)>=8) then self._tempFrames,self._frames=0,0 -- app:playSoundEffect("sound/cut.mp3") end end end function MouseLayer:_onTouchFunc(event) if(event.name=="began")then self.m_down=true self.tempx,self.tempy=event.x,event.y return true elseif(event.name=="ended")then self.m_down=false elseif(event.name=="moved") then if(self.m_down==true)then self.streak:setPosition(event.x,event.y) local line = SLine.new(self.tempx, self.tempy, event.x, event.y) dis=math.sqrt((self.tempx-event.y)*(self.tempx-event.x),(self.tempy-event.y)*(self.tempy-event.y)) self.tempx=event.x self.tempy=event.y if(dis>=60) then local par=cc.ParticleSystemQuad:create("particles/exp.plist"):addTo(self):pos(event.x,event.y) par:setAutoRemoveOnFinish(true) end end end end return MouseLayer ```