参照了一下大神的文章,自己也试着写了一个
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 endfunction GuIDeLayer:ctor() endfunction 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 trueendreturn 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 endfunction GameScene:ctor() self.visibleSize = cc.Director:getInstance():getVisibleSize() self.origin = cc.Director:getInstance():getVisibleOrigin()endfunction 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 trueendreturn GameScene
其中工程使用cocoIDe 建立的工程。
运行效果如下:
总结以上是内存溢出为你收集整理的cocos2dx 新手引导全部内容,希望文章能够帮你解决cocos2dx 新手引导所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)