cocos2dx_lua scorllView实现无限滚动代码
时间: 2024-03-15 22:47:21 浏览: 143
下面是使用 Lua 实现 scrollView 的无限滚动的示例代码:
```lua
local scrollView = ccui.ScrollView:create()
scrollView:setDirection(ccui.ScrollViewDir.horizontal)
scrollView:setContentSize(cc.size(600, 200))
scrollView:setInnerContainerSize(cc.size(1200, 200))
self:addChild(scrollView)
-- 添加节点
for i = 1, 5 do
local node = cc.LayerColor:create(cc.c4b(0, 255, 0, 255), 200, 200)
node:setPosition((i - 1) * 200, 0)
scrollView:addChild(node)
end
-- 添加节点的复制
local firstNode = scrollView:getChildren()[1]
local lastNode = scrollView:getChildren()[5]
local firstNodeCopy = firstNode:clone()
firstNodeCopy:setPosition(lastNode:getPositionX() + 200, 0)
scrollView:addChild(firstNodeCopy)
local lastNodeCopy = lastNode:clone()
lastNodeCopy:setPosition(firstNode:getPositionX() - 200, 0)
scrollView:addChild(lastNodeCopy)
-- scrollView 的回调函数
scrollView:addEventListener(function(sender, eventType)
if eventType == ccui.ScrollviewEventType.containerMoved then
local position = scrollView:getInnerContainerPosition()
if position.x < -200 then
local lastNode = scrollView:getChildren()[6]
scrollView:setInnerContainerPosition(cc.p(lastNode:getPositionX() + 200, 0))
elseif position.x > 1000 then
local firstNode = scrollView:getChildren()[2]
scrollView:setInnerContainerPosition(cc.p(firstNode:getPositionX() - 200, 0))
end
end
end)
```
这段代码实现的效果和前面提供的 C++ 代码一样,只不过是使用 Lua 语言编写的。需要注意的是,Lua 中的数组下标从 1 开始,而不是从 0 开始,所以在获取节点时需要将下标加 1。
另外,需要注意的是,如果在 C++ 中使用了 Lua,那么在使用 Lua 中的一些类时,需要用 ccui 前缀来代替在 C++ 中使用的 ui 前缀。例如,ccui.ScrollView:create() 代替 ui::ScrollView::create()。
阅读全文