Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - gaulois94

Pages: « Précédente 1 [2] 3 4 ... 11 Suivante »
16
Python / Re : Scrolling vue de haut
« le: Juillet 27, 2013, 03:22:23 pm »
Ah non ce n'est pas la même chose :) . En gros au début, sprite.ratio = sf.Vector2(1, 1) (le sprite n'est pas zoomer).
Sonkun : sa fait depuis un long moment que j'utilise la SFML maintenant :) , je pense pouvoir aider un peu :D
Puis cx_freeze n'est pas pressé :) .

17
Python / Re : Scrolling vue de haut
« le: Juillet 26, 2013, 08:35:13 pm »
Euh ratio est différent de size ! ratio est simplement une variable qui t'indique de combien a été zoomé le sprite.
remplace sprite.size par sprite.global_bounds.size, et tout se passera bien :)

18
Python / Re : Scrolling vue de haut
« le: Juillet 26, 2013, 01:41:20 pm »
sf.View = view
view.size = window.view.size
view.center = sprite.position + sprite.size / 2
window.view = view
 
Et voila, le sprite reste au centre de la vue :)

19
Voila par exemple un jeu assez simple (et pas complet du tout : je suis entrain d'y travailler dessus) qui réutilise les concepts d'updates de la lib pour une utilisation très simple (en clair, moins de 3/4 heures moins faire ceci, sprites compris (quelques uns sont de moi, d'autres non (suis pas graphistes x) ))) :

http://img341.imageshack.us/img341/5393/77e.png

Ici, les ennemies sont des Widgets, et même les laser créé. Pour les détruire, rien de plus simple : self.parent = None, et la balle laser ne sera plus update en attendant que python la supprime de la mémoire.

Le code source est disponible dans le dossier samples/shoot de la page github.

20
J'utilise cette fonction une fois par frame par entité graphique affiché à l'écran qui peut avoir un focus (cette fonction me sert à savoir où se situe l'objet par rapport à la souris). Lorsque je met à jours le focus des entités, j'ai une baisse importante de framerate. Voici le résultat d'un profiler :

http://sprunge.us/RgZD

et la ligne correspondante à la fonction :
"4304    1.382    0.000    1.382    0.000 {method 'map_coords_to_pixel' of 'sfml.graphics.RenderWindow' objects}"

Sur 15 secondes, sachant que je n'update le focus que si la souris bouge (pour éviter de trop update inutillement), elle me prends 1.4 secondes, ce qui est assez énorme je trouve (c'est la troisième fonction à prendre le plus de ressources "tottime = temps total passé dans cette fonction sans compter les sous fonctions qu'elle appel". cumtime : "temps cumulé passé dans cette fonction en compter le temps passé dans les sous fonctions appelé par celle ci".)

Je voulais savoir, c'est le carte graphique ou bien le processeur qui fait la conversion ?

21
Il y a juste un soucis avec ces fonctions : elles sont très lentes. En effet, à l'aide d'un Profiler en python (j'utilise le binding python de la sfml), la fonction convert_map_point_to_screen bouffe énormément de ressources, c'est normale ?

22
Projets SFML / Re : [jeu 3d] Pigami
« le: Juillet 23, 2013, 02:57:25 pm »
Faut dire que ma carte graphique est à moitier morte la pauvre, c'est sans doute la principal raison. Merci pour le changement de niveau :)

23
Python / Re : Changer le curseur Pysfml
« le: Juillet 21, 2013, 10:55:48 pm »
Pas de soucis :) .

24
Python / Re : Changer le curseur Pysfml
« le: Juillet 21, 2013, 10:21:42 pm »
Si pourquoi ?

25
Python / Re : Changer le curseur Pysfml
« 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 :) .

26
Python / Re : Changer le curseur Pysfml
« 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 :)

27
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.

28
Projets SFML / Re : [jeu 3d] Pigami
« le: Juillet 21, 2013, 12:30:09 am »
J'ai essayé ton jeu pour voir ce qu'il donnait. Déjà, bravo pour le rendu 3D, c'est propre, rien à redire. Cependant, mon pc rame énormément en lançant ton jeu (je suis sous linux 64 bits). De plus, je reste bloqué au niveau 1, même quand je le réussi !!!!

29
Comme j'étais nouveau en programmation, je n'ai pas eu le temps de beaucoup coder sur ce projet (car j'apprends sans cesse de nouvelles choses, sans parler des grandes poses que j'ai réalisé).

Mais je peux vous dire maintenant que le projet avance bien, et ce pour mon plus grand plaisir :D

Je vous poste dans quelques screens, et un code en python (le code en C++ n'ai pas à jours malheureusement. Je le ferai quand le code python sera impecable (plus rapides à programmer et à faire les testes).

Les nouveautés sont des nouveaux widgets (progressBar, Layout, Slide, TextArray et bientôt EditText), une gestion d'un multi clipping (on peu clipter un widget parent qui va clipter des widgets filles eux même clipter (vous allez comprendre avec un screen), une gestion des positions et des tailles par rapport à l'écran (sa semble facile, mais ce fut un bordel :p )

Brefs, ormis mon anglais désastreu, la majorité du code est stable. Seul soucis : le code bouffe trop de CPU, faudrait que j'optimise tout sa un jour (sa prends vraiment beaucoup de charge).

Allez, voici un bout de code qui montre comment tout ceci est facilement géré :

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

from Window import Window
from Image import Image
from Label import Label
from Button import Button
from CheckBox import CheckBox
from CheckCircle import CheckCircle
from Widget import *
from Layout import Layout
from Frame import Frame
from SelectionMenu import SelectionMenu
from TextArray import TextArray
from Label import Label
from Slide import Slide
from ProgressBar import ProgressBar

import sfml as sf
import time

window = Window(sf.VideoMode(800,600,32), "teste", backgroundColor = sf.Color.GREEN, framerateLimit=3)
progress = ProgressBar(window, sf.Rectangle(sf.Vector2(), sf.Vector2(100, 20)))

progress2 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 200), sf.Vector2(100, 20)))
progress3 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 300), sf.Vector2(100, 20)))
progress4 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 400), sf.Vector2(100, 20)))
progress5 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 430), sf.Vector2(100, 20)))
#textArray = TextArray(window, label=Label(None, "coucou je viens d'écrire \n mon premier text array, j'espère qu'il vous plaira mes jeunes amis !", font=sf.Font.from_file("DejaVuSans.ttf")), alignment=Position.Center)
#textArray.setPos(sf.Vector2(150, 150))

