Corona SDK object follows "swipe" direction?
我正在尝试做一些非常简单的事情,因为我是 Corona SDK 的新手,但我遇到了很多问题。
我想要完成的是当用户"滑动"、"甩动"、"甩动"屏幕的某个区域(设置为屏幕一半的图像)时,屏幕中间的球会移动以设定的速度向那个方向。没有物理或任何特别的东西。所以基本上,如果您以某个angular滑动图像,球将移动到该angular并最终离开屏幕,除非您再次向不同方向"滑动"球。
我目前拥有的是:
1 2 3 4 5 6 7 | 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)射门,我如何获得"投掷"的方向?
我是电晕新手,仍在尝试找出触摸事件。对我来说还是有点困惑。
感谢任何帮助和建议!谢谢大家!
您需要跟踪触摸的开始和结束位置:这就是轻弹。沿 x 和 y 的起点和终点之间的差异将给出球的运动方向。如果球速取决于用户轻弹的速度,那么您也需要跟踪时间。另外,我不确定你为什么要使力与物体的位置成正比:这意味着如果物体在 0,0 就没有力,那可能不是你想要的。您只需要一个与轻弹矢量成比例的力。时间的长短将决定时间。它看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
但是你说你不需要任何物理,但你施加力,你的意思是你只想设置速度?然后,您将调用
而不是
1 2 3 4 5 6 7 | 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 2 3 4 5 6 7 8 9 | 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 |