方式1:
local MainScene = class("MainScene", cc.load("mvc").ViewBase)
function MainScene:onCreate()
-- add background image
local layer = cc.Layer:create()
layer:addTo(self)
layer:addChild(display.newSprite("bg_0.jpg"):move(display.center))
-- add HelloWorld label
--local startBtn = cc.Label:createWithSystemFont("开始", "Arial", 20)
local startBtn = cc.Sprite:create("GameScene_nn.png", cc.rect(760,0,250,80))
startBtn:setScale(0.25,0.25)
startBtn:move(display.center)
layer:addChild(startBtn)
--local tmpLayer = cc.Layer.create()
local startLb = cc.Label:createWithSystemFont("开始", "Arial", 40)
startBtn:addChild(startLb)
startLb:setPosition(120,50)
local function touchBegan(touch, event)
--取得注册事件的节点,这里是layer
local node = event:getCurrentTarget()
--touch:getPreviousLocationInView():取得之前触摸点的位置信息 UI坐标
--getPreviousLocation() :OpenGL坐标
--getLocationInView():当前坐标
--getLocation():
print(touch)
return false
end
local function touchMoved(touch, event)
return false
end
local function touchEnded(touch, event)
return false
end
local function touchCanceled(touch, event)
return false
end
local listen = cc.EventListenerTouchOneByOne:create()
listen:registerScriptHandler(touchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
listen:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)
listen:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)
listen:registerScriptHandler(touchCanceled,cc.Handler.EVENT_TOUCH_CANCELLED)
local eventDispatcher = layer:getEventDispatcher()
--节点添加的先后顺序为优先级的添加监听器方式,节点越上层,优先级越高
--eventDispatcher:addEventListenerWithSceneGraphPriority(listen,layer)
--void EventDispatcher::addEventListenerWithFixedPriority(EventListener* listener, int fixedPriority)
--固定优先级的添加监听器方式,fixedPriority>0, 数值越小,优先级越高
eventDispatcher:addEventListenerWithFixedPriority(listen, 1)
end
return MainScene
方式2:
local function onTouch(eventType, x, y)
if eventType == "began" then
return true
elseif eventType == "ended" then
return onTouchEnded(x, y)
end
end
layer:setTouchEnabled(true)
layer:registerScriptTouchHandler(onTouch)
示例: 按钮点击后大小变化
local MainScene = class("MainScene", cc.load("mvc").ViewBase)
function MainScene:onCreate()
-- add background image
local layer = cc.Layer:create()
layer:addTo(self)
layer:addChild(display.newSprite("bg_0.jpg"):move(display.center))
-- add HelloWorld label
--local startBtn = cc.Label:createWithSystemFont("开始", "Arial", 20)
local startBtn = cc.Sprite:create("GameScene_nn.png", cc.rect(760,0,250,80))
startBtn:setScale(0.25,0.25)
startBtn:move(display.center)
layer:addChild(startBtn)
--local tmpLayer = cc.Layer.create()
local startLb = cc.Label:createWithSystemFont("开始", "Arial", 40)
startBtn:addChild(startLb)
startLb:setPosition(120,50)
local startBtn1 = cc.Sprite:create("GameScene_nn.png", cc.rect(760,0,250,80))
startBtn1:setScale(0.25,0.25)
startBtn1:setPosition(cc.p(200,100))
--startBtn1:move(display.center)
layer:addChild(startBtn1)
local function touchBegan(touch, event)
local node = event:getCurrentTarget()
local location = node:convertToNodeSpace(touch:getLocation())
local targetSize = node:getContentSize()
local rect = cc.rect(0,0,targetSize.width, targetSize.height)
if cc.rectContainsPoint(rect, location) then
node:setScale(0.21,0.21)
if node==startBtn then
print("click button 1")
else
print("click button 2")
end
end
return true
end
local function touchMoved(touch, event)
print("touchMoved")
return false
end
local function touchEnded(touch, event)
local node = event:getCurrentTarget()
node:setScale(0.25,0.25)
return true
end
local function touchCanceled(touch, event)
print("touchCanceled")
return false
end
local listen = cc.EventListenerTouchOneByOne:create()
listen:registerScriptHandler(touchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
listen:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)
listen:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)
listen:registerScriptHandler(touchCanceled,cc.Handler.EVENT_TOUCH_CANCELLED)
--local eventDispatcher = layer:getEventDispatcher()
local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listen,startBtn)
local listen1 = listen:clone()
eventDispatcher:addEventListenerWithSceneGraphPriority(listen1,startBtn1)
end
return MainScene