Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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 建立的工程。

运行效果如下:

大佬总结

以上是大佬教程为你收集整理的cocos2dx 新手引导全部内容,希望文章能够帮你解决cocos2dx 新手引导所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。