Corona SDK - 在播放器周围旋转“世界”

时间:2014-05-03 16:12:13

标签: lua rotation corona

我试图创建一个简单的游戏,玩家控制一个在“世界”中移动的船只。#34;。让这个变得有点棘手的是我想要旋转'#34; world"当船转弯时,船的前部总是面向电话屏幕的顶部。

我创建了一个包含" world"以及我称之为cameraLayer的船只以及#34;跟随"船周围。所有这一切都很好,因为我可以移动船只并始终将其保持在手机屏幕的中央。但是,我无法让cameraLayer相对于船只旋转正确旋转。

这是两组的代码:

physicsLayer = display.newGroup()
physicsLayer:insert(bg)
physicsLayer:insert(player)

cameraLayer = display.newGroup()
cameraLayer:insert(physicsLayer)
cameraLayer.rotation = 0
cameraLayer.xScale = 1
cameraLayer.yScale = 1
cameraLayer.anchorX = 0.5
cameraLayer.anchorY = 0.5
cameraLayer.x = centerX
cameraLayer.y = centerY
cameraLayer.angle = 0

这里是移动功能:

local function move()

    player.x = player.x + Cos( Rad(player.angle) ) * 2
    player.y = player.y + Sin( Rad(player.angle) ) * 2 

    cameraLayer.x = cameraLayer.x - Cos( Rad(cameraLayer.angle) ) * 2
    cameraLayer.y = cameraLayer.y - Sin( Rad(cameraLayer.angle) ) * 2   

end

这里是旋转功能:

local function enterFrameListener(key)
    if holding then
        if leftKey.isFocus == true then
            player.angle = player.angle - 3
            player.rotation = player.rotation - 3

            cameraLayer.angle = cameraLayer.angle - 3
        elseif rightKey.isFocus == true then
            player.angle = player.angle + 3
            player.rotation = player.rotation + 3

            cameraLayer.angle = cameraLayer.angle + 3
        end
    else
        -- Not holding
    end
end

我尽可能地尝试研究,但我找不到任何可以帮助我解决问题的方法。任何形式的帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

你最后的评论让我记忆犹新 - 你需要不断调整世界的锚点,使它围绕你的船只旋转。我将船保持在世界之上并使用下面的代码重置世界锚点 - 希望这将有所帮助! :d

-- position the map in the viewport
function viewport:positionMap( x, y )
    aX = ( mapSize * 0.5 + x ) / mapSize
    aY = ( mapSize * 0.5 + y ) / mapSize
    self.map.anchorX = aX
    self.map.anchorY = aY
end

(视口对象是剪裁世界地图的容器)