cocos2dx_lua scorllView实现完美流畅无限滚动代码
时间: 2024-03-16 09:40:59 浏览: 120
下面是使用cocos2dx_lua实现完美流畅无限滚动的scrollView的代码:
```lua
local scrollViewSize = scrollView:getContentSize()
local containerSize = cc.size(scrollViewSize.width, scrollViewSize.height * 3)
local container = cc.Node:create()
container:setContentSize(containerSize)
-- 添加三个子节点
for i = 1, 3 do
local node = cc.Node:create()
node:setContentSize(scrollViewSize)
node:setPosition(cc.p(scrollViewSize.width / 2, scrollViewSize.height * (i - 0.5)))
container:addChild(node)
end
-- 设置scrollView
scrollView:setContentSize(scrollViewSize)
scrollView:setInnerContainerSize(containerSize)
scrollView:addChild(container)
-- 滚动回调函数
local function onScrollEvent(sender, eventType)
if eventType == ccui.ScrollviewEventType.scrollToTop then
-- 向上滚动,把底部的子节点移到顶部
local bottomNode = container:getChildByTag(1)
bottomNode:setPositionY(scrollViewSize.height * 2.5)
bottomNode:setTag(3)
container:insertChild(bottomNode, 3, true)
elseif eventType == ccui.ScrollviewEventType.scrollToBottom then
-- 向下滚动,把顶部的子节点移到底部
local topNode = container:getChildByTag(3)
topNode:setPositionY(scrollViewSize.height * 0.5)
topNode:setTag(1)
container:insertChild(topNode, 1, true)
end
end
scrollView:addScrollViewEventListener(onScrollEvent)
```
这段代码的实现原理是将三个大小相同的子节点添加到scrollView的内部容器中,并且将它们依次排列。当用户向上或向下滚动scrollView时,根据滚动的方向将容器中的子节点移动到相应的位置,从而实现无限滚动的效果。
阅读全文