Skrypt na bieganie

Problemy ze skryptami w BGE.
Awatar użytkownika
Karricjusz
Posty: 54
Rejestracja: 22 lip 2012, 18:41

Skrypt na bieganie

Postautor: Karricjusz » 28 gru 2012, 18:23

Witam! Znowu potrzebuję pomocy, tym razem z Pythonem. Niestety, z programowania jest ze mnie najwidoczniej noga. Otóż mam sobie skrypt:

Kod: Zaznacz cały

import bge

def main():
    cont = bge.logic.getCurrentController()
    player = cont.owner
    keyboard = bge.logic.keyboard
    wKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.WKEY]
    aKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.AKEY]
    sKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.SKEY]
    dKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.DKEY]
    shiftKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.LEFTSHIFTKEY]
    if wKey:
        if shiftKey:
            if stamina >= 0:
                player.applyMovement((0, 0.3, 0), True)
        else:
            player.applyMovement((0, 0.1, 0), True)
    elif sKey:
        player.applyMovement((0, -0.1, 0), True)       
    if aKey:
        player.applyMovement((-0.1, 0, 0), True)   
    if dKey:
        player.applyMovement((0.1, 0, 0), True)         
main()


I teraz chciałbym jakoś tam wsadzić zmienną "stamina", aby na początku miała jakąś wartość, i żeby zmniejszała się ona podczas biegu - gdy jest wciśnięty klawisz W i lewy shift. Ale tutaj właśnie moja noga się objawia, bo zupełnie mi nie wychodzi. Druga sprawa, to nie wiem, jak zrobić regenerację staminy, gdy się nie biega. Zabawne, że na klocuszkach zrobiłem w pełni działający skrypt na coś takiego, włącznie ze zmęczeniem i w ogóle, ale żeby taki skrypt napisać to już raczej marzenie xd Może ktoś jest w stanie mi pomóc (tym razem xd )?
Obrazek

Awatar użytkownika
SilverShadow
Posty: 24
Rejestracja: 22 lip 2012, 11:34

Re: Skrypt na bieganie

Postautor: SilverShadow » 28 gru 2012, 19:49

Całkiem niezły skrypt.

Kod: Zaznacz cały

import bge

def main():
    cont = bge.logic.getCurrentController()
    player = cont.owner
    keyboard = bge.logic.keyboard
    wKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.WKEY]
    aKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.AKEY]
    sKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.SKEY]
    dKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.DKEY]
    shiftKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.LEFTSHIFTKEY]
   
    # wytrzymalosc mniesza od 1 i shiftKey nie wcisniety
    if player["stamina"] < 1 and not shiftKey:
        # szybkosc odnawiania wytrzymalosci
        player["stamina"] += 0.01
   
    # wcisniety wKey i shiftKey
    if wKey and shiftKey:
        # jesli wytrzymalosc wieksza lub rowna zeru
        if player["stamina"] >= 0:
            player.applyMovement((0, 0.3, 0), True)
            # szybkosc spadania wytrzymalosci
            player["stamina"] -= 0.01
        # inaczej
        else:
            player.applyMovement((0, 0.1, 0), True)   
   
    # wcisniety wKey i nie wcisniety shiftKey           
    elif wKey and not shiftKey:
        player.applyMovement((0, 0.1, 0), True)   
    elif sKey:
        player.applyMovement((0, -0.1, 0), True)       
    if aKey:
        player.applyMovement((-0.1, 0, 0), True)   
    elif dKey:
        player.applyMovement((0.1, 0, 0), True)         
main()


Opisałem co i jak. żeby skrypt działał w obiekcie którym porusza, musisz utworzyć property typu Float o nazwie stamina.

Awatar użytkownika
Karricjusz
Posty: 54
Rejestracja: 22 lip 2012, 18:41

Re: Skrypt na bieganie

Postautor: Karricjusz » 28 gru 2012, 21:30

Dzięki za pomoc! Usunąłem jednak tą opcję z regeneracją staminy, ponieważ postanowiłem zrobić to osobnym skryptem:

Kod: Zaznacz cały

import bge, time

def main():
    cont = bge.logic.getCurrentController()
    player = cont.owner
    keyboard = bge.logic.keyboard
    shiftKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.LEFTSHIFTKEY]
    if player["stamina"] >0 and player["stamina"]<200 and not shiftKey:
        player["stamina"] += 0.5
    if player["stamina"] <= 0:
        time.sleep(5)
        player["stamina"] == 1
