Forum de la communauté SFML

Bindings - autres langages => Python => Discussion démarrée par: Seymour le Juillet 21, 2013, 02:41:08 am

Titre: [Solved] Changer le curseur (python-sfml)
Posté par: Seymour 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?
Titre: Re : Changer le curseur Pysfml
Posté par: Sonkun 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. (http://www.sfml-dev.org/tutorials/2.0/)

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

PS: évite les doublons sur le forum anglophone.
Titre: Re : Changer le curseur Pysfml
Posté par: Seymour 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.
Titre: Re : Changer le curseur Pysfml
Posté par: gaulois94 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 :)
Titre: Re : Changer le curseur Pysfml
Posté par: Seymour 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
Titre: Re : Changer le curseur Pysfml
Posté par: gaulois94 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 :) .
Titre: Re : Changer le curseur Pysfml
Posté par: Seymour le Juillet 21, 2013, 10:02:34 pm
Oui merci,plus d'erreur.

Tu serais pas sur le site du zéro aussi?
Titre: Re : Changer le curseur Pysfml
Posté par: gaulois94 le Juillet 21, 2013, 10:21:42 pm
Si pourquoi ?
Titre: Re : Changer le curseur Pysfml
Posté par: Seymour le Juillet 21, 2013, 10:53:09 pm
Comme ça^^
Titre: Re : Changer le curseur Pysfml
Posté par: gaulois94 le Juillet 21, 2013, 10:55:48 pm
Pas de soucis :) .