繁体   English   中英

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM