2017-04-16 1 views
0

Je fais ce jeu, et il implique des ennemis. c'est assez ennuyeux pour eux de rester à la même vitesse alors je veux que la vitesse de l'ennemi augmente à mesure que le joueur marque plus haut. Il est difficile de faire certains algorithmes avec amour puisque la plupart du temps tout est mis à jour à chaque image avec ce moteur de jeu. C'est ce qui me donne le problème en ce moment.Valeurs Love2D mise à jour trop rapide

La première partie de ma logique est correcte (la partie où les enemy.speed augmente après la player_score passe 10), mais une fois qu'il passe (ou atteint) 10, la valeur enemy.speed continuera à augmenter de 10 chaque image. Même avec le booléen enemiesReadyToSpeedUp que j'ai mis en place spécifiquement pour cette raison! (pour empêcher le enemy.speed d'augmenter rapidement)

donc une fois que le score du joueur dépasse 10, le jeu devient injouable puisque l'ennemi commence à se déplacer à la "vitesse de la lumière".

function enemySpeedUp() 

    -- Once player score > scoreLimit + 10, enemy's speed will increase by 10, 
    -- and the scoreLimit will increase by 10 

    enemiesReadyToSpeedUp = false 
    scoreLimit = 0 

    if(player_score >= scoreLimit + 10) then 
     enemiesReadyToSpeedUp = true 
    end 

    if(enemiesReadyToSpeedUp == true)then 
     enemy.speed = enemy.speed + 10 
     scoreLimit = scoreLimit + 10 
     enemiesReadyToSpeedUp = false 
    end 
end 

choses que j'ai essayé:

  • Écrire cette fonction à peu près la même sans booléens. (ce qui veut dire que j'augmente la vitesse de l'ennemi lorsque la vitesse du joueur dépasse 10. Au lieu de faire un booléen vrai, j'augmente la vitesse de l'ennemi en fonction du booléen)
  • Coder en dur toutes les combinaisons possibles dans lesquelles un ennemi devrait accélérer. mais cela nécessite beaucoup de déclarations if, est très inefficace, et est aussi en général une mauvaise pratique de codage. mais cela fonctionne, et je suis en train d'envisager de le faire de cette façon si rien d'autre ne fonctionne.
  • Enfin, j'ai également essayé enemy.speed = enemy.speed + player_speed mais c'était une erreur assez évidente car enemy.speed a augmenté chaque image et j'ai eu le même résultat que ma première erreur.

Répondre

0

Votre erreur est scoreLimit avec 0 initialise droit au sein de la fonction enemySpeedUp().
Déplacez cette affectation, faites-le au même endroit que vous avez défini la valeur initiale player_score.

+0

omg, merci beaucoup je ne savais même pas que je faisais ça. @Vlad –