Lua Corona - 如何在滑动期间监听widget.newScrollView监听器

我在我的widget.newScrollView组件背后放了一张背景图片。 我想要以我的newScrollView的一半速度移动我的背景图片。 当我释放鼠标时,这在我拖动我的滚动视图时工作得很好,但滚动视图继续滑动,但我的背景停止移动。请告诉我如何捕捉滑动事件。 非常感谢

这是我的一些代码:

local function scrollListener( event )
    local phase = event.phase
    if ( phase == "began" ) then print( "滚动视图被触摸" )
    elseif ( phase == "moved" ) then print( "滚动视图被移动" )
        nebulaeBgnd.x = event.x/2;
    elseif ( phase == "ended" ) then print( "滚动视图被释放" )
    end
end

local a1 = display.newImage( "planetHexs/001.png", _topLeft_x, _topLeft_y);

local scrollView = widget.newScrollView(
{
    top = 0,
    left = 0,
    width = display.actualContentWidth,
    height = display.actualContentHeight,
    scrollWidth = 0,
    scrollHeight = 0,
    listener = scrollListener,
    backgroundColor = { 0, 0, 0},
    verticalScrollDisabled=true;
}

scrollView:insert( a1 )
点赞
用户1381216
用户1381216

你可以通过添加一个运行时 enterFrame 监听器来实现这个。我们在我们的游戏中偶尔会这样做并且这个方法非常有效。比如:

Runtime:addEventListener("enterFrame", function()
    local scrollX, scrollY = scrollView:getContentPosition()
    nebulaeBgnd.x = scrollX * 0.5 -- Tip: multiplication is faster than division
end)

这会不断地监听滚动视图的位置,无论它是否被点击。你可能需要通过添加或减去屏幕宽度的一半来补偿 x ,这取决于你的滚动视图的位置设置。你可以在 这里 了解有关 getContentPosition 的更多信息。

关于运行时事件监听器的一个 非常重要的 注意事项:

另一方面,运行时事件监听器在结束使用后必须被移除。否则,它们将继续运行,因为运行时事件是全局的。这不仅会导致内存泄漏,而且如果运行时中执行的任何函数尝试引用不再存在的对象,程序将崩溃。有关更多信息,请参见下面的《移除事件监听器》。

这里是有关移除事件监听器的文档

2016-09-30 16:03:20