quick-x 新手引导

大部分游戏都有新手引导,而新手引导很多表现都是 其他地方压黑,新手引导的按钮等高亮可点。针对这种情况,用ClippingNode写了一个简单方便的遮罩层。

 1 --[[
 2     touchRect:
 3         1. CCRect 高亮区域
 4         2.  {
 5                 imagePath 高亮图片路径
 6                 imagePos  高亮精灵位置
 7                 scale, rotation 可选
 8             }
 9     canTouch: 高亮区域是否可点击
10     callback: 点击遮罩后的回调(比如点击后进行下一个引导)
11 ]]
12 function G_createGuideLayer(touchRect, canTouch, callback)
13     local highLightNode = nil
14     if type(touchRect) == "table" then      --图片
15         highLightNode = display.newSprite(touchRect.imagePath)
16         highLightNode:setPosition(touchRect.imagePos)
17         highLightNode:setScale(touchRect.scale or 1)
18         highLightNode:setRotation(touchRect.rotation or 0)
19     else                                    --CCRect 目前是矩形,可相应换成椭圆或固定图片
20         local midX = touchRect:getMidX()
21         local midY = touchRect:getMidY()
22         highLightNode = CCSprite:createWithTexture(nil, touchRect)
23         highLightNode:setPosition(midX, midY)
24     end
25
26     local layer = display.newLayer()
27
28     --压黑
29     local layerColor = CCLayerColor:create(ccc4(0, 0, 0, 200), display.width, display.height)
30
31     --高亮
32     local clipNode = CCClippingNode:create()
33     clipNode:setInverted(true)
34     clipNode:addChild(layerColor)
35     local stencilNode = CCNode:create()
36     stencilNode:addChild(node)
37     stencilNode:addChild(highLightNode)
38     clipNode:setStencil(stencilNode)
39     clipNode:setAlphaThreshold(0)
40
41     layer:addChild(clipNode)
42
43     layer:setTouchEnabled(true)
44     layer:registerScriptTouchHandler(function ( eventType,x,y )
45         local point = highLightNode:getParent():convertToNodeSpace(ccp(x, y))
46         if eventType == "began" then
47             if layer:isVisible() == false then
48                 return false
49             end
50             if canTouch == false then
51                 return true
52             --可点并且在高亮区域时不吞噬触摸,这样高亮区域的按钮就可以响应
53             elseif highLightNode:getBoundingBox():containsPoint(point) then
54                 return false
55             else
56                 return true
57             end
58         elseif eventType == "ended" then
59             if canTouch == false then
60                 if callback then
61                     callback()
62                 end
63             end
64         end
65     end, false, -10000, true)
66
67     return layer
68 end

有几种常用的用法:

local button = display.newSprite(ImagePath)
                     :addTo(self)
button:setTouchEnable(true)
button:registerScriptTouchHandler( .... )

1.  按钮区域矩形高亮,点击屏幕任何一处移除遮罩,点击高亮区域按钮不响应

local rect = button:boundingBox()
local layer = G_createGuideLayer(rect, false, function()
    layer:removeFromParentAndCleanUp(true)
end)

2. 按钮高亮(高亮区域跟按钮一模一样),点击屏幕任何一处移除遮罩,点击高亮区域按钮不响应

local tab = {
    imagePath = imagePath,
    imagePos = button:getParent():convertToWordSpace(button:getPositionInCCPoint()),}
local layer = G_createGuideLayer(rect, false, function()
    layer:removeFromParentAndCleanUp(true)
end)

3. 按钮高亮(高亮区域跟按钮一模一样),点击高亮区域按钮响应,非高亮区域没反应

local tab = {
    imagePath = imagePath,
    imagePos = button:getParent():convertToWordSpace(button:getPositionInCCPoint()),
}
local layer = G_createGuideLayer(rect, true, function()
    layer:removeFromParentAndCleanUp(true)
end)
时间: 2024-10-09 04:43:54

quick-x 新手引导的相关文章

