IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

problème de détection de plateforme


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut problème de détection de plateforme
    Bonjour
    Je suis en pleine creation d'un jeu et je rencontre un problème lorsque je veux faire détecter a mon héros une plateforme. En effet, lorsque je deplace mon heros, il traverse tout simplement l'image de la plateforme tandis que je voudrais qu'elle lui serve de "sol". J'ai alors penser a utiliser la fonction find_closest et la fonction bbox pour interdire le rectangle correspondant a la plateforme la plus proche de mon heros mais une erreur s'affiche lorsque je lance mon jeu. Pourriez vous m'aider s'il vous plait.
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    X=[]
    Y=[]
    def traitement2(event):
        global  dessin3,heros
        pas = 10
        def deplaceImage(dx,dy):
            global dessin3,heros,X,Y,x,y
            x,y=heros.coords(dessin3)
            num_plat =dessin3.find_closest(x,y)
            coords_plat = dessin3.bbox(num_plat)
            print(coords_plat)
            X.append([coords_plat[0],coords_plat[2]])
            Y.append([coords_plat[1],coords_plat[3]])
            dessin3.move(heros,dx,dy)
        def clavier(event,Dx,Dy):
            deplaceImage(Dx,Dy)
     
        monJeu.bind("<Left>", lambda event : clavier(event, -pas,0))
        monJeu.bind("<Right>", lambda event : clavier(event, pas,0))
        monJeu.bind("<Down>", lambda event : clavier(event, 0,pas))
        monJeu.bind("<Up>", lambda event : clavier(event, 0,-10*pas))
     
     
     
        monJeu= Toplevel()
        monJeu.focus_force()     
        dessin3 = Canvas(monJeu,bg='darkgrey',height=800,width=800)
        dessin3.pack()
        imgfond=PhotoImage(file=chemin_fichier+'\\fond.png')
        fond = dessin3.create_image(400,800, image=imgfond,anchor='s')
        imgHeros =PhotoImage(file=chemin_fichier+'\\heros.png') 
        Heros = dessin3.create_image(400,670, image=imgHeros)
     
     
        imgPlateform =PhotoImage(file=chemin_fichier+'\\plateforme.png')
        Liste_coord= [[500,500],[250,450],[150,150],[230,300],[400,400],[700,150],[650,300],[400,200]]# Creation des plateformes
        for k in Liste_coord:
            dessin3.create_image(k[0],k[1] ,image=imgPlateform)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Salut,

    Citation Envoyé par requie Voir le message
    mais une erreur s'affiche lorsque je lance mon jeu.
    Poster le traceback de l'erreur n'est pas une option surtout lorsque votre code est incomplet.

    Citation Envoyé par requie Voir le message
    J'ai alors penser a utiliser la fonction find_closest et la fonction bbox pour interdire le rectangle correspondant a la plateforme la plus proche de mon heros mais une erreur s'affiche lorsque je lance mon jeu.
    Les fonctionnalités que vous devez explorer et apprendre à maîtriser sont indépendantes du jeu que vous voulez créer.
    Vous pourriez donc commencer à les explorer en regardant quoi faire et ce qu'il se passe lorsque vous utilisez des figures simples comme elipse, rectangle, polygon,...
    En plus çà ferait de petits codes que vous pourriez poster complètement... et çà aiderait à vous aider.

    - W

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Salut,
    C'est justement en étudiant le cas de l'interdiction sur ces figures "simples" (des rectangles entre autre) que je me suis demander si il m'etais possible de faire cela avec ces fonctions sur une image de plateforme (qui est assez similaire au plateforme). Cependant, je n'y suis pas parvenu.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    C'est justement en étudiant le cas de l'interdiction sur ces figures "simples" (des rectangles entre autre) que je me suis demander si il m'etais possible de faire cela avec ces fonctions sur une image de plateforme (qui est assez similaire au plateforme). Cependant, je n'y suis pas parvenu.
    Si vous n'y arrivez pas encore avec des figures simples, pas la peine d'essayer de faire plus compliqué.... Et çà serait mieux de partir sur le code que vous avez essayé de faire (avec des figures simples) pour voir ce que vous n'avez pas compris... et essayer de vous l'expliquer.

    - W

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Salut,
    j'ai résolu le problème de l'erreur mais la fonction bbox me retourne les coordonnées du rectangle qui défini l'image de mon héros et non pas ceux des plateforme les plus proche (en ayant les coordonnées des plateformes, je pourrais alors "interdire" a mon héros ces zones.)
    Voici la portion de code qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            global dessin3,heros,x,y
            x,y=dessin3.coords(heros)
            num_plat =dessin3.find_closest(x,y)
            coords_plat = dessin3.bbox(num_plat)
            print(coords_plat)
     
     
    imgPlateform =PhotoImage(file=chemin_fichier+'\\plateforme.png')
        Liste_coord= [[500,500],[250,450],[150,150],[230,300],[400,400],[700,150],[650,300],[400,200]]# Creation des plateformes
        for k in Liste_coord:
            dessin3.create_image(k[0],k[1] ,image=imgPlateform)
    Comment puis-je modifier ce script pour que l'instruction print me renvoi les coordonnées du rectangle de la plateforme la plus proche de mon héros s'il vous plait?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Comment puis-je modifier ce script pour que l'instruction print me renvoi les coordonnées du rectangle de la plateforme la plus proche de mon héros s'il vous plait?
    C'est ce que devrait faire votre code mais comme on ne peut pas l'exécuter et que vous ne décrivez pas le problème rencontré... pas possible de vous aider.
    note: je suppose que vous avez lu la documentation de .find_closest et que vous avez compris qu'en prenant un point qui est sur un item .find_closest va difficilement vous retourner autre chose, non?

    - W

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Merci pour cette réponse,
    Le problème est que cela ne me retourne pas les coordonnées des plateformes les plus proches mais les coordonnées de mon personnages qui changent au fur et a mesure que je le déplace. Et je ne vois alors pas comment je pourrais interdire a mon personnage ces zones.
    effectivement en relisant la documentation sur find_closest mon erreur semble evidente Etant donné que le point est sur l'image de mon heros , il est normal que l'on retourne les coordonnées de mon heros et pas celle des plateforme. Mais comment faire pour faire ignorer l'item heros pour selectionner uniquement l'item plateforme?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Et je ne vois alors pas comment je pourrais interdire a mon personnage ces zones.
    Si la bbox du personnage n'empiète pas sur d'autres items et que le déplacement qu'on veut faire provoquerait une superposition/empiétement/overlap peut être qu'il serait préférable de regarder ce que sait faire find_overlapping.

    - W

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Merci, je ne connaissais pas cet option. Je vais étudier la documentation et voir ce que cela peut donner

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Je rencontre un petit soucis avec find_overlapping: En effet, je determine les coordonnées de mon heros avec la ligne
    x,y=dessin3.coords(heros)
    mais si je veux creer cette ligne:
    num_plat =dessin3.find_overlapping(x,y)
    , il me manque deux argument (x2 et y2) mais je ne vois pas quel valeur attribuer a ceux-ci

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Je rencontre un petit soucis avec find_overlapping: En effet, je determine les coordonnées de mon heros avec la ligne
    mais si je veux creer cette ligne: , il me manque deux argument (x2 et y2) mais je ne vois pas quel valeur attribuer a ceux-ci
    Relisez la documentation de .find_overlapping...
    Essayez de comprendre à quoi correspondent les arguments.
    Si c'est pas clair, c'est pas le bout du monde de coder un petit exemple ou vous créez un canvas, quelques items, faites varier leurs valeurs, regardez ce que çà retourne... C'est comme çà qu'on lit une documentation.

    - W

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Effectivement, j'ai modifier le code en conséquence:
    global dessin3,heros,x,y
    x,y=dessin3.coords(heros)
    num_plat =dessin3.find_closest(x,y)
    coords_plat = dessin3.bbox(num_plat)
    coords_plat2 = dessin3.find_overlapping(*coords_plat)
    print(coords_plat2)
    Toutefois, je ne comprends pas le résultat. En effet, lorsque mon héros est en contact avec aucun objet, le shell me renvoie deux chiffres ((1,2) par exemple) et quand il entre en contact avec une plateforme , le shell ajoute une troisième coordonnée ((1,2,6) par exemple).

  13. #13
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    find_overlapping ne renvoie pas des coordonnées mais les ids des items du canevas.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Toutefois, je ne comprends pas le résultat. En effet, lorsque mon héros est en contact avec aucun objet, le shell me renvoie deux chiffres ((1,2) par exemple) et quand il entre en contact avec une plateforme , le shell ajoute une troisième coordonnée ((1,2,6) par exemple).
    .find_overlapping retourne l'identifiant de tous les items qui sont dans le rectangle définit par x1, y1, x2, y2.
    normal qu'on y trouve toujours celui qui correspond au personnage

    - W

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Donc si je comprends bien, il y a un chiffre qui correspond a l'id du perso, un qui correspond a l'id du fond et enfin si il entre en contact avec la plateforme, il y aura un troisième id?

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Donc si je comprends bien, il y a un chiffre qui correspond a l'id du perso, un qui correspond a l'id du fond et enfin si il entre en contact avec la plateforme, il y aura un troisième id?
    Si vous voulez bien comprendre, il faut relire la documentation du Canvas. Il y a tout un paragraphe sur items et identifiants. Il faut aussi relire la documentation de .find_overlapping...
    Car ce n'est qu'après avoir essayé de jouer un peu avec que vous pourrez espérer comprendre ce que ces mots veulent dire.


    - W

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    En relisant la documentation et en créant un canvas sans fond puis en ajoutant peu a peu des images, cela a confirmer ma conjecture. Pourriez-vous s'il vous plait me donner un bout de code me permettant de mettre les id correspondant aux plateformes dans une liste. Je voudrais alors interdire a mon personnage les zones couvert par les items correspondant a ces id (et ainsi rendre les plateformes solides )

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Pourriez-vous s'il vous plait me donner un bout de code me permettant de mettre les id correspondant aux plateformes dans une liste. Je voudrais alors interdire a mon personnage les zones couvert par les items correspondant a ces id (et ainsi rendre les plateformes solides )
    Je ne vous donnerais rien tant que vous n'aurez pas essayé de faire quelque chose par vous même. Mettre des entiers dans une liste fait partie des exercices de bases que vous allez trouver dans n'importe quel tuto.

    - W

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Je sais comment mettre des entiers dans une liste mais je ne vois vraiment pas comment remplir cette liste avec les id qui correspondent aux plateformes. Cela me bloque dans la conception du projet et je ne peux pas avancer.

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par requie Voir le message
    Je sais comment mettre des entiers dans une liste mais je ne vois vraiment pas comment remplir cette liste avec les id qui correspondent aux plateformes. Cela me bloque dans la conception du projet et je ne peux pas avancer.
    Il faut lire la documentation:
    Les identifiants numériques

    Chaque item affiché sur le canevas possède un identifiant numérique (simple entier) unique, il s’agit de la valeur retournée par le «constructeur» - create_*() - lors de sa création.
    et si vous ne comprenez pas bien, vous lancez la console Python... vous créez un Canvas, puis un item dedans pour voir ce que çà retourne. Si vous n'avez pas ce minimum de curiosité là, vous ne pourrez pas avancer...

    - W

Discussions similaires

  1. Problème de détection de mon réseau WIFI
    Par yaboki dans le forum Hardware
    Réponses: 6
    Dernier message: 06/07/2006, 11h43
  2. problème de détection de boutons radios
    Par boss_gama dans le forum ASP
    Réponses: 2
    Dernier message: 14/06/2006, 11h49
  3. [UBUNTU] Problème de détection souris/clavier
    Par Merlin dans le forum Ubuntu
    Réponses: 4
    Dernier message: 19/04/2006, 19h23
  4. [FAQ]problème de détection réseau.
    Par mickael777 dans le forum MFC
    Réponses: 6
    Dernier message: 13/05/2005, 14h43
  5. Problème de détection de nouveau processeur
    Par zakfa dans le forum Composants
    Réponses: 12
    Dernier message: 24/01/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo