Corona SDK - 如何使用物理实现对象的路径

Corona SDK - How to implement a path to an object with physics

我目前正在尝试使用 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

你应该看看正文 API。

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

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

你应该设置敌人的线速度,使敌人朝向中心。一旦敌人与城堡发生碰撞,您就可以将敌人物体从场景中移除。为此,您必须计算两点(敌人和中心)之间的矢量,然后将矢量的 X 和 Y 值乘以您希望敌人移动的速度。

Enemy position = (EnemyXPos, EnemyYPos)
Center Position = (CenterXPos, CenterYPos)
Velocity Vector = (CenterXPos - EnemyXPos, CenterYPos - EnemyYPos)

然后你需要归一化速度矢量(未包含在这个答案中),这将为你提供从敌人指向中心的长度为 1 的矢量的 x 和 y 值。

调整速度:

Adjusted Velocity Vector = (NormalizedVelXVal * Speed, NormalizedVelYVal * Speed)

此时,您只需将敌人的线速度设置为等于上面计算的 Adjusted Velocity Vector。