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

Auteur Sujet: [Solved] Toujours un problème avec RenderWindow ! (python-sfml)  (Lu 6028 fois)

0 Membres et 1 Invité sur ce sujet

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Bonsoir,

bon j'imagine que sonkun en a eu marre de mon anglais déplorable, alors je vais lui faciliter la tâche en français :) . Alors voila mon problème : impossible d'hériter de sf.RenderWindow afin justement de profiter de ses fonctions qui me sont très utiles. Environ 9 fois sur 10, j'ai une segmentation fault, et la 10 fois, lorsque je resize la fenêtre, la vue ne réinitialise pas à sa taille par défaut (voir screenshot ici : http://en.sfml-dev.org/forums/index.php?topic=11378.0

Voici un tout petit programme qui explique le problème :

#!/usr/bin/python3
#-*-coding:utf-8-*-

import sfml as sf

class Window2(sf.RenderWindow):
        def __init__(self, MODE, STRING):
                sf.RenderWindow.__init__(self, MODE, STRING)
window = Window2(sf.VideoMode(800,600,32),"teste")
window.framerate_limit = 60

check = sf.CircleShape(20)
check.position = sf.Vector2()

while window.is_open:
        for event in window.events:
                if type(event) is sf.CloseEvent:
                        window.close()
                if type(event) is sf.ResizeEvent:
                        print(1)

        window.clear()
        window.draw(check)
        window.display()

Avec celui ci, j'ai encore pire : j'ai comme message d'erreur ceci :
1Traceback (most recent call last):
  File "./test.py", line 20, in <module>
    print(1)
AttributeError: 'str' object has no attribute 'on_resize'
 

ou encore :
1Traceback (most recent call last):
  File "./test.py", line 20, in <module>
    print(1)
SystemError: null argument to internal routine

Je suis donc partie à la recherche de cette fonction, et elle se trouve dans DerivableWindow. Après un rapide coup d'oeil dans le code source (désoler je ne connais pas cython, j'essaye tant bien que mal de localiser le problème x) ), j'ai vu ceci :
def __init__(self, VideoMode mode, title, Uint32 style=sf.style.Default, ContextSettings settings=None):
        if self.__class__.__name__ != 'RenderWindow':
            if self.__class__ is Window:
                if not settings: self.p_window = new sf.Window(mode.p_this[0], toEncodedString(title), style)
                else: self.p_window = new sf.Window(mode.p_this[0], toEncodedString(title), style, settings.p_this[0])

            else:
                if not settings: self.p_window = <sf.Window*>new DerivableWindow(mode.p_this[0], toEncodedString(title), style)
                else: self.p_window = <sf.Window*>new DerivableWindow(mode.p_this[0], toEncodedString(title), style, settings.p_this[0])
                (<DerivableWindow*>self.p_window).set_pyobj(<void*>self)

Le
if self.__class__.__name__ != 'RenderWindow':
ne devrais pas être quelque chose du genre si la classe ne dérive pas de RenderWindow ? Je dis sa mais en vrai je n'en sais rien x) . Désoler du problème, et merci encore :D

Après quelques petits teste, la vue est en réalité pas resize, mais un viewport "visuel" est soudainement apparue lors d'un resize de la Fenêtre... Mouarf, vais commencer par désespérer, surtout que maintenant j'en ai besoin pour avancer x) .

Merci encore :) .
« Modifié: Novembre 04, 2013, 09:44:53 am par Sonkun »

Sonkun

  • Moderator
  • Full Member
  • *****
  • Messages: 241
    • Voir le profil
Re : [Version Française]Toujours un problème avec RenderWindow !
« Réponse #1 le: Juillet 21, 2013, 06:20:16 am »
Salut!

Ton anglais me posait pas de problème :p j'avais vu tes messages mais je n'ai pas eu le temps de m'en occuper, c'est pour ça que y'avait pas encore de réponse! Ceci dit, c'est plus facile en français (même pour moi :p), donc on est mieux ici, de plus qu'il commence à durer ce bug! Pour attaquer ce problème, j'ai vraiment besoin de revoir la manière dont je gère l'héritage en Cython. C'est une des quelques tâches restantes avant de passer à la version 1.4, la version finale qui correspondra à la SFML 2.0. Pour cela, j'ai besoin de consacrer du temps et pour l'instant je suis fort occuper sur d'autre projet.

Par contre, tu dis que ça commence à t'empêcher d'avancer donc ça m'interpelle. J'ai pas mal de chose à faire aujourd'hui mais je te propose ce soir de se contacter et trouver une solution alternative pour que tu puisses continuer à avancer (je suis certain qu'y doit y'avoir moyen, au pire une version modifié de pySFML que tu utiliserais pour continuer à avancer).

Je te redonne de mes nouvelles ce soir! Et merci! :)
Interested in using SFML with Python ? Try out its Python binding!

Sonkun

  • Moderator
  • Full Member
  • *****
  • Messages: 241
    • Voir le profil
Re : [Version Française]Toujours un problème avec RenderWindow !
« Réponse #2 le: Juillet 21, 2013, 06:26:23 am »
Ah, c'est toi l'auteur du pull request sur Github :p Avant d'ajouter ton code, je dois vérifier si il est correcte donc ne le supprime pas! Merci :)
Interested in using SFML with Python ? Try out its Python binding!

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Version Française]Toujours un problème avec RenderWindow !
« Réponse #3 le: Juillet 21, 2013, 02:45:33 pm »
Oui c'est moi l'auteur du pull request, et je n'ai plus eu de bug de segmentation, de méthode manquante (qui était le cas avant : la lib ne trouvait pas "on_resize" par exemple) et le comportement du resize est le même qu'en C++. Comme il commençait à durer, j'ai décidé d'allez voir moi même un peu comment tout sa est fait (j'y connais rien en cython, mais comme la syntaxe ressemblait au C++ et à python, sa ne m'a pas empêcher de faire un trucs qui semble fonctionné x) ).

Sa m'empéchait d'avancer car ma lib est presque prête, et que maintenant je souhaite l'utiliser pour corriger de nombreux bugs (puis avoir 50 segmentation fault, c'est pas très bon pour mon pauvre journald ! ).
ps : j'en ai un second pour ajout de la fonction "create" à sf.RenderTexture.
« Modifié: Juillet 21, 2013, 02:50:46 pm par gaulois94 »

Sonkun

  • Moderator
  • Full Member
  • *****
  • Messages: 241
    • Voir le profil
Re : [Version Française]Toujours un problème avec RenderWindow !
« Réponse #4 le: Novembre 04, 2013, 09:44:30 am »
Merci pour ton pull request, dommage qu'il réglait pas le problème correctement :p

Entre temps, ce problème a été résolu dans le commit 19c077c

Merci d'avoir reporté le bug.
Interested in using SFML with Python ? Try out its Python binding!