2017-09-27 8 views
0

Je suis actuellement essayer de faire un jeu basé haut vers le bas à l'aide du SDK Corona. Fondamentalement, ce que je veux faire, c'est que les ennemis se déplacent directement au centre de la carte. Il est facile de le faire avec transition.to() mais quand je le fais, les objets perdent leur physique jusqu'à ce qu'ils atteignent leur destination.Corona SDK - Comment mettre en œuvre un chemin vers un objet physique

Je me demandais, est-il de toute façon de faire les objets se déplacent comme transition.to() mais sans l'utiliser? Parce que je veux vraiment que mes objets heurtent des obstacles sur leur chemin quand ils essaient d'arriver au centre de la carte. A propos du scénario du jeu: C'est comme un jeu de tower defense, il y a un objet au milieu (Castle) qui doit être frappé par d'autres objets (ennemis) qui réapparaissent de manière aléatoire sur les côtés.

Voici un code:

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 

Répondre

0

Vous devez définir la vitesse linéaire de l'ennemi pour que les têtes ennemies vers le centre. Une fois que l'ennemi entre en collision avec le château, vous pouvez retirer l'objet ennemi de la scène. Pour ce faire, vous devez calculer le vecteur entre deux points (l'ennemi et le centre), puis multiplier à la fois les valeurs X et Y du vecteur par la vitesse à laquelle vous souhaitez l'ennemi de se déplacer.

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

Vous devez ensuite normaliser le vecteur vitesse (non couvert dans cette réponse) qui vous donnera les valeurs x et y d'un vecteur qui pointe de l'ennemi au centre d'une longueur de 1.

pour régler la vitesse:

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

à ce stade, vous déterminez que les ennemis vitesse linéaire égale au vecteur de vitesse ajusté calculé ci-dessus.

+0

C'était exactement ce que je cherchais, thx! –