Quick setup

Quick setup — if you’ve done this kind of thing before We recommend every repository include a README, LICENSE, and .gitignore. …or create a new repository on the command line echo "# Architect" >> README.md git init git add README.md git

如何简单的实现新手引导之UGUI篇

一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存.那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于UGUI做的一个简单的引导! 怎么样,看着是那么回事吧?看起来确实有点丑,如果给按钮边缘加上缩放或者流光特效,那么逼格瞬间就上去了,可惜,没找到资源.最重要的是实现起来灰常简单,就一个函数搞定. 1,如何实现引导: 1,首先创建一个Mask遮罩,保证任意地方接受不到点击,适当的调整下Alpha. 2,将要点击的按钮高亮,保证引导按钮可以响应到点击事件

WIN7任务栏的QUICK LAUNCH怎么调出来

右键单击任务栏--工具栏--新工具栏 在空白处输入%UserProfile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch然后选择文件夹.ok现在显示了,不过是在任务栏的右侧,现在我们把它移一下位置 右键任务栏--取消"锁定任务栏",按住那个每行有3个小点的手柄,往左边拖过去现在它跑到左边去了,哈哈. 接着右键点击分离和取消 "显示标题" 和 "显示文本" 最后根据你任务栏的大小

Quick Sort(快排)

这是挖坑填补法的演示 快排之挖坑填补法: 1 void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])//挖坑填补法 2 { 3 int i=top,j=end,mark;//i是记住前面的坑 j记住后面的坑 mark记住标准值 4 5 mark=arr[top];//以起始位置作为标准值,同时起始点成为第一个坑 6 if(top>=end)return; 7 while(i<j) 8 { 9 while(i<j)//从后向前找比标准值小

Union-Find(并查集): Quick union improvements

Quick union improvements1: weighting 为了防止生成高的树,将smaller tree放在larger tree的下面(smaller 和larger是指number of objects),而不是将larger tree放在smaller tree的下面(如上图中的第一种情况) Examples: quick-union & weighted quick-union 从上面的这个例子可以看到用quick-union时的树的高度很大,而用weighted qui

Union-Find(并查集): Quick union算法

Quick union算法 Quick union: Java implementation Quick union 性能分析 在最坏的情况下,quick-union的find root操作cost(访问array的次数)会达到N. 所以quick-union的性能也不好.

IOSAPP之新手引导

1.在Main.storyboard中找到,ScrollView和PageControl. 2.在ScrollView中添加ImageView,新手引导页有几个图片就添加几个,然后设置ImageView的image,就是准备好的图片. 3.要设置好ScrollViewscroll View中的Left和View中的Width,使其等于图片的大小,还有就是图片大小的起始位置,第一张为(0,0),第二张的起始位置应该是(屏幕的宽度,0),以此类推. 4.添加PageControl,这个的起始位置要手

快速排序(Quick Sort)的C语言实现

快速排序(Quick Sort)的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序,具体步骤为 设立枢轴,将比枢轴小的记录移到低端,比枢轴大的记录移到高端,直到low=high停止 分别对枢轴低高端部分再次快速排序(即重复第1步) 重复第1.2步,直到low=high停止 C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章,转载请注明来自钢铁侠Mac博客http:/

hdu 4198:Quick out of the Harbour解题报告

Quick out of the Harbour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1441    Accepted Submission(s): 575 Problem DescriptionCaptain Clearbeard decided to go to the harbour for a few days so

QUICK 中的触摸事件

本文转载于:http://www.cocos2d-x.org/docs/manual/framework/quick/V3/touch-events/zh Cocos2d-x 原本的触摸机制存在一些限制,在使用中需要开发者做不少额外的处理.所以 Quick-Cocos2d-x 提出了自己的一套触摸机制.本文详细介绍了这套新机制的用法. 显示层级 在 Cocos2d-x 里,整个游戏的画面是由一系列的 Scene, Node, Sprite, Layer 等对象构成的.而所有这些对象都是从 Nod