Corona SDK对象遵循“滑动”方向?

时间:2014-06-11 22:18:05

标签: lua corona

我正在尝试做一些非常简单的事情,因为我是Corona SDK的新手,但我遇到了很多问题。

我想要完成的是当用户“滑动”,“翻转”,“轻弹”屏幕的某个区域(图像设置为屏幕的一半)时,屏幕中间的一个球移动那个方向以一定的速度。没有物理或任何特殊的东西所以基本上,如果你以一定角度滑动图像,球会移动到那个角度并最终离开屏幕除非你再次向另一个方向“刷”球。

到目前为止我所拥有的是:

physics.addBody( ball, "dynamic" )

function flick(event)
    if event.phase == "moved" then
        ball:applyForce( (ball.x) * 0.5, (ball.y) * 0.5, ball.x, ball.y )
    end
end

目前当你移动球时它只向一个方向射击(0.5)我怎么会得到“甩”的方向?

我是新来的电晕,还在试图找出触摸事件。对我来说还是有点困惑。

感谢任何帮助和建议!谢谢大家!

2 个答案:

答案 0 :(得分:2)

您需要跟踪触摸开始和结束的位置:这就是轻弹。沿x和y的开始和结束之间的差异将给出球的运动方向。如果球速取决于用户轻弹的速度,您也需要跟踪时间。另外,我不确定你为什么要使力与物体的位置成比例:这意味着如果物体在0,0处没有力,那可能不是你的意思想。你只需要一个与轻弹矢量成比例的力。时间量将决定时间。它看起来像这样:

local flickStartTime = 0

local function touch(event)
    if event.phase == "began" then
        flickStartTime = system.timer()

    elseif event.phase == "ended" then
        local flickDuration = system.timer() - flickStartTime 
        if flickDuration <= 0 then return end -- ignore flick

        local speedX = (event.xStart - event.x)/flickDuration 
        local speedY = (event.yStart - event.y)/flickDuration 
        local coef = 0.1 -- adjust this via "trial and error" so moves at "reasonable" speed
        -- only react to flick if it was large enough
        if math.abs(event.xStart - event.x) > 10 or math.abs(event.yStart - event.y) > 10 then
            ball:applyForce( coef * speedX, coef * speedY, ball.x, ball.y )
        end
    end
end

但是你说你不想要任何物理,但是你施加力,你的意思是你只想设定速度吗?然后,您可以拨打applyForce

而不是setLinearVelocity(speedX, speedY)
local speedX = (event.xStart - event.x)/flickDuration 
local speedY = (event.yStart - event.y)/flickDuration 
local coef = 0.1 -- adjust this via "trial and error" so moves at "reasonable" speed
-- only react to flick if it was large enough
if math.abs(event.xStart - event.x) > 10 or math.abs(event.yStart - event.y) > 10 then
    ball:setLinearVelocity( coef * speedX, coef * speedY )
end

答案 1 :(得分:0)

从外观上看,flick是一个触控倾听者。您必须过滤传递的事件,并确定用户滑动的方向。详细了解touch listeners here

您感兴趣的是xStartyStart属性,并衡量用户移动的数量,如下所示:

local function flick(event)
    if event.phase == "moved" then
        local diffX = event.xStart - event.x
        local diffY = event.yStart - event.y
        if math.abs(diffX) > 10 or math.abs(diffY) > 10 then
            ball:applyForce( (ball.x) * diffX, (ball.y) * diffY, ball.x, ball.y )
        end
    end
end