0

我是编程新手,我想知道您是否可以帮助我解决这个问题。我创建了一个简单的篮球游戏,您可以在其中拉回然后释放以发射球。我想知道如何使用箭头的图像来显示球的行进方向(它不必是确切的轨迹,只需一个直箭头)。另外,我希望箭头的 yScale 显示将应用多少线性脉冲。提前致谢!

这是我投篮的功能

local function ballTouched(event)
if ball.x == 100 and ball.y == 100 then
    if event.phase == "began" then
        display.getCurrentStage():setFocus(ball)
        arrow.alpha=1
    elseif event.phase == "ended" then
        physics.start()
        ball:applyLinearImpulse((event.xStart - event.x)/2, (event.yStart - event.y)/2, ball.x, ball.y)
        display.getCurrentStage():setFocus(nil)
        arrow.alpha=0
        man2.alpha=1
        man.alpha=0

    end
end
end

Runtime:addEventListener("touch", ballTouched)
4

1 回答 1

0

你应该知道你向后拉的角度。只需将箭头的 .rotation 值设置为相同的角度。

arrow.rotation = aimAngle

要跟进以下评论:

我假设您正在像 AngryBirds 弹弓一样将篮球拉回,或者您必须以某种方式触摸和拖动才能获得角度。您可以使用一些简单的角度数学来知道直角三角形的两条边的长度,并且可以使用反正切函数来计算角度。

local function angleBetween( srcX, srcY, dstX, dstY )
    local angle = ( math_deg( math_atan2( dstY-srcY, dstX-srcX ) )+90 )
    --if ( angle < 0 ) then angle = angle + 360 end
    return angle%360
end

其中 srcX 和 srcY 将是位置(或篮球的开始位置,如果你正在拖动它)和 dstX, dstY 将是你在结束阶段放松的 event.x, event.y。事件表有一个 xStart 和 yStart 成员,它们跟踪触摸事件的开始位置,所以也许

 aimAngle = angleBetween(event.xStart, event.yStart, event.x, event.y)

您可能需要使用其中一些数字来让它们按照您想要的方式排列(即您可能需要添加 180 或其他数字)

于 2013-10-14T00:57:28.577 回答