1.遍历 layer 的 children
local function allChildren( parent )
local nodes = parent:getChildren()
if nodes then
for idx=1, nodes:count() do
local chilNode = nodes:objectAtIndex(idx - 1)
local node = tolua.cast(chilNode, "CCSprite")
node:setOpacity(0)
allChildren(node)
end
end
end
2.基础控件
local function addSprite(img, pos, scale, zorder, parent)
local sprite = CCSprite:createWithTexture( CCTextureCache:sharedTextureCache():addImage(img) )
sprite:setScale(scale)
sprite:setPosition(pos)
parent:addChild(sprite, zorder)
return sprite
end
local function addLabel(text, type, size, pos, color, parent, zorder)
local label = CCLabelTTF:create(text, type, size);
label:setPosition(pos)
label:setColor(color)
parent:addChild(label, zorder)
return label
end
local function addMenu(imgn, imgs, imgd, callback, pos, scale, parent, zorder)
local sNormal = CCSprite:createWithTexture(CCTextureCache:sharedTextureCache():addImage(imgn))
local sSelected = CCSprite:createWithTexture(CCTextureCache:sharedTextureCache():addImage(imgs));
local sDisabled = CCSprite:createWithTexture(CCTextureCache:sharedTextureCache():addImage(imgd));
local item = CCMenuItemSprite:create(sNormal, sSelected, sDisabled)
item:registerScriptTapHandler(callback)
item:setPosition(pos)
item:setScale(scale)
local menu = CCMenu:create()
menu:addChild(item)
menu:setPosition(CCPoint(0, 0))
parent:addChild(menu, zorder)
return item
end
3.ScrollView
local function addScroll( size, csize, parent)
local scroll = CCScrollView:create(size)
scroll:setDirection(kCCScrollViewDirectionVertical)
parent:addChild(scroll)
scroll:setContentOffset(CCPoint(0, 0))
local sLayer = CCLayerColor:create(ccc4(120, 0, 0, 0), size.width, sLayerH)
scroll:addChild(sLayer)
scroll:setContentSize(CCSize(size.width, sLayerH)) —一般和laye大小相等
end
3.定时方法
local function scheduleT(dt) —dt接近 2
print('scheduleT '..dt)
end
local scheduler = CCDirector:sharedDirector():getScheduler()
local schedulerEntry = scheduler:scheduleScriptFunc(scheduleT, 2.0, false)
scheduler:unscheduleScriptEntry(schedulerEntry)
4.触屏事件
local function touchFunc(eventType, x, y)
if eventType == CCTOUCHBEGAN then
-- print('tttt '..x[1]) 多点触控
-- print('tttt '..x[2])
print('tttt '..x)
return true --return true CCTOUCHBEGAN 事件不会在向上传递, 上层按钮可能不好使
elseif eventType == CCTOUCHMOVED then
elseif eventType == CCTOUCHENDED then
end
end
pLayer = CCLayerColor:create(ccc4(0, 0, 0, 180), winSize.width, winSize.height)
runScene:addChild(pLayer, 99, 1010)
pLayer:setTouchEnabled(true)
-- pLayer:setTouchMode(kCCTouchesAllAtOnce) 多点触控
pLayer:setTouchMode(kCCTouchesOneByOne)
pLayer:setTouchPriority(kCCMenuHandlerPriority - 103)
pLayer:registerScriptTouchHandler(touchFunc)
1.layer 可以通过 setTouchPriority(kCCMenuHandlerPriority - 10),设置的层比按钮的层低,在begin的时候 return true可以屏蔽下面的按钮事件,
按钮事件主要在begin里响应,move 和 end 不会触发按钮事件。
2.Sprite 不能注册触摸事件 registerScriptTouchHandler
3.一个 scne 上多个layer 注册了触摸事件。
begin:setTuchPriority 最低的先响应,有一层返回 true 了高层的不会响应。
move:那层begin返回true那层的move响应,与setTuchPriority无关,没有layer的begin返回true,move不会触发
end: 同move
注意:如果layer的begin没有返回true,move和end不会响应
4.move事件响应
local function touchz(eventType, x, y)print('touchz1 '..x)
if eventType == CCTOUCHBEGAN then
return true
elseif eventType == CCTOUCHMOVED then
print('touchz2 move '..x)
elseif eventType == CCTOUCHENDED then
end
end
移动时候不会在输出 print('touchz1 '..x),move时候只调用print('touchz2 move '..x)。
5.进度条
local function addProgress(img, direc, percent, pos, anch, parent)
local spt = CCProgressTimer:create(CCSprite:create(img))
spt:setMidpoint(CCPoint(0,0))
spt:setBarChangeRate(direc) --竖:1, 0、横:0, 1
spt:setType(kCCProgressTimerTypeBar) --kCCProgressTimerTypeRadial kCCProgressTimerTypeBar
spt:setPosition(pos)
spt:setAnchorPoint(anch)
spt:setScale(0.5)
spt:setPercentage(percent)
parent:addChild(spt, 1)
return spt
end
local spt = addProgress('hello.png', CCPoint(1, 0), 30, CCPoint(160, 228), CCPoint(0.5, 0.5), pLayer)
local pto = CCProgressTo:create(2, 100)
spt:runAction(pto);