main()


Z tym, że ten skrypt zdaje się zawieszać Blendera xd Żadnego błędu ani nic, po prostu cały Blender odmawia współpracy... Oczywiście chodzi tu o opcję poczekania pięciu sekund. Znalazłem coś takiego w Googlach, ale nie najwidoczniej nie działa. Jak zrobić opcję czekania przez parę sekund? ^^'
Obrazek

Awatar użytkownika
SilverShadow
Posty: 24
Rejestracja: 22 lip 2012, 11:34

Re: Skrypt na bieganie

Postautor: SilverShadow » 29 gru 2012, 12:03

Tez z tym miałem problem gdy zaczynałem programować, time.sleep() przy zatrzymaniu skryptu, przy okazji zatrzymuje cala grę.

Spróbuj się powić sensorem Delay, ale nie jestem pewny czy będzie działać to poprawnie.

Kod: Zaznacz cały

    sen = cont.sensors["Delay"]
    # opóźnienie 2 sekundy
    if sen.positive and player["stamina"] <= 0:
        sen.delay = 120
        sen.reset()
                 
    if sen.positive:
        player["stamina"] = 1

Awatar użytkownika
Dagon
Posty: 94
Rejestracja: 21 lip 2012, 15:30

Re: Skrypt na bieganie

Postautor: Dagon » 29 gru 2012, 16:49

Albo Timerem (tym z property, nie wiem jak zapisać go w Pythonie), i resetować go gdy osiągnie wartość 5 sekund.

Awatar użytkownika
Karricjusz
Posty: 54
Rejestracja: 22 lip 2012, 18:41

Re: Skrypt na bieganie

Postautor: Karricjusz » 29 gru 2012, 17:18

Jak zwykle musiałem zrobić po swojemu, zważcie, że ja naprawdę nie jestem zbyt dobry w programowaniu :cry: W każdym razie tak sobie to rozwiązałem:

Kod: Zaznacz cały

import bge

def main():
    cont = bge.logic.getCurrentController()
    player = cont.owner
    if player["stamina"] > 0 and player["stamina"]<200:
        player["stamina"] += 0.5
        player["zmeczony"] = False
    if player["stamina"] <= 0 and player["zmeczony"] == False:
        player["stamina"] = -80
        player["zmeczony"] = True
    if player["stamina"] <= 0 and player["zmeczony"] == True:
        player["stamina"] += 0.5
main()


W ten sposób jak będziemy zbyt długo sprintować, wyczerpiemy się i minie chwilka, zanim stamina znów zacznie się regenerować. Może skrypt komuś się kiedyś przyda xd Wielkie dzięki wszystkim za pomoc, chociaż pewnie i tak znowu się niedługo odezwę ;)
Obrazek

m4tyo

Re: Skrypt na bieganie

Postautor: m4tyo » 22 sty 2014, 22:26

Cześć, możesz dodać poradnik jak użyć tego skryptu ? Ciekawy i jestem zainteresowany !

Awatar użytkownika
Karricjusz
Posty: 54
Rejestracja: 22 lip 2012, 18:41

Re: Skrypt na bieganie

Postautor: Karricjusz » 22 sty 2014, 23:59

Cóż, ja bardzo chętnie, ale jest pewien problem - od czasu gdy zainstalowałem najnowszego Blendera, nie mogę zmusić ŻADNYCH skryptów do działania. Tak więc nie mam szans z czymkolwiek ruszyć jeśli chodzi o Game Engine.
Obrazek

m4tyo

Re: Skrypt na bieganie

Postautor: m4tyo » 23 sty 2014, 19:26

Karricjusz pisze:Cóż, ja bardzo chętnie, ale jest pewien problem - od czasu gdy zainstalowałem najnowszego Blendera, nie mogę zmusić ŻADNYCH skryptów do działania. Tak więc nie mam szans z czymkolwiek ruszyć jeśli chodzi o Game Engine.


Jak to ? Ja miesiącami ( tak tak... zaczynałem od 0 ) pisałem skrypty, to znaczy uczyłem się i w sumie w pół samodzielnie napisałem skrypty na grafikę w grze. I jako tako działają :O A to wszystko na najnowszym blenderze !


Wróć do „Python”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość