Ursina Python detecter si une entité est cliquée

SeaWinn Messages postés 19 Date d'inscription jeudi 8 juillet 2021 Statut Membre Dernière intervention 10 septembre 2023 - Modifié le 12 sept. 2023 à 15:55
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 15 sept. 2023 à 19:29

Bonjour,

Je débute en python, et j'aimerais savoir comment détecter un clic sur une entité avec ursina. Voici ce que j'ai fait :

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController

app = Ursina()

for z in range(10):
    for x in range(10):
        Entity(
            model="cube",
            color=color.white,
            collider="box",
            ignore=True,
            position=(x, 0, z), 
            parent=scene, 
            origin_y= 0.5
        )

class ColorBox(Button):
    def __init__(self, position=(5, 2, 5)):
        super().__init__(
            position=position,
            model="cube", 
            color=color.red,
            parent=scene,
            origin_y= 0.5)
        
        def input(self, key):
            if self.hovered:
                if key == "left mouse down":
                    print('Color Changed')
                    self.color= color.random_color()

ColorBox()
player = FirstPersonController()
app.run()

J'ai l'impression que quoi que je fasse la fonction input n'est pas executée, une idée?

9 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 12 sept. 2023 à 15:54

Bonjour,

La fonction input() est définie en ligne 25, mais elle n'est jamais appelée...

0
SeaWinn Messages postés 19 Date d'inscription jeudi 8 juillet 2021 Statut Membre Dernière intervention 10 septembre 2023
Modifié le 12 sept. 2023 à 15:51

Oui, j'ai remarqué, mais je ne sais pas où l'appeler.

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 10 sept. 2023 à 12:26

Comment ça, tu as remarqué ça ?

Ce n'est pas toi qui as écris le code ?

Tu ne sais pas comment il fonctionne ?

0
SeaWinn Messages postés 19 Date d'inscription jeudi 8 juillet 2021 Statut Membre Dernière intervention 10 septembre 2023
Modifié le 12 sept. 2023 à 15:56

Si, j'ai écrit le code avec une vidéo youtube. Le problème, c'est que je n'ai pas fait exactement la même chose, et mon programme ne marche pas contrairement au sien.

0
SeaWinn Messages postés 19 Date d'inscription jeudi 8 juillet 2021 Statut Membre Dernière intervention 10 septembre 2023
Modifié le 12 sept. 2023 à 15:52
class ColorBox(Button):
    def __init__(self, position=(5, 2, 5)):
        
        r = random.randint(0, 255)
        g = random.randint(0, 255)
        b = random.randint(0, 255)

        super().__init__(
            position=position,
            model="cube", 
            color=color.color(r, g, b),
            parent=scene,
            origin_y= 0.5)
        
        def input(self):
            if self.hovered:
                self.color.color(r, g, b)

J'ai vite changé, car le changement de couleurs ne marchait pas. Mais je ne sais toujours pas, ni comment, ni où appeler la fonction.

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 12 sept. 2023 à 15:53

Si tu débutes en Python, tu devrais commencer par des trucs plus simples. Connais tu les bases sur les classes, les fonctions et comment les invoquer ?

Je ne pratique pas Ursina, mais ta fonction input() est une méthode de la classe ColorBox, et en général, on crée un ou des objets à partir d'une classe et ensuite on leur applique les méthodes utiles

Exemple :

class Personne:
    def __init__(self, nom, prenom):
        self.nom = nom
        self.prenom = prenom

    def presenter(self) :
        return self.nom + " " + self.prenom

#Création d'une personne:
p1 = Personne('Jean', 'Transcène')

#appel de la méthode presenter:
print(p1.presenter())
0
SeaWinn Messages postés 19 Date d'inscription jeudi 8 juillet 2021 Statut Membre Dernière intervention 10 septembre 2023
Modifié le 12 sept. 2023 à 15:59

J'ai trouvé : dans ursina, la fonction input est implicitement utilisée. On n'a pas besoin de l'appeler explicitement. Je l'avais juste indentée trop à droite et elle n'était pas correctement prise en compte dans le button. Merci quand même !

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 12 sept. 2023 à 16:00

