[英]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)
此时,您只需将敌人的线速度设置为等于上面计算的“调整的速度矢量”即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.