Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Solved] Changer le curseur (python-sfml)  (Lu 10691 fois)

0 Membres et 1 Invité sur ce sujet

Seymour

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
[Solved] Changer le curseur (python-sfml)
« le: Juillet 21, 2013, 02:41:08 am »
Bonjour,

je souhaiterai changer le curseur par défaut de Pysfml et le remplacer par une image propre,j'ai essayer d'adapter quelque méthode de Pygame ou de Pyglet mais je n'ai pas réussi a trouver comment faire.

Pour l'instant je fait comme ça:

Je charge une texture dans un Sprite
Je récupère les coordonner du curseur a chaque tour de boucle

Après je dois dessiner le curseur personnalisé sur les coordonnées que j'ai récupérer mais je ne trouve pas comment.

Je suis avec PySfml pour python3.2

Pouvez vous m'aidez svp?
« Modifié: Novembre 04, 2013, 09:46:23 am par Sonkun »

Sonkun

  • Moderator
  • Full Member
  • *****
  • Messages: 241
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #1 le: Juillet 21, 2013, 06:05:57 am »
Certainement :p

Premièrement, tu as besoin de désactiver le curseur par défaut.

window.mouse_cursor_visible = False
Link: http://www.python-sfml.org/api/window.html#sfml.window.Window.mouse_cursor_visible)

Ensuite, tu dois récupérer la position en temp réel de la souris et l'utiliser pour dessiner le nouveau curseur au bon endroit.

position = sf.Mouse.get_position(window)
cursor.position = position # cursor est le sf.Sprite

window.draw(cursor)

Je t'invite à lire tout les tutoriels de la SFML (en C++) qui sont disponible en français. Ensuite, tu t'adaptes à la version Python, qui change très peu :)

Documentation en français.

Bonne chance et n'hésite pas à poser tes questions sur le forum.

PS: évite les doublons sur le forum anglophone.
Interested in using SFML with Python ? Try out its Python binding!

Seymour

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #2 le: Juillet 21, 2013, 06:29:14 pm »
Merci beaucoup,oui je n'hésiterais pas a poser des questions ça c'est sur^^,ta solution fonctionne très bien cependant le curseur ne suit pas mon curseur d'origine,comprend que le curseur de la fenêtre est un petit peut décaler par rapport a celui de l'os,je le voit quand je quitte la fenêtre il y a surement 4-5mm de décalage,le curseur os est en haut a gauche du curseur de la fenêtre et 1cm du bord gauche de ma fenêtre ainsi du bord haut est inaccessible et quand j'agrandi la fenêtre c'est pire.

Voila le code que j'utilise pour tester cette fonctionnalité:

import sfml as sf

window = sf.RenderWindow(sf.VideoMode(1268, 720), "pySFML Window", sf.Style.FULLSCREEN)

window.mouse_cursor_visible = False
window.framerate_limit = 70

cursor_idle = sf.Texture.from_file('../images/ball3.png')
cursor_idle_sprite = sf.Sprite(cursor_idle)

while window.is_open:
    for event in window.events:
        if type(event) is sf.CloseEvent:
            window.close()
        if type(event) is sf.MouseMoveEvent:
            position = sf.Mouse.get_position(window)
            cursor_idle_sprite.position = position
           
    window.clear()
    window.draw(cursor_idle_sprite)      
    window.display()

Edit : J'ai résolue le problème,l'image du curseur était mal placer,je l'ai modifier avec Gimp et j'ai mis en FULLSCREEN  ,car en fenêtre agrandi il y avait toujours le décalage.
« Modifié: Juillet 21, 2013, 07:54:26 pm par Seymour »

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #3 le: Juillet 21, 2013, 08:46:55 pm »
C'est normale pour la fenétré agrandi. Je m'explique : quand tu met "position = sf.Vector2(400, 300)", en réalité tu la met pas en 400, 300 pas par rapport à la fenêtre, mais par rapport "à la vue de la fenêtre". Pour corriger ce problème voici ce qu'il faudrait faire :

sprite.position = window.map_pixel_to_coords(mousePos).

La fonction "map_pixel_to_coords" convertie la position de la souris par rapport à la l'écran, vers la position qu'elle devrait être par rapport à ta vue.

Pour la taille, faudrait rajouté ceci en plus :

sprite.size = window.view.size / window.size

et ton curseur ne changera pas de taille :)

Seymour

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #4 le: Juillet 21, 2013, 09:31:22 pm »
Wouaw merci beaucoup,et la taille du curseur en bonus,c'est géniale du coup mon petit vaisseaux sera plus déformer^^,a part que size existe pas sur sprite alors j'ai utiliser ratio,il fonctionne aussi,sauf que en plein écran il me renvoie une erreur,mais qui n'a pas l'air de déteindre sur le programme.

cursor_idle_sprite.ratio = window.view.size / window.size    
  File "system.pyx", line 108, in sfml.system.Vector2.__truediv__ (src/sfml\system.cpp:2762)
ZeroDivisionError: float division by zero

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #5 le: Juillet 21, 2013, 09:48:54 pm »
N'oublie pas que je divise par window.size. Avant d'être construite, window n'a pas de taille (et oui c'est égale à 0 ! ). Pour corriger ceci, précède ratio (oui c'était ratio, désoler) par la condition suivante :

if not 0 in window.size:

ceci va analyser window.size pour voir si il y a un 0 en x ou en y. Je te conseille de te documenter sur les vues avec la SFML, car si tu n'en tiens pas compte, tu peux avoir de très très gros soucis :) .

Seymour

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #6 le: Juillet 21, 2013, 10:02:34 pm »
Oui merci,plus d'erreur.

Tu serais pas sur le site du zéro aussi?

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #7 le: Juillet 21, 2013, 10:21:42 pm »
Si pourquoi ?

Seymour

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #8 le: Juillet 21, 2013, 10:53:09 pm »
Comme ça^^

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Changer le curseur Pysfml
« Réponse #9 le: Juillet 21, 2013, 10:55:48 pm »
Pas de soucis :) .