-- 创建遮罩层
function SwallowTouchLayer:create(color,width,height)
self.swallowTouchLayer = CCLayerColor:create(color,width,height);
self.swallowTouchLayer:setTouchEnabled(true);
-- 第一个参数为回调函数,第二个标志是否支持多点触控,
-- 第三个设置触屏事件的优先级,第四个为是否阻止事件往向优先级较低的层发送。
self.swallowTouchLayer:registerScriptTouchHandler(function (...) return self:onTouch(...)
end, false, -128, true);
-- 初始化屏蔽范围,默认为可视范围
local visibleSize = CCDirector:sharedDirector():getVisibleSize();
self.rect = CCRect(0,0,visibleSize.width,visibleSize.height);
end
-- 设置屏蔽范围
function SwallowTouchLayer:setSwallowRect(rect)
self.rect = rect;
end
function SwallowTouchLayer:onTouch(eventType, x, y)
if eventType == "began" then
return self:ccTouchBegan(x,y);
elseif eventType == "moved" then
return self:ccTouchMoved(x,y);
else
return self:ccTouchEnded(x,y);
end
end
function SwallowTouchLayer:ccTouchBegan(...)
-- 判断触点是否在屏蔽区域内
local point = CCPoint(arg[1], arg[2]);
if self.rect:containsPoint(point) then
return true;
end
return false;
end
function SwallowTouchLayer:ccTouchMoved(...)
end
function SwallowTouchLayer:ccTouchEnded(x,y)
end
function SwallowTouchLayer:ccTouchCancelled(...)
end
return SwallowTouchLayer;
在 cocos2d-x的学习过程中,发现很多事件注册相关的函数都提供了脚本专用的函数通常都为registerScript开头,在脚本中注册这些相关事件必须调用这些函数,C++版本的事件注册函数大部分是无法正常使用的。还应该特别留心注意的是注册Table内函数的时候应使用一个匿名函数返回该函数的方式调用,防止传参错误。