Corona SDK - 将“世界”围绕玩家旋转

我正在尝试创建一个简单的游戏,玩家控制一艘移动在“世界”中的船。使事情变得有点棘手的是,当船转向时,我想将“世界”围绕船旋转,以使船头始终对准手机屏幕的顶部。

我创建了一个包含“世界”和船的组,以及一个我称之为cameraLayer的组,该组“跟随”船移动。所有这些都很正常,因为我可以移动船,同时始终使其保持在手机屏幕的中心。然而,我似乎无法使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

我尽可能地进行了研究,但我没有找到任何可以帮助我解决问题的东西。任何形式的帮助都将不胜感激!

点赞
用户2144335
用户2144335

你的最后一条评论唤起了我的记忆-你需要不断调整世界的锚点,这样它就会围绕你的船所在的点旋转。我把船放在世界之上,并使用下面的代码重置世界锚点-希望这会有所帮助!:D

-- 将地图定位在视口中
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

(视口对象是一个容器,用于裁剪世界地图)

2014-05-07 07:37:41