Szaladjon, ki merre lát

G-Ball
sztrovacsek
2021-04-15 · 22:08
Aranylábú barátaink végre a lábuk elé néznek, ha mennek valahova. A legegyszerűbb módszer ennek a megvalósítására, ha egyszerűen minden iránybillentyűhöz rendelünk egy animációt (ha felfelé fut a játékos, akkor részben átlátszóvá tesszük a modulate.a-val, hogy ne takarja el a labdát):

if Input.is_action_pressed("ui_right"):
    AnimSprite.play("run_right")
elif Input.is_action_pressed("ui_left"):
    AnimSprite.play("run_left")
elif Input.is_action_pressed("ui_down"):
    AnimSprite.play("run_down")
elif Input.is_action_pressed("ui_up"):
    AnimSprite.modulate.a = .75
    AnimSprite.play("run_up")
else:
    AnimSprite.modulate.a = 1
    AnimSprite.play("idle")

Ez a módszer remekül működik, ha csak egyetlen irányítható karakterünk van, de mivel itt egy egész csapatunk van, sőt még egy ellenfél csapat is, így jobban járunk, ha a játékosok irányvektorát használjuk, a következőképpen:

if velocity.length() > 50:
    var va = rad2deg(velocity.angle()) 
    if va >= 315 && va <= 360 && va >= 0 && va <= 45:
        AnimSprite.play("run_right")
    elif va >= 135 && va <= 225:
        AnimSprite.play("run_left")
    elif va > 45 && va < 135 :
        AnimSprite.play("run_down")
    elif va > 225 && va < 315:
        AnimSprite.modulate.a = .75
        AnimSprite.play("run_up")
else:
    AnimSprite.modulate.a = 1
    AnimSprite.play("idle")

Lényegében egy kört vágtunk 4 felé, és mind a 4 irány kapott egy 90°-os szeletet. A kör középpontjától jobbra mutat a 0 és onnan megyünk az óramutató járása szerint körbe (lefelé 90°, balra 180°, felfelé pedig 270°), ezért van ketté szedve a "run_right", mert közben visszatértünk a kiindulópontba.


Most már nagyjából minden készen áll az ellenfél csapatának a fogadására. Jöjjenek hát!