旋转射球(过渡)

时间:2014-01-12 22:00:33

标签: corona

我正在制作一款基于射手的游戏。 我的射击游戏位于屏幕中间,当我用event.x,event.y触摸屏幕时,我可以移动射手的旋转,但是有我的问题: 我想制作一个按钮,从射手向射手所朝的方向射击子弹。 我知道我可以用三角函数来解决这个问题,但我正在寻找一种更简单的方法。 任何人都知道如何通过轮换进行转换? 谢谢, Fannick

3 个答案:

答案 0 :(得分:1)

老实说,我现在还不知道是否有可能在没有三角测量的情况下解决这个问题(而且我很匆忙所以我没有时间考虑一下),但即使有我非常怀疑这会使这个过程变得更容易。

“罪”和“cos”是两个对初学者来说相当恐怖的功能,特别是在这样的环境中,但老实说,它们非常温和。你能做的最好的事情就是上网并搜索三角函数的一些解释(一些大学教授发表他们的讲座文档,并且通常很好地向刚刚开始学习的初学者解释它)并且你会得到它这很快。由于知道如何将这些知识应用于进一步的问题可以证明以后非常有用,找到一个不必使用三角法的“解决方法”根本不值得。

答案 1 :(得分:0)

您可以使用Corona物理模块。它可能会更容易,如果您也需要,您甚至可以轻松实现碰撞检测。 看看这些链接:

使用物理引擎,您只需将引力设置为0,使用addBody()将子弹添加到物理引擎,然后对子弹施加冲动,使其沿您想要的方向(目标)移动applyLinearImpulse()。

答案 2 :(得分:0)

所以他就是这样! :)从中间的一个物体,以物体的旋转度数,它将定义子弹将在过渡到的位置拍摄,注意“c”是射手,“h”是display.contentHeight和“ w“display.contentWidth。我还将bulletX和bulletY定义为子弹的第二个版本。

    if c.rotation <= math.deg(math.atan((h/2)/(w/2))) and c.rotation >= 0 then
    bulletX = w
    bulletY = h/2 + w/2 * math.tan( (c.rotation * math.pi)/180 )

elseif c.rotation > math.tan(math.rad((h/2)/(w/2))) and c.rotation <= 90 then

    bulletX = w/2 + math.tan( (90 * math.pi) / 180  - (c.rotation * math.pi ) / 180) * h/2
    bulletY = h

elseif c.rotation > 90 and c.rotation <= 90 + math.deg( math.atan( (w/2) / (h/2) ) ) then

    bulletX = w/2 - math.tan( ((c.rotation * math.pi)/180) - ((90 * math.pi) / 180)) * h/2 
    bulletY = h

elseif c.rotation > 90 + math.deg( math.atan( (w/2) / (h/2) ) ) and c.rotation <= 180 then
    bulletX = 0
    bulletY = h/2 + math.tan( math.pi - ((c.rotation*math.pi) / 180)) * w/2

elseif c.rotation > 180 and c.rotation <= 180 + math.deg( math.atan ((h/2)/(w/2))) then
    bulletX = 0
    bulletY = h/2 - math.tan( ((c.rotation * math.pi)/180) - math.pi) * w/2

elseif c.rotation > 180 + math.deg( math.atan ((h/2)/(w/2))) and c.rotation <= 270 then
    bulletX = w/2 - math.tan( ((270 * math.pi) / 180) - ((c.rotation * math.pi) / 180)) * h/2
    bulletY = 0

elseif c.rotation > 270 and c.rotation <= 270 + math.deg(math.atan((w/2)/(h/2))) then
    bulletX = w/2 + math.tan( ((c.rotation * math.pi)/180) - ((270 * math.pi)/180)) * h/2
    bulletY = 0

elseif c.rotation > 270 + math.deg(math.atan((w/2)/(h/2))) and c.rotation <= 360 then
    bulletX = w
    bulletY = h/2 - math.tan( ((360 * math.pi)/180) - ((c.rotation * math.pi) / 180) ) * w/2
end