Re: [bge] creer des boutons contextuels

Posté par Coal111 le 26/7/2017 11:46:03
Qu'est ce que tu appelle une boucle booleene ?
Je ne suis pas sur d'avoir bien saisis ton explication

En attendant, j'ai trouvé un moyen de faire fonctionner le bazar en rajoutant une variable stockée sur ma caméra qui contient un identifiant indiquant à quel evenement se situe le joueur.
J'ai aussi donc changer la fonction qui s'execute lors du lancement du script : elle appelle maintenant simplement la fonction qui correspond à cette identifiant.

C'est loin d'être élégant comme solution, mais c'est la seule que je parvient pour le moment à appliquer...

mon code, histoire que ce soit plus clair :

from bge import logic, events
import random
import time

cont = logic.getCurrentController()
own = cont.owner
sc = logic.getCurrentScene()
obl = sc.objects
mouse = logic.mouse

text = obl['Text']
opt_1 = obl['txt_but_1']
opt_2 = obl['txt_but_2']
opt_3 = obl['txt_but_3']
cam = obl['Camera']

button_1 = obl['back_1']
button_2 = obl['back_2']
button_3 = obl['back_3']

#cam['click'] est ici une variable str stcoké sur la camera. Sa valeur au demarrage est 'st'

def button(tx1,ac1,tx2,ac2,tx3,ac3):
        opt_1['Text'] = tx1
        opt_2['Text'] = tx2
        opt_3['Text'] = tx3
        
        if cont.sensors['Mouse'].hitObject == obl['back_1'] and cont.sensors['Clic'].positive:
            print('b1')
            cam['click'] = ac1
        elif cont.sensors['Mouse'].hitObject == obl['back_2'] and cont.sensors['Clic'].positive:
            print('b2')
            cam['click'] = ac2
        elif cont.sensors['Mouse'].hitObject == obl['back_3'] and cont.sensors['Clic'].positive:
            print('b3')
            cam['click'] = ac3
def st():
    text['Text'] = 'What will you do next ?'
    button('walk','walk','camp','camp','','st')

def walk():
    text['Text'] = 'walking'
    button('1','camp','2','camp','3','st')

def camp():
    text['Text'] = 'camping'
    button('1','walk','2','camp','3','st')

def start():
    if cam['click'] == 'st':
        st()
    elif cam['click'] == 'walk':
        walk()
    elif cam['click'] == 'camp':
        camp()
    else:
        pass


start()


(bien sur ici mes fonctions walk() et camp() ne font rien de special, elle sont juste là pour la demonstration.

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=2&topic_id=47497&post_id=566854