2017-09-27 81 views
0

目前,我试图让使用电晕SDK自上而下基础的游戏。 基本上我想要做的是让敌人直接移动到地图的中心。用transition.to()很容易做到这一点,但是当我这样做时,物体在到达目的地之前就会失去它们的物理特性。科罗娜SDK - 如何实现对对象的路径与物理

我不知道,反正是有使物体移动象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 

回答

0

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

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

然后,您需要正常化速度矢量(不包括在此答案),这将给你x和从敌人的中心点与1

长度的矢量的y值

要调整速度:

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

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

+0

这正是我所期待的,thx! –