Bonjour,

(texte original, avant correction) je l'avais juste mise trop a droite et elle n'était pas comptée dans le button

C'est ce qu'on appelle une erreur d'indentation, si tu vois ce que c'est et à quoi ca sert (de la façon dont tu en parles, on ne dirait pas)

Comme tu avais fait, la fonction input était à l'intérieur de la fonction __init__. D'où l'intérêt de revoir les bases de Python et de commencer par des trucs simples, au lieu de recopier du code vu sur Youtube

"Science sans conscience n'est que ruine de l'âme" -- Rabelais

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
12 sept. 2023 à 16:05

Bonjour,

Pour revenir à la question initiale, voir cette discussion.

Je t'invite toutefois (comme Phil_1857 le dit fort justement) à ne pas mettre la charrue avant les bœufs. Tu ne pourras pas aller bien loin avec ursina tant que tu n'auras pas les bases en python (en particulier tout ce qui est lié à l'indentation), en algorithmique (fonctions, conditions, boucles ...) et en programmation objet (classes, instances, méthodes, ...). Il existe de nombreux tutoriels gratuits en ligne pour découvrir python, ce serait sans doute un bon début.

Quand ceci sera acquis, il sera temps de travailler avec un module déjà écrit (pourquoi pas ursina), comprendre la documentation et le éventuels bouts de code que tu pourrais trouver sur Internet.

Si tu décides de faire un patchwork de bouts de codes sans les comprendre et en les bidouillant sans trop comprendre ni comment, ni pourquoi, ton code n'aura rapidement aucun sens et tu n'atteindras pas tes objectifs (voire tu risques de te décourager).

Après... à toi de voir :-)
Bonne chance

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
12 sept. 2023 à 16:42

Bonjour Mamiemando,

Sympa d'avoir ajouté l'auteur de la citation dans mon message

Par contre, comment fais-tu pour mettre en forme le texte original en gris

au début ?

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
13 sept. 2023 à 15:51

Hello Phil,

Sympa d'avoir ajouté l'auteur de la citation dans mon message

De rien :-)

Par contre, comment fais-tu pour mettre en forme le texte original en gris

Avec le bouton "citation", le bouton le plus à droite (avec une icône guillemets) dans la barre de mise en forme des messages.

Bonne journée

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 sept. 2023 à 18:43

Heuuu .... serait-ce réservé aux modérateurs ? :-)

0
georges97 Messages postés 11853 Date d'inscription lundi 31 janvier 2011 Statut Contributeur Dernière intervention 3 mai 2024 2 257
13 sept. 2023 à 18:51

Bonsoir Phil,

Heuuu .... serait-ce réservé aux modérateurs ? :-)

Aussi intrigué que toi, j'ai vérifié et j'ai bien les guillemets en fin de ligne d'icones. Et l'utilise ici pour la première fois.

Mais peut-être n'est-ce accessible qu'aux modérateurs et contributeurs.

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
15 sept. 2023 à 13:59

C'est vrai que ça n'est pas une fonctionnalité à mettre entre toutes les mains :-) Plus sérieusement je vais remonter le bug et on verra ce qu'il se passera.

0
Diablo76 Messages postés 161 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 1 mai 2024 41 > mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024
15 sept. 2023 à 16:46

Ouii ce serait bien, car entre répondre à la discussion et commenter, on se perd un peu dans l'historique  :-)

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751 > Diablo76 Messages postés 161 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 1 mai 2024
15 sept. 2023 à 19:29

Bonjour, je ne sais pas si vous avez accès à ce forum, mais j'ai ouvert une discussion sur cet aspect ici. Selon brupala et Gadjow, ce fait est déjà connu d'Adraen, mais il n'est pas très clair à mes yeux s'il s'agit d'un choix délibéré ou non, ni les raisons qui sont derrières.

1
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
14 sept. 2023 à 10:22

Salut Georges,

OK, merci 

0