2017-04-16 5 views
0

Ich mache dieses Spiel, und es geht um Feinde. Es ist ziemlich langweilig für sie, die gleiche Geschwindigkeit zu behalten, also möchte ich, dass die Geschwindigkeit des Gegners steigt, wenn der Spieler höher abschneidet. Es ist schwierig, bestimmte Algorithmen mit Liebe zu erstellen, da mit dieser Game-Engine meist jedes Frame aktualisiert wird. Welches ist eigentlich das Problem, das mir gerade das Problem bereitet?Love2D Werte aktualisieren zu schnell

Der erste Teil meiner Logik korrekt ist (der Teil, wo die enemy.speed steigt nach den player_score 10 geht), aber sobald es geht (oder erreicht) 10, der enemy.speed Wert wird weiterhin von 10 jeden Rahmen erhöhen. Auch mit der enemiesReadyToSpeedUp Boolean, die ich speziell aus diesem Grund eingesetzt habe! (um das enemy.speed davon abzuhalten, schnell anzusteigen)

Sobald das Spielerergebnis 10 übersteigt, wird das Spiel unspielbar, da der Gegner beginnt, sich mit der "Lichtgeschwindigkeit" zu bewegen.

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 

Dinge, die ich habe versucht:

  • diese Funktion Schreiben so ziemlich das gleiche ohne booleans. (das heißt, ich erhöhe die gegnerische Geschwindigkeit, sobald die Geschwindigkeit des Spielers 10 übersteigt, anstatt einen booleschen Wert wahr zu machen und dann die Geschwindigkeit des Gegners basierend auf dem booleschen Wert zu erhöhen.)
  • Hartes Codieren jeder möglichen Kombination, in der ein Gegner beschleunigen müsste. aber das erfordert eine Menge von if-Anweisungen, ist sehr ineffizient und ist auch nur im Allgemeinen schlechte Codierungspraxis. aber es funktioniert, und ich denke darüber nach, es zu tun, wenn nichts anderes funktioniert.
  • Schließlich versuchte ich auch enemy.speed = enemy.speed + player_speed, aber das war ein ziemlich offensichtlicher Fehler als enemy.speed jeden Rahmen erhöht und ich habe das gleiche Ergebnis wie mein erster Fehler.

Antwort

0

Ihr Fehler initialisiert scoreLimit mit 0 rechts in enemySpeedUp() Funktion.
Verschieben Sie diese Zuweisung, und zwar an derselben Stelle, an der Sie den ursprünglichen Wert player_score festgelegt haben.

+0

omg, ich danke dir so sehr, dass ich gar nicht merke, dass ich das mache. @Vlad –