lua版本ClippingNode实现新手引导
2016-09-28 23:32
344 查看
1.GameLayer.lua
GameLayer = class("GameLayer",function()
return cc.Layer:create()
end)
function GameLayer:create()
local view = GameLayer.new()
view:__init()
return view
end
function GameLayer:__init()
local whiteColor = cc.c3b(255,255,255)
local layerColor = cc.LayerColor:create(whiteColor)
self:addChild(layerColor)
local btn1 = ButtonEx:create("按钮1", function() end)
btn1:setPosition(winSizeWidth/2 - 100,winSizeHeight/2)
self:addChild(btn1)
local btn2 = ButtonEx:create("按钮2", function() end)
btn2:setPosition(winSizeWidth/2,winSizeHeight/2)
self:addChild(btn2)
local btn3 = ButtonEx:create("按钮3", function() end)
btn3:setPosition(winSizeWidth/2 + 100,winSizeHeight/2)
self:addChild(btn3)
local callback = function()
local scene = cc.Scene:create()
scene:addChild(SecondLayer:create())
cc.Director:getInstance():replaceScene(scene)
end
self:addChild(GuideLayer:create({btn2}, callback))
end
2.Lib.lua
winSizeWidth = cc.Director:getInstance():getWinSize().width
winSizeHeight = cc.Director:getInstance():getWinSize().height
grayColor = cc.c3b(0,0,128)4.ButtonEx.lua
ButtonEx = class("ButtonEx", function()
return cc.Node:create()
end)
function ButtonEx:create(btnName, callback)
local view = ButtonEx:new()
view:__init(btnName, callback)
return view
end
function ButtonEx:__init(btnName, callback)
local btn = ccui.Button:create("btnBg.png")
self:addChild(btn)
local lblDesp = cc.Label:createWithSystemFont(btnName,"Arial", 10)
lblDesp:setColor(cc.c3b(255,0,255))
self:addChild(lblDesp)
btn:addTouchEventListener(function(sender, type)
if type == ccui.TouchEventType.ended then
callback()
end
end)
self.contentSize = btn:getContentSize()
end
function ButtonEx:getContentSize()
return self.contentSize
end5.GuideLayer.lua
GuideLayer = class("GuideLayer",function()
return cc.Layer:create()
end)
function GuideLayer:create(nodeList, callback)
local view = GuideLayer.new()
view:__init(nodeList, callback)
return view
end
local function onTouchBegan(touch, event)
local gameLayer = event:getCurrentTarget()
local locationInNode = touch:getLocation()
gameLayer.touchListener:setSwallowTouches(false)
for i, v in ipairs(gameLayer.nodeList) do
local node = gameLayer.nodeList[i]
local s = node:getContentSize()
local rect = cc.rect(node:getPositionX() - s.width/2, node:getPositionY() - s.height/2, s.width, s.height)
if cc.rectContainsPoint(rect, locationInNode) then
if gameLayer.callback then
gameLayer.callback()
end
return false
end
end
gameLayer.touchListener:setSwallowTouches(true)
return true
end
function GuideLayer:__init(nodeList, callback)
self.nodeList = nodeList
self.callback = callback
--1.
local clippingNode = cc.ClippingNode:create()
self:addChild(clippingNode)
--2.被裁剪的层
local grayLayer = cc.LayerColor:create(grayColor)
grayLayer:setOpacity(150)
clippingNode:addChild(grayLayer)
--3.镂空模型
local stencil = cc.Node:create()
clippingNode:setStencil(stencil)
clippingNode:setInverted(true)
clippingNode:setAlphaThreshold(0.05)
--镂空具体的区域
for i, v in ipairs(nodeList) do
local node = nodeList[i]
local layer = cc.LayerColor:create(grayColor, node:getContentSize().width, node:getContentSize().height)
layer:setPosition(node:getPositionX() -node:getContentSize().width/2, node:getPositionY() -node:getContentSize().height/2)
stencil:addChild(layer)
end
--事件触摸
local touchListener = cc.EventListenerTouchOneByOne:create()
touchListener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(touchListener, self)
self.touchListener = touchListener
end6.SecondLayer.lua
点击指定区域后
GameLayer = class("GameLayer",function()
return cc.Layer:create()
end)
function GameLayer:create()
local view = GameLayer.new()
view:__init()
return view
end
function GameLayer:__init()
local whiteColor = cc.c3b(255,255,255)
local layerColor = cc.LayerColor:create(whiteColor)
self:addChild(layerColor)
local btn1 = ButtonEx:create("按钮1", function() end)
btn1:setPosition(winSizeWidth/2 - 100,winSizeHeight/2)
self:addChild(btn1)
local btn2 = ButtonEx:create("按钮2", function() end)
btn2:setPosition(winSizeWidth/2,winSizeHeight/2)
self:addChild(btn2)
local btn3 = ButtonEx:create("按钮3", function() end)
btn3:setPosition(winSizeWidth/2 + 100,winSizeHeight/2)
self:addChild(btn3)
local callback = function()
local scene = cc.Scene:create()
scene:addChild(SecondLayer:create())
cc.Director:getInstance():replaceScene(scene)
end
self:addChild(GuideLayer:create({btn2}, callback))
end
2.Lib.lua
require "src/GameLayer" require "src/GuideLayer" require "src/Constant" require "src/ButtonEx" require "src/SecondLayer"3.Contant.lua
winSizeWidth = cc.Director:getInstance():getWinSize().width
winSizeHeight = cc.Director:getInstance():getWinSize().height
grayColor = cc.c3b(0,0,128)4.ButtonEx.lua
ButtonEx = class("ButtonEx", function()
return cc.Node:create()
end)
function ButtonEx:create(btnName, callback)
local view = ButtonEx:new()
view:__init(btnName, callback)
return view
end
function ButtonEx:__init(btnName, callback)
local btn = ccui.Button:create("btnBg.png")
self:addChild(btn)
local lblDesp = cc.Label:createWithSystemFont(btnName,"Arial", 10)
lblDesp:setColor(cc.c3b(255,0,255))
self:addChild(lblDesp)
btn:addTouchEventListener(function(sender, type)
if type == ccui.TouchEventType.ended then
callback()
end
end)
self.contentSize = btn:getContentSize()
end
function ButtonEx:getContentSize()
return self.contentSize
end5.GuideLayer.lua
GuideLayer = class("GuideLayer",function()
return cc.Layer:create()
end)
function GuideLayer:create(nodeList, callback)
local view = GuideLayer.new()
view:__init(nodeList, callback)
return view
end
local function onTouchBegan(touch, event)
local gameLayer = event:getCurrentTarget()
local locationInNode = touch:getLocation()
gameLayer.touchListener:setSwallowTouches(false)
for i, v in ipairs(gameLayer.nodeList) do
local node = gameLayer.nodeList[i]
local s = node:getContentSize()
local rect = cc.rect(node:getPositionX() - s.width/2, node:getPositionY() - s.height/2, s.width, s.height)
if cc.rectContainsPoint(rect, locationInNode) then
if gameLayer.callback then
gameLayer.callback()
end
return false
end
end
gameLayer.touchListener:setSwallowTouches(true)
return true
end
function GuideLayer:__init(nodeList, callback)
self.nodeList = nodeList
self.callback = callback
--1.
local clippingNode = cc.ClippingNode:create()
self:addChild(clippingNode)
--2.被裁剪的层
local grayLayer = cc.LayerColor:create(grayColor)
grayLayer:setOpacity(150)
clippingNode:addChild(grayLayer)
--3.镂空模型
local stencil = cc.Node:create()
clippingNode:setStencil(stencil)
clippingNode:setInverted(true)
clippingNode:setAlphaThreshold(0.05)
--镂空具体的区域
for i, v in ipairs(nodeList) do
local node = nodeList[i]
local layer = cc.LayerColor:create(grayColor, node:getContentSize().width, node:getContentSize().height)
layer:setPosition(node:getPositionX() -node:getContentSize().width/2, node:getPositionY() -node:getContentSize().height/2)
stencil:addChild(layer)
end
--事件触摸
local touchListener = cc.EventListenerTouchOneByOne:create()
touchListener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(touchListener, self)
self.touchListener = touchListener
end6.SecondLayer.lua
SecondLayer = class("SecondLayer",function() return cc.Layer:create() end) function SecondLayer:create() local view = SecondLayer.new() view:__init() return view end function SecondLayer:__init() local lbl = cc.Label:createWithSystemFont("第二个场景","arial",30) lbl:setPosition(winSizeWidth/2, winSizeHeight/2) self:addChild(lbl) end加入引导层
点击指定区域后
相关文章推荐
- 用封装ClippingNode实现新手引导(cocos2dx 3.2版本)
- CCClippingNode(Clip修剪 可以实现新手引导遮罩、滚动字幕。。渲染child时仅渲染模板透明度值大于透明度阀值的像素点.默认透明度阀值 =1)
- CCLayerColor和CCClippingNode组合新手引导功能---cocos2d-x学习之路[4]
- clippingNode 新手引导
- ClippingNode 新手引导 高亮选择提示
- Cocos2dx 3.0 过渡篇(十六)用ClippingNode做游戏的新手引导
- cocos2dx-3.4 lua新手引导
- lua、quick-cocos2d-x(lua)、lua基本语法、lua类的实现、lua类的继承【新手必读】
- linux kickstart无人值守安装实现多版本的引导
- cocos2d-x 基于CCClippingNode实现CCLayer遮罩功能,在滑动时超出剪切区域的实现显示部分的效果,不需要再借助其他sprite来遮挡了
- 【Cocos2dx 3.3 Lua】剪裁结点ClippingNode
- cocos2d-x之CCClippingNode实现滚动字幕
- cocos2dx用裁剪区域CCClippingNode实现滚动字幕
- coco2d-x CCScrollView实现关卡选择 新手引导 帮助界面
- 仿zaker最新版本引导界面的视图联动效果(修改viewpager实现)
- 遮罩clippingNode实现标题闪亮特效、类似机关枪瞄准效果、跑马灯效果
- cocos2d clippindNode,新手引导
- coco2d-x CCScrollView实现关卡选择 新手引导 帮助界面
- win环境下实现导出protobuf文件的lua版本
- 【Cocos2d-x】新手自学(九)滚动背景..实现无限卷轴效果(2.0.1版本)