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.html
和
https://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。
我目前正在尝试使用 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.html 和 https://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。