Corona SDK - 如何实现带物理效果的路径

我正在使用 Corona SDK 制作一个俯视角度的游戏。基本上我想要做的是,使敌人直接移动到地图的中心。使用 transition.to() 很容易实现,但是当我这样做时,物体在到达目的地之前就失去了它们的物理特性。

我在想,有没有办法让物体像 transition.to() 那样移动,但是不使用它呢?因为我真的希望我的物体在努力到达地图中心时撞上障碍物。

关于游戏情节: 这就像一款塔防游戏,地图中央有一个物体(城堡),需要被从两侧随机重生的其他物体(敌人)攻击。

以下是一些代码:

function spawnEnemy()
    for i=1,numberEnemies do
        enemy = display.newImage("enemy.png")
        physics.addBody(enemy,"dynamic")
        enemy:addEventListener("tap",enemyKill)
        enemy.gravityScale = -0

        if math.random(2) == 1 then
            enemy.x = math.random(-100, -10)
            enemy:setLinearVelocity(50,0)
        else
            enemy.x = math.random (display.contentWidth + 10, display.contentWidth + 100)
            enemy:setLinearVelocity(-40,0)
        end
            enemy.y = math.random(display.contentHeight)
            --enemy.trans = transition.to(enemy, {x=centerX, y=centerY, time=5000,onComplete=hitCastle})

    end
    timer.performWithDelay( 10000, spawnEnemy, 0 )
end
点赞
用户2447340
用户2447340

你应该查看身体(body)的API。

这两个链接应该可以帮助你解决问题:

https://docs.coronalabs.com/api/type/Body/applyLinearImpulse.htmlhttps://docs.coronalabs.com/api/type/Body/applyForce.html

2017-09-28 09:54:02
用户2494064
用户2494064

你应该设置敌人的线性速度,使敌人朝向中心移动。一旦敌人与城堡碰撞,你就可以从场景中移除敌人对象。为了做到这一点,你必须计算两点之间的向量(敌人和中心),然后将向量的X和Y值乘以你想让敌人移动的速度。

敌人位置 = (敌人X坐标, 敌人Y坐标)
中心位置 = (中心X坐标, 中心Y坐标)
速度向量 = (中心X坐标 - 敌人X坐标, 中心Y坐标 - 敌人Y坐标)

然后你需要对速度向量进行归一化(此答案未涉及),这将给出一个指向中心且长度为1的向量的x和y值。

调节速度:

调节后的速度向量 = (归一化速度X值 * 速度, 归一化速度Y值 * 速度)

此时,你只需要将敌人的线性速度设置为上面计算出的调节后的速度向量即可。

2017-09-28 19:59:48