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 举报,一经查实,本站将立刻删除。