《切水果》01-刀光实现

第一次写教程
这里刀光的实现直接用的是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


```
1赞