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

时间:2017-09-27 02:40:13

标签: lua corona

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

2 个答案:

答案 0 :(得分:0)

您应该查看正文的API。

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

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

答案 1 :(得分:0)

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

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

然后你需要对Velocity Vector进行标准化(这个答案中未涉及),它将为你提供从敌人到中心的长度为1的向量的x和y值。

调整速度:

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

此时,您只需设置敌人线速度等于上面计算的调整速度矢量。