我是Lua的新手,我写了以下代码。
display.setStatusBar(display.HiddenStatusBar)
--Create the 'brush'
function paint(event)
locationX = event.x
locationY = event.y
brush = display.newCircle(locationX, locationY, 5)
end
Runtime:addEventListener("touch", paint)
只要点击/保持鼠标,每次调用paint
函数时,它都会在屏幕上放置一个圆圈。但是,我移动鼠标的速度越快(我使用的是Corona SDK),圆圈的间距越大,它就会中断线条的流动。
我怎么能改变这一点,以便画出流畅的线条,没有休息?
答案 0 :(得分:0)
根据您的代码,您在那里做的只是在触发触摸事件时放一个圆圈(因此display.newCircle
)。当您开始触摸屏幕时(在模拟器中单击鼠标),当您在屏幕上移动手指,以及当您松开手指或将手指从屏幕上移开时,会触发touch event。
在您的情况下,您将在第一次触摸屏幕时放置一个5像素的圆圈,手指在哪里移动,以及将手指/鼠标从屏幕上抬起的位置。您的问题出现在手指移动阶段或event.phase ="移动"。发生这种情况的原因是,您在移动过程中获得的触摸事件数量受限于您使用的硬件。因此,如果移动足够大,您的放置圆圈之间将放置触摸事件或您的情况下的函数paint
,因为此限制而未调用。
如果您只想要一条线,可以采用newLine方法而不是newCircle方法。您必须将您的触摸输入分为不同的阶段,然后开始","移动","结束"。在"开始期间"阶段你会发起你的新行。在"移动"或"结束"阶段,您创建(使用newLine函数)或使用append函数添加到现有行。
我没有测试过这段代码,但它可能看起来像这样:
local line --variable to hold the line object
local initX --initial X coordinate of touch
local initY --initial Y coordinate of touch
local lineCreated = false --Flag to check if line is already created
--Create the 'brush'
function paint(event)
locationX = event.x
locationY = event.y
if event.phase == "began" then --first touch
--Delete previous line (in this case no multiple lines)
if(line) then
line:removeSelf()
line = nil
end
--Set initX and initY with current touch location
initX = locationX
initY = locationY
elseif event.phase == "moved" then --during touch movement
if lineCreated then
--line has been created, just append to existing line
line:append(locationX, locationY)
else
--Line has not been created
--Make new line object, set color, and stroke width
line = display.newLine(initX, initY, locationX, locationY)
line:setStrokeColor( 0, 0, 1 )
line.strokeWidth = 5
--set line created flag to true
lineCreated = true
end
elseif event.phase == "ended" or event.phase == "cancelled" then --touch lifted
--append last touch location to the line
line:append(locationX, locationY)
end
return true
end
Runtime:addEventListener("touch", paint)
这是一条基本线,因此角落可能不平滑。要制作流畅的线条,您需要应用比较复杂的算法,例如贝塞尔曲线。对于其他编程语言有很多讨论(重要的是算法,当你更熟悉Lua时,你可以很容易地将它用于Corona,Lua是一种相对容易学习的语言)。您可以获得数学路径here,并且可以找到Corona的一个来源here。