Góóóól!

G-Ball
sztrovacsek
2021-03-29 · 21:32
Bekerült egy minimális HUD a játékba, ami mutatja az eredményt, a játékos számát és nevét, valamint a lövés erősségét. Hihetetlen grafikai fejlődésen ment keresztül a játékosok kinézete is, most már téglalapok, nem pedig négyzetek!


Egy kicsit okosodtak is a játékosaink: ha elég közel van hozzájuk a labda, akkor automatikusan elindulnak felé. Ha túl messzire kerül a labda tőlük, akkor pedig visszamennek az eredeti posztjukra. Minél messzebb voltak a labdától vagy a posztjuktól, annál gyorsabban fognak megindulni felé.
Persze továbbra is bármikor átvehetjük az irányítást felettük.

if current:
    [...]		
    if !key_press && !has_ball:
        if global_position.distance_to(Global.Ball.global_position) < 300:
            var position_difference = Global.Ball.global_position - global_position
            var smoothed_velocity = position_difference * smooth_speed
            global_position += smoothed_velocity * delta
else:
    var position_difference = self.get_node(post).global_position - global_position
    var smoothed_velocity = position_difference * smooth_speed
    global_position += smoothed_velocity * delta


A labdán lévő 4 nyíl az ütközésvizsgálat miatt van, mivel továbbra sem "fizikai" labdánk van, csak egy karika, de egyszerűbb dolgokat ezzel is lehet modellezni (kicsit kacifántos módon, de már tud lepattanni dolgokról és le is lassul, majd megáll egy idő után).


A bal egérgomb lenyomásakor (charge()), a power elkezd növekedni, aminek a végén egy 1 és 2 közötti számot kapunk, végül a bal egérgomb felengedésekor (shoot()), ezzel a számmal megszorozzuk az alap rúgási erőt.

func _input(event):	
    if Input.is_action_just_released("mb_left") && (target && target.get_parent().has_ball):
        shoot(power)
        power = 0.0

func _physics_process(delta):
    if Input.is_action_pressed("mb_left"):
        charge()

func charge():
    power += .025 
    power = clamp(power, 1, 2)

func shoot(power):
    velocity = transform.x * speed * Global.power


Miután elrúgtuk a labdát, az folyamatosan lassulni fog (lerp:  lineáris interpoláció - az első értékből (velocity) jutunk el folyamatosan nulláig (Vector2.ZERO), az utolsó szám pedig azt befolyásolja, hogy milyen gyorsan történik mindez.

velocity = lerp(velocity, Vector2.ZERO, .015)


Ha a labda valamelyik kapuban köt ki, akkor annak megfelelően mutatja is az állást a kijelző fent. Persze ez ellenfelek nélkül még nem túl izgalmas. Mielőtt azonban hozzáadnánk őket, a következő részben kicsit optimalizálni fogunk, mert azt sosem lehet elég korán elkezdeni.