用旋转定义坐标(corona sdk)

时间:2014-01-14 16:12:01

标签: corona

我已经问了我的问题,有人回答我,但即使找不到答案。
所以这是我的问题,我正在制作基于射击游戏,我的射手是中间的圆圈。我可以通过触摸屏幕轻松旋转它,并且通过一些数学运算,射手在我触摸的位置显示。 (使用event.x和event.y。
而且我想向我的射手所展示的方向射击子弹。我知道射手的坐标,我知道射手的旋转。
答案是使用三角学,问题是,我如何使用三角学来找到我的坐标?
我想使用转换函数,因为我需要这些坐标。如果有人知道另一种让子弹在没有那些坐标和/或过渡功能的情况下旅行的方法,那就太可爱了! 提前谢谢,
Fannick!
Image:

3 个答案:

答案 0 :(得分:0)

这不太理想,但它可以帮助您了解有关CoronaSDK的更多信息以及您想要做什么。

local touchedX -- the X coordinate of the touch
local touchedY -- the Y coordinate of the touch
local shooterX -- the X coordinate of the shooter
local shooterY -- the Y coordinate of the shooter

local bullet = display.newImage( "bullet.png") -- the image for the bullet
bullet.x = shooterX
bullet.y = shooterY

--this is what is going to move the bullet from the shooter to the place you touched
transition.to( bullet, {time = 100, x = touchedX, y = touchedY} )

答案 1 :(得分:0)

  

编辑:我发现为什么我找不到与我的计算器相同的解决方案,math.tan只能使用弧度!这就是为什么它给了我一些完全随意的价值观。一旦我完成,我会分享你的代码!

所以这是我发现的代码,我使用200pi乘200pi的屏幕作为例子,
“c”是我的射击游戏,它位于屏幕中间,所以c.x = 100且c.y = 100.如上所述,我可以通过一个事件来转动射手。

if c.rotation <= 45 and c.rotation >= 0 then
    bulletX = 200
    bulletY = 100 + math.tan( c.rotation ) * 100
end
if c.rotation > 45 and c.rotation <= 90 then
    bulletX = 100 + math.tan( 90 - c.rotation ) * 100
    bulletY = 200
end
    if c.rotation > 90 and c.rotation <= 135 then
    bulletX = 100 - math.tan( c.rotation - 90 ) * 100
    bulletY = 200
end
    if c.rotation > 135 and c.rotation <= 180 then
    bulletX = 0
    bulletY = 100 + math.tan( 180 - c.rotation ) * 100
end
    if c.rotation > 180 and c.rotation <= 225 then
    bulletX = 0
    bulletY = 100 - math.tan( c.rotation - 180 ) * 100
end
    if c.rotation > 225 and c.rotation <= 270 then
    bulletX = 100 - math.tan( 270 - c.rotation ) * 100
    bulletY = 0
end
    if c.rotation > 270 and c.rotation <= 315 then
    bulletX = 100 + math.tan( c.rotation - 270 ) * 100
    bulletY = 200
end
    if c.rotation > 315 and c.rotation <= 360 then
    bulletX = 200
    bulletY = 100 - math.tan( 360 - c.rotation ) * 100
end

如果我用我的计算器做代码,代码实际上是完美的 但是,我不是为什么但是电晕sdk没有相同的结果...
有谁知道为什么?

答案 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