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

Auteur Sujet: [Solved] Débutant avec pySFML (python-sfml)  (Lu 5268 fois)

0 Membres et 1 Invité sur ce sujet

Logitux

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
[Solved] Débutant avec pySFML (python-sfml)
« le: Août 09, 2013, 09:24:37 pm »
Bonjour,
J'ai entrepris un petit projet de jeu 2D. J'ai d'abord commencé avec pygame mais je me suis assez vite aperçu que j'allais atteindre ses limites. Puis j'ai découvert par hasard SFML qui m'a plutôt convaincu.

Toutefois, avant de me lancer dedans tête baissée j'aurais bien voulu trouver des petits projets (voir sample) pour pySFML, qui utilisent principalement des tileset et de l'alpha blending. J'ai regardé un peu la doc, mais pour cette partie, j'avoue que c'est un peu confus dans ma petite tête.
J'ai également fait plusieurs recherches sur google mais je n'ai pas trouvé grand chose.

Si vous auriez ce genre de ressources, je vous en serais très reconnaissant!
Merci d'avance!

« Modifié: Novembre 04, 2013, 09:45:26 am par Sonkun »

Sonkun

  • Moderator
  • Full Member
  • *****
  • Messages: 241
    • Voir le profil
Re : Débutant avec pySFML
« Réponse #1 le: Août 09, 2013, 10:38:36 pm »
Salut et bienvenue!

La SFML en Python est très proche de sa version en Python donc tout ce que tu trouveras en C++ est valable ici aussi. C'est vrai que pour quelqu'un de tout nouveau à la SFML et qui ne connaît pas du tout le C++, ça va être un peu plus dur. Parce que les gens découvrent la SFML en C++, donc apprend l'API puis, en voyant la version Python se dit "ahhh sauvé!" :p.

Il y a un projet qui consiste à traduire tout les tutoriels en C++ pour la version Python (http://python-sfml.org/future_tutorials.html) mais c'est pas encore complet comme tu peux le constater. En attendant, même si tu connais pas le C++ je te conseille quand même de te baser sur les tutoriels en C++ (http://sfml-dev.org/tutorials/2.1/index-fr.php) pour avoir les rudiments, puis tu te bases sur les tutoriels Python (http://python-sfml.org/tutorials.html) et son API (http://python-sfml.org/api/api_index.html) pour reproduire la même chose. C'est vraiment pas dur.

Par exemple, dans le tutoriel en C++, on te dira que la classe sf::Time représente un temps et que tu peux récuperer le temps en seconde en utilisant sf::Time::asSeconds(), ben tu verras très vite que en Python tu fais:

monTemp = sf.milliseconds(30) # crée un temps
print(monTemp.seconds) # affiche 0.03 (récupération du temps en secondes)

Sur la page des exemples, tu verras que tout les exemples en C++ ont été traduit pour la version Python: http://python-sfml.org/examples.html Ainsi, pour jouer du son, tu peux voir ici à quoi le code ressemblera.

Si tu as des questions, n'hésite pas à poser autant que tu voudras ici.

Bonne chance!

PS: pour ton tileset et l'alpha blending c'est trivial une fois que tu connais la SFML.
Interested in using SFML with Python ? Try out its Python binding!

Logitux

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Débutant avec pySFML
« Réponse #2 le: Août 10, 2013, 01:08:23 am »
Bonjour Sonkun,
Je te remercie pour ta réponse autant complète que rapide.

C'est vrai que je n'ai pas vraiment regardé la doc coté C++ vu que je ne connais que la base. Du moins si je farfouille ma mémoire.  ;D
Mais je pense en effet que cette doc me permettra de beaucoup mieux comprendre. De plus elle est très bien faite et très bien expliquée donc je n'ai plus d'excuse!
En tout cas ça me sera très utile, je te remercie encore.


Logitux

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Débutant avec pySFML
« Réponse #3 le: Août 13, 2013, 04:33:26 pm »
Re bonjour,

De passage, j'ai encore une petite question. Après moult essais, j'ai fini par réussir mon tilemap  8)

Toutefois, l'heure des FPS a sonné. Déjà, la bonne nouvelle c'est que self.clock.restart() me renvoie 16 millisecondes. Après un bref calcul je peux m'apercevoir que je tourne donc aux alentours de 62fps.
Maintenant, je voudrais faire le calcul afin de l'afficher dans la fenêtre. Comme ça je n'aurai pas à réfléchir et pire encore, devoir expliquer aux amis que non, ce n'est pas la valeur réelle du fps. Bref, vous voyez le topo :)

Malheureusement je ne vois pas comment convertir un time en integer, ou directement faire le calcul du genre
sf.seconds(1) / self.time
Éventuellement je pourrais faire une routine pour convertir self.time en string et récupérer la valeur entière... Mais je présume qu'il existe un moyen plus simple que j'ai du rater... Et même surement tout bête!

Bref... Tout ça pour vous demander comment diviser un time.
Merci (encore) d'avance!

(self.time correspond à la valeur retournée de self.clock.restart())

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Débutant avec pySFML
« Réponse #4 le: Août 14, 2013, 01:40:33 am »
sf.Clock.elapsed_time.microseconds ne correspond pas à tes besoin ? Sa te retourne le temps qu'il s'est écoulé entre le dernier restart et le moment où tu appel le getter. Ensuite tu fait :

text = sf.Text(str(1/(10**-6*self.time), sf.Font.from_file("ta font"))

et voila, tu as tout ce qu'il faut :)

Sonkun

  • Moderator
  • Full Member
  • *****
  • Messages: 241
    • Voir le profil
Re : Débutant avec pySFML
« Réponse #5 le: Août 14, 2013, 03:25:46 am »
Aïe. C'est quoi cette horreur! O.o

Pour récupérer le temps en seconde, milliseconde ou microsecondes (qui sont tout les 3 des entiers, donc des integer), utilise ses propriétés.

elapsed_time = clock.restart() # it returns a sf.Time()
print(elapsed_time..seconds)
print(elapsed_time..milliseconds)
print(elapsed_time..microseconds)

Donc, pour calculer le FPS à partir du temps écoulé depuis le dernier rafraichissement:

fps = 1000. / elapsed_time.milliseconds

Note: Ajoute le point après 1000 si tu veux que ça te retourne un nombre plus précis (décimal).

Après, pour afficher ça à l'écran:

font = sf.Font.from_file("myfont.ttf")
text = sf.Text(str(fps), font)
...
window.draw(text)

Interested in using SFML with Python ? Try out its Python binding!

Logitux

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Débutant avec pySFML
« Réponse #6 le: Août 14, 2013, 08:47:57 am »
Ah oui, je vous remercie! Il me manquait juste cette propriété.
Le pire c'est que je l'ai vu dans la doc mais j'ai pas tilté... Je ferais plus attention la prochaine fois. Promis :D