滚动组时如何平滑? - livecode

时间:2014-05-19 09:01:32

标签: livecode

我想在滚动组时顺利进行。组中有三个图像。我想制作幻灯片。

当我滚动组并释放它时。我希望它顺利。

这是我的代码:

local sScrolling
local sInitialMouseX, sInitialMouseY
local sInitialHScroll, sInitialVScroll

on mouseDown
   ## Allow the group to scroll
   put true into sScrolling

   ## Record the initial touch position
   put item 1 of the mouseLoc into sInitialMouseX
   put item 2 of the mouseLoc into sInitialMouseY

   ## Record the initial hScroll and vScroll
   put the vScroll of me into sInitialVScroll
   put the hScroll of me into sInitialHScroll
end mouseDown

on mouseMove mouseX, mouseY
   ## If the screen is being touched then
   if sScrolling then      
      ## Calculate how far the touch has moved since it started
      put mouseY - sInitialMouseY into tVChange
      put mouseX- sInitialMouseX into tHChange

      ## Reset the hScroll and vScroll to follow the touch
      lock screen
      set the vScroll of me to sInitialVScroll - tVChange
      set the hScroll of me to sInitialHScroll - tHChange
      put the hScroll of me into lastPoint
      unlock screen
   end if
end mouseMove

on mouseRelease
   mouseUp
end mouseRelease

on mouseUp
   put false into sScrolling
end mouseUp 

1 个答案:

答案 0 :(得分:2)

如果不详细查看您的代码,我无法评论算法来执行实际移动。我建议使用acceleRendering功能,虽然它指示LiveCode缓存组的内容,因此渲染速度更快。

on preOpenStack
  set the acceleratedRendering to true
end preOpenStack

以上代码打开了该功能。 LiveCode中的加速渲染功能使引擎在缓存的小块中呈现堆栈。 GPU(图形芯片)负责在每次操作系统刷新屏幕时将所有这些图块合成在一起(例如,在iOS上大约每秒60帧)。如果磁贴没有改变,GPU只是显示它......如果某些东西发生了变化,即你移动了一个控件,那么覆盖该控件的磁贴就会重新绘制。

要正确帮助LiveCode缓存,您需要向其提供有关卡上控件及其代表内容的一些信息。您可以通过设置layerMode来完成此操作。它可以是三个选项之一:

  1. static(默认) - 控件不移动或更改
  2. 动态 - 控件正在移动或更改
  3. 滚动(仅限群组) - 该群组包含正在滚动的内容
  4. 所以在你的情况下我也会做以下事情:

    set the layerMode of group "scrollingGroup" to "scrolling" 
    

    尝试一下,它应该加快渲染速度,使您更容易在图像之间编写一个漂亮的平滑过渡。