微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cocos2dx 新手引导

参照了一下大神的文章,自己也试着写了一个

CCClippingNode遮罩解析

利用CCClippingNode做个新手引导

Cocos2d-x教程第(12)讲-利用遮罩(蒙版)CCLayerColor制作新手引导界面(中)


lua 代码如下:

local GuideLayer = class("GuideLayer",function()
    return cc.Layer:create()
end)

function GuideLayer.create(tTarget,fnCallBack)
    local layer = GuideLayer.new()
    if layer:Init(tTarget,fnCallBack)then
        return layer
    end
   
end


function GuideLayer:ctor()
    
end
function GuideLayer:Init(tTarget,fnCallBack)
    local winSize = cc.Director:getInstance():getWinSize()
    local clipNode = cc.ClippingNode:create()
    self:addChild(clipNode) --底板
    
    local layer = cc.LayerColor:create(cc.c4b(0,110))
    clipNode:setInverted(true)
    clipNode:addChild(layer)
    --clipNode:setAlphaThreshold(0)
    
    local radius = 55
    local count = 200
    local angel =  2 * 3.14 / count
    local tCircle = {}
    for i = 1,count do
        local radian = i * angel
        tCircle[i] = tCircle[i] or {}
        tCircle[i].x = radius * math.cos(radian)
        tCircle[i].y = radius * math.sin(radian)
    end
    
    local stencil = cc.DrawNode:create()
    stencil:drawpolygon(tCircle,count,cc.c4b(1,1),1))
    local p = cc.p(tTarget:getPosition())
    local anchorPoint = tTarget:getAnchorPoint()
    local size = tTarget:getContentSize()
  
    local wordPos = tTarget:getParent():convertToWorldspace(p)
    --计算出模板的有效区域,,转换成屏幕坐标,否则模板有些地方点击失效
    local rect = cc.rect(wordPos.x - size.width * anchorPoint.x,wordPos.y - size.height * anchorPoint.y,size.width,size.height) 
    stencil:setPosition(wordPos.x,wordPos.y)
    stencil:setContentSize(size)
    clipNode:setStencil(stencil) --模板

    
    local function OnTouchBegan(touch,event)
        return true;
    end

    local function OnTouchEnded(touch,event)
        print("touchend")
        local point = touch:getLocation()
        local rect = stencil:getBoundingBox()
        if cc.rectContainsPoint(rect,point) then 
          print("执行了回调")
          fnCallBack()
        end
    end

    local maskListener = cc.EventListenerTouchOneByOne:create();
    maskListener:registerScriptHandler(OnTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN);
    maskListener:registerScriptHandler(OnTouchEnded,cc.Handler.EVENT_TOUCH_ENDED);
    local eventdispatcher = self:getEventdispatcher();
    eventdispatcher:addEventListenerWithSceneGraPHPriority(maskListener,self); 
    maskListener:setSwallowtouches(true)
    return true
end
return GuideLayer

使用如下:
require "Cocos2d"
require "Cocos2dConstants"


local GameScene = class("GameScene",function()
    return cc.Scene:create()
end)

function GameScene.create()
    local scene = GameScene.new()
    if scene:Init()then
        return scene
    end
   
end


function GameScene:ctor()
    self.visibleSize = cc.Director:getInstance():getVisibleSize()
    self.origin = cc.Director:getInstance():getVisibleOrigin()
end

function GameScene:Init()
    local winSize = cc.Director:getInstance():getWinSize()
    local sprite = cc.Sprite:create("res/Hello.png")
    sprite:setPosition(winSize.width/3*2,winSize.height/2)
    self:addChild(sprite)
    --sprite:setScale(0.2)
    self.tTarget = sprite
    sprite:setScale(0.5)
    
    local GuideLayer  = require("GuideLayer")
    local guide 
    local tcopy = cc.Sprite:create("res/Hello.png")
    guide = GuideLayer.create(sprite,function()guide:removeFromParent() end)
    self:addChild(guide)
    return true
end

return GameScene

其中工程使用cocoide 建立的工程。

运行效果如下:

原文地址:https://www.jb51.cc/cocos2dx/344749.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