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.0Voici 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
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
.