#background0 = Image(None, "Ressources/Images/image.jpg", delTextureCreated = False)
#background1 = Image(None, "Ressources/Images/FirstMenu.jpg", delTextureCreated = False)
#window.backgroundImage = background0

slide = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 30), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide.clipRect=sf.Rectangle(sf.Vector2(), sf.Vector2(500, 10))
slide._forground.clipRect = sf.Rectangle(sf.Vector2(7, 7), sf.Vector2(20, 15))
slide2 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 230), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide3 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 330), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide4 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 430), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide5 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 470), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))

#frame = Frame(window, sf.Rectangle(sf.Vector2(10, 10), sf.Vector2(400, 300)), title="frame")
#layout = SelectionMenu(window, permanentActivation=True)
#layout.spacing = sf.Vector2(10, 10)
#box = CheckBox(window, sf.Rectangle(sf.Vector2(100, 100), sf.Vector2(50, 50)))
#box2 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(50, 50)))
#box3 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(50, 50)))
#box4 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(100, 100)))
#box5 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(100, 100)))
#layout.addWidget(box, sf.Vector2(1, 0), sf.Vector2(1, 1))
#layout.addWidget(box2, sf.Vector2(1, 1), sf.Vector2(1, 1))
#layout.addWidget(box3, sf.Vector2(0, 2), sf.Vector2(1, 1))
#layout.addWidget(box4, sf.Vector2(2, 1), sf.Vector2(1, 1))
#layout.addWidget(box5, sf.Vector2(1, 1), sf.Vector2(1, 1))
#layout.posOrigin = Position.Center
#layout.pos = sf.Vector2(400, 300)
#layout.setAllActiveMouseKeyboard(sf.Keyboard.RETURN, sf.Mouse.LEFT)
#layout.canFocus = False

#print(layout[(sf.Vector2(0, 1))])


while window.is_open:
        window.update()

Ce qui donne : http://img13.imageshack.us/img13/5234/k9y.png

Le premier Slide a été clipté ainsi que son "bouton bleu" (slide._forground). Comme vous le voié, aucun débordement n'a été fait lors de la superposition du clipte. Les progressBar utilisent d'ailleurs le clipping pour afficher le widget de devant. Les slides et les progress bar sont connecté par une manière assez artisanal je vous l'accorde (il n'y a pas de slot encore, et je me demande si je vais en implémenté). Quelques bugs subsistent encore avec une taille de vue initiale différente de la taille du Render auquel elle est lié (se sera corriger dans la journée :) ).


Je donnerai très prochainement un exemple d'intéraction entre différent menu d'un jeu vidéo par exemple.

Voila, merci encore :) .

édit : problème avec un resize pour le clipping réglé, la preuve en screen : http://img838.imageshack.us/img838/2731/rpnh.png (oui j'ai déplacer un peu le premier slide pour faire quelque test avec un côter droit sortant de la fenêtre initial). Pour utiliser ce code, vous devez prendre cette version de pysfml : https://github.com/Gaulois94/python-sfml car règle des problèmes au niveau de l'héritage avec sf.RenderWindow et sf.RenderTexture (j'attends que sonkun valide le code envoyé).

édit 2 : pendant que je suis a montrer différent Widget, voici un TextArray coupé par tranches de mots, dont le text est centré : http://img593.imageshack.us/img593/4489/ufwu.png .

30
Python / [Solved] Toujours un problème avec RenderWindow ! (python-sfml)
« le: Juillet 16, 2013, 12:00:53 am »
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 :) .

Pages: « Précédente 1 [2] 3 4 ... 11 Suivante »