Låt oss säga att en fyrkant ska förflytta sig konsistent över skärmen när man trycker på piltangenterna up, ner, vänster, höger. Om x värdet ökar med 5 varje uppdatering höger tangenten är nedtryckt och y ökar med 5 varje gång nedåt pilen är nedtryckt så kommer fyrkanten förflytta sig (5^2+5^2)^0.5 längdenheter snett neråt (ungefär 7). Fyrkanten accelererar också så den börjar med hastigheten 1 och ökar med 1 varje uppdatering till 5 där den stannar. Hur ska man undgå detta problem? Jag programerar i java.
Jag antar att problemet är att när man förflyttar sig diagonalt så går det snabbare än om man går lodrätt eller vågrätt?
Lodrätt/vågrätt: 5
Diagonalt: ~7.2
Du får separera fart och riktning. Använd en vektor som du sätter till den riktningen du vill ha, sen normaliserar du den (dividerar komponenterna med längden) och multiplicerar med farten. Då får du en vektor (din hastighet) med rätt fart och rätt riktning. Denna adderar du sedan på positionen så ska det fungera som tänkt.
Om du håller inne upp och vänster till exempel, sätter du din vektor till +1 i y-led (om upp nu är i positiv y-riktning) och -1 i x-led (dvs. (1, -1)). Sedan normaliserar du den får du (0.707, -0.707) som du sedan kan multiplicera med din fart, 10 till exempel. Då får du (7.07, -7.07) som sedan kan addera på din position.