ScrollView
我想玩兒過手機的朋友對滑動條都不陌生吧,(旁邊: 這不是廢話麼???? )
那好吧,廢話不多說直接開始ScrollView吧
local m_BaseNode -- 主場景
local CreateScroll -- 房間分級滑動視圖
local CreateStageNode -- 創建節點
local m_ScrollView -- 滑動層變量
local m_Inner -- 內容器
local addScrollHBtnNode -- 添加滑動節點
local addScrollHTouchEventListener -- 滑動節點監聽
local m_DataInfo = { -- 數據表
{png = "doudizhu", fun = function () OnDouDiZhu() end},
{png = "yixiazai", fun = function () OnZhaJinHua() end},
{png = "yixiazainiuniu", fun = function () OnNiuNiu() end}
}
CreateScroll
= function ( )
print("創建滑動視圖" )
local stageStartX
= 150 --開始位置
local stageOffX
= 300
-- 偏移
local stageX
= stageStartX -- 當前stage位置
-- 創建內容器
m_Inner = cc.NodeRGBA:create()
-- 創建全部 stage
for i=1,#m_DataInfodo
local stageNode
= CreateStageNode(i, cc.size(width, height) )
-- 函數在下面這裏是滑動條中單個選項圖片的寬和高
local btn = addScrollHBtnNode(m_Inner,stageNode,
m_DataInfo[i].fun,
stageX, 250
) -- 函數再下面,將 stageNode 添加到內容器中
stageX = stageX + stageOffX
end
-- 創建ScrollView
m_ScrollView = cc.ScrollView:create(cc.size(900, 430), m_Inner)
-- 設置內容器的大小
m_ScrollView:setContentSize(cc.size(stageX - stageStartX, 380))
-- 設置滑動的方向 0 是水平方向 1是垂直方向 2 是水平垂直都可以
m_ScrollView:setDirection(0)
m_ScrollView:setPosition(cc.p(65, 210))
--將m_ScrollView添加到m_BaseNode中
m_BaseNode:addChild(m_ScrollView)
collectgarbage( "setpause", 100)
collectgarbage( "setstepmul", 5000)
end
-- 創建節點函數
CreateStageNode = function (stageID, size)
-- 創建節點
local stageNode = CCLayer:create()
stageNode:setContentSize(size.width, size.height)
stageNode:setTag(stageID)
addSprite(stageNode, m_DataInfo[stageID].png, 0, 0)
-- 設置顯示的字
-- 在這裏可以向每個節點中添加相應的信息
-- 返回節點
return stageNode
end
-- p : 層 name : 圖片名字(plist文件中) x y : 座標
function addSprite( p, name, x, y, a, z ,scale)
local sf = CCSpriteFrameCache:getInstance():getSpriteFrame( name )
local s = CCSprite:createWithSpriteFrame( sf )
if not s then s = CCSprite:createWithSpriteFrameName( "wrong" ) end
if z then p:addChild( s, z ) else p:addChild( s ) end
if x and y then s:setPosition(x, y) end
if a then s:setAnchorPoint( a ) end
s:setScale(scale or 1.0)
return s
end
-- 添加滑動節點
-- p : 層 btnNode : 節點 cb : 點擊後的回調函數
addScrollHBtnNode = function ( p, btnNode, cb, x, y, z, a, scale )
local layer = CCLayer:create()
layer:addChild(btnNode)
btnNode:setAnchorPoint(sys.ap.topCenter)
btnNode:setPosition({0,0})
p:addChild(layer)
layer:setContentSize({width=btnNode:getContentSize().width,height=btnNode:getContentSize().height})
if a then
layer:setAnchorPoint(a)
else
layer:setAnchorPoint(sys.ap.leftTop)
end
if x and y then layer:setPosition(x,y) end
if cb then addScrollHTouchEventListener(layer,cb) end
return layer
end
-- 滑動節點監聽函數
addScrollHTouchEventListener = function ( btn, cb )
-- handing touch events
local touchBeginPoint = nil
local touchMovePoint = nil
local isMove = false
local moveDis = 5
local function onTouchBegan(touch, event)
isMove = false
local location = touch:getLocation()
touchBeginPoint = {x = location.x, y = location.y}
local s = btn:getContentSize()
local rect = { x=-s.width/2, y=-s.height/2, width=s.width, height=s.height }
local touchP = btn:convertToNodeSpace( touchBeginPoint )
if Point_In_Rect(rect, touchP) then
btn:setScale(1.1)
end
return true
end
local function onTouchMove(touch, event)
local location = touch:getLocation()
touchMovePoint = {x = location.x, y = location.y}
if math.abs(touchBeginPoint.x - touchMovePoint.x) > moveDis then
isMove = true
btn:setScale(1.0)
end
end
local function onTouchEnd(touch, event)
local location = touch:getLocation()
touchBeginPoint = {x = location.x, y = location.y}
local s = btn:getContentSize()
local rect = { x=-s.width/2, y=-s.height/2, width=s.width, height=s.height }
local touchP = btn:convertToNodeSpace( touchBeginPoint )
if Point_In_Rect(rect, touchP) and not isMove then
if cb then
cb()
end
end
btn:setScale(1.0)
end
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(false) --允許消息向下流轉
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(onTouchMove,cc.Handler.EVENT_TOUCH_MOVED )
listener:registerScriptHandler(onTouchEnd,cc.Handler.EVENT_TOUCH_ENDED )
local eventDispatcher = btn:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, btn)
end
-- 鬥地主回調函數
OnDouDiZhu = function ()
print("鬥地主..........")
end
-- 扎金花回調函數
OnZhaJinHua = function ()
print("炸金花..........")
end
-- 牛牛回調函數
OnNiuNiu = function ()
print("牛牛............")
end
旁白呢?????
旁白:( 找我幹嘛???給我講完啦??啊啊啊啊啊啊,這麼點東西你要寫這麼多啊)
呵呵。。。。。。。。。。
說實話,開始這點東西我找了很久都沒有找到,最後終於搞懂了,所以寫出來給大家分享