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 - davs63

Pages: [1] 2 Suivante »
1
Python / Re : Fuite de mémoire avec sf.Image
« le: Février 17, 2015, 06:07:06 pm »
Donne moi un code tout prêt, je vais tester sous window. Je n'ai jamais eu de fuite de mémoire

2
Python / PySFML sur raspberryPi
« le: Décembre 05, 2014, 10:25:23 am »
Bonjour, quelqu'un saurait comment installer PySFML sur raspberryPi ? Ou "compiler"  ( je sais que python ne se compile pas ) /  "packager" pour qu'un programme s’exécute sur l'os de ce mini pc ? (un dérivé de debian il me semble )

3
Python / Re : Heritage ConvexShape __cinit__ error
« le: Novembre 28, 2014, 10:13:08 am »
Post le ici :) ça pourra toujours servir :)

4
Python / Re : Installation
« le: Novembre 28, 2014, 10:09:41 am »
Pyzo, je ne connais pas, apparemment c'est un environnement de développement. Est ce vraiment indispensable ?

Sinon test un truc : installe python seul avant pyzo ( comme ça tu aura les enregistrements dans la base de registre ) puis tu pourra installer pySfml

5
Python / BUG ? une touche ( R_ALT ) qui en actionne deux autres
« le: Février 28, 2014, 09:04:33 am »
bonjour :)

Je me demandais si il n'y avait pas un bug avec la touche ALT de droite qui actionne aussi la touche contrôle de gauche.

Est ce un bug ou c'est Windows qui impose ça ?

ce code retourne 37 puis 43 lorsqu'on appuis sur la touche ALT de droite ( 37 étant : contrôle gauche )


import sfml as sf

def main():
    # Creation de la fenetre principale
    window = sf.RenderWindow(sf.VideoMode(800, 600), 'SFML Shader example')
    window.framerate_limit = 60

    # Demarage de la boucle principale
    while window.is_open :
        # gestion des evenements de la fenetre
        for evt in window.events :
                       
            if type(evt) is sf.CloseEvent :
                window.close()
            if type(evt) is sf.KeyEvent and evt.pressed :
               
                # Affichage du code de la touche qu'on presse
                print(evt.code)
           
                if evt.code == sf.Keyboard.ESCAPE :
                    window.close()

        # Netoyage de la fenetre
        window.clear()
       
        window.display()

if __name__ == '__main__':
    main()
 

6
Python / Re : movement d'objet
« le: Février 18, 2014, 01:21:51 pm »
Après tes explication et moults essais :) j'ai enfin trouvé. Je pense qu'il y a quelques erreurs dans le tuto

donc effectivement il faut bien le states dans  :       

target.draw(self.persoSprite, states)

logique :)

mais dans la ligne qui génère une erreur

states.transform.combine(self.transformable.transform)

il y a un mot de trop : transformable

et sans ce mot cela fonctionne parfaitement, donc :

states.transform.combine(self.transform)

ou

states.transform = self.transform

_________________


Et voici le code complet pour ceux qui veulent un Sprite qui peut bouger :)

import sfml as sf

class Perso (sf.TransformableDrawable) :
   
    def __init__(self,texture):
        sf.Drawable.__init__(self)

        # Chargement de la texture et creation du sprite qui l'utilisera
        self.imgTexture = sf.Texture.from_file(texture)
        self.persoSprite = sf.Sprite(self.imgTexture)
       
    def getImage(self,direction):
       
        # en fonction du parametre 'direction' on decoupe un morceau (sf.Rectangle)
        # de la texture pour la plaquer sur le sprite
        if   direction == 'down' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 0), (32, 32))
            # self.persoSprite.color = sf.Color(255,0,255,250)
        elif direction == 'up' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 96), (32, 32))
        elif direction == 'left' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 32), (32, 32))
        elif direction == 'right' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 64), (32, 32))
        else :
            print("ERROR : class Perso : ... ")
           
    def draw(self, target, states):
   
        # Transmission des parametres de transformation de l'obet Perso aux RenderStates ( states )
        states.transform.combine(self.transform)
        # Dessin du srpite avec le RenderStates precedement definie
        target.draw(self.persoSprite, states)

       
       
if __name__ == '__main__' :

    # Creation de la fenetre
    window = sf.RenderWindow(sf.VideoMode(800, 600), "PySFML test")
    # Limitation à 60 FPS
    window.framerate_limit = 60
    # Instance de la classe Perso en indiquant l'image qui servira de texture
    player = Perso('resources/mperso.png')
    player.getImage('down')
    # Position de l'objet
    player.position = sf.Vector2(150, 50)

   
    # On démarre la boucle de jeu
    while window.is_open :
        # on gère les évènements
        for event in window.events :
            if type(event) is sf.CloseEvent :
                window.close()
       
        # Effase le contenue de la fenetre
        window.clear()
        # Transformation de l'objet
        player.move(sf.Vector2(1,0))
        player.rotate(1)
        # Affichage de l'objet
        window.draw(player)  
        # Rafraichissement de la fenetre
        window.display()    

7
Python / Re : movement d'objet
« le: Février 18, 2014, 12:07:06 pm »
Justement :) je le met le states ( avec ou sans ça n'a aucun effet apparemment )

    def draw(self, target, states):
        states.transform.combine(self.transformable.transform)
        target.draw(self.persoSprite, states)
 

alors que dans le tuto il ne le mettent pas :

    def draw(self, target, states):
        states.transform.combine(self.transformable.transform)
        target.draw(body)
        target.draw(clothes)

c'est cette ligne qui crée le probleme :

        states.transform.combine(self.transformable.transform)

Et je comprend pas trop ce que ce code fait.

Le mot combine n'existe pas en python il me semble donc c'est un membre de RenderStates je suppose ? mais je ne le trouve pas non plus dans l'API référence


8
Python / Re : movement d'objet
« le: Février 17, 2014, 11:39:11 pm »
le tuto indique la ligne :

states.transform.combine(self.transformable.transform)

à mettre dans la methode draw de l'objet

je fais un copié collé du tuto :

class MyDrawable(sf.TransformableDrawable):
    def __init__(self):
        sf.Drawable.__init__(self)

    def draw(self, target, states):
        states.transform.combine(self.transformable.transform)
        target.draw(body)
        target.draw(clothes)

mydrawable = MyDrawable()
mydrawable.position = (20, 30) # we have properties \o/

Et sur mon code quand j'applique cette ligne ça me plante python

screenshot en fichier join


9
Python / movement d'objet
« le: Février 17, 2014, 08:09:15 pm »
Bonjour :)

J'aimerai créer une classe qui affiche un personnage à l’écran et ses mouvements

j'ai lue dans le forum qu'on ne pouvait pas hériter de sf.Sprite mais uniquement de sf.Drawable ou sf.TransformableDrawable et à l’intérieur on crée le sprite qui affichera un bout de la texture

J'ai donc codé une petite classe Perso

Mais quand je veux bouger le personnage ( avec .move(x,y) ) il ne bouge pas. .position n'a aucun effet non plus. La position de l'objet change mais pas le sprite. J'ai l'impression que le sprite est indépendant de l'objet

Qu'est ce que j'ai oublié ? :)

import sfml as sf

# ----- CLASSE -----

class Perso (sf.TransformableDrawable) :

    def __init__(self,texture):
        sf.Drawable.__init__(self)
        print("perso chargé ! ")
        self.imgTexture = sf.Texture.from_file(texture)
        self.persoSprite = sf.Sprite(self.imgTexture)
       
    def getImage(self,direction):
        if   direction == 'down' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 0), (32, 32))
        elif direction == 'up' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 96), (32, 32))
        elif direction == 'left' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 32), (32, 32))
        elif direction == 'right' :
            self.persoSprite.texture_rectangle = sf.Rectangle((0, 64), (32, 32))
        else :
            print("ERROR : class Perso : ... ")
           
    def draw(self, target, states):
        states = sf.RenderStates()
        target.draw(self.persoSprite,states)


# ----- MAIN -----
       
if __name__ == '__main__' :

    window = sf.RenderWindow(sf.VideoMode(800, 600), "PySFML test")
    window.framerate_limit = 60
   
    # On crée une instance de Perso()
    player = Perso('resources/mperso.png')
    player.getImage('down')
    player.position = (150, 50)
   
    # On démarre la boucle de jeu
    while window.is_open :
        # on gère les évènements
        for event in window.events :
            if type(event) is sf.CloseEvent :
                window.close()
       
        # On dessine le niveau
        window.clear()
        window.draw(player)  
        player.move(sf.Vector2(2,0))
        print(player.position)

        window.display()  

10
Python / Re : traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 14, 2014, 09:52:06 am »
Ça fonctionne sans l’héritage donc je vais faire sans :)  et je reviendrai dessus quand j'aurai plus d’expérience.

Je compte tenir un blog pour montrer toutes les étapes de A à Z du développement de mon jeu avec Python et Sfml, et en français évidement. C'est pour ça que j’essaie de ne pas trop contourner les problèmes mais de les comprendre et les repoudre. J'ai pas fini de venir sur ce forum ^^

En tout cas merci pour tes explications et ton aide :)

11
Python / Re : traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 13, 2014, 05:35:29 pm »
C'est vraiment sympa de m'expliquer :) , j'ai tenté de comprendre mais je pense que mon niveau est à des années lumière du tient  :'(

Je ne connais absolument pas C++ dont la syntaxe est assez exotique pour moi, et comparé aux langages plus simple que je connais un peu (python, php)

En c++ apparemment on doit déclarer les variables sans le fameux = et en indiquant obligatoirement le type en avant celle ci. Il y a une bestiole étrange " :: " qui a l'air de dire " je suis un membre de la classe ... " et donc remplace la simple notation pointé. Et le void, je crois que je l'ai déjà vue en AS3 ^^ et veut dire " je renvoie rien " . Bref C++ c'est hard pour les petits esprits comme le miens, je vais pas t’embêter à m'expliquer ce langage on sortirai du cadre de ce forum

Mais en python quand j'envoie :  window.draw(objet) ça n'appelle pas la méthode draw de cet objet :/

Du coup mon code map.draw(window) dans la boucle while est une mauvaise manière d'utiliser la classe Tilemap ?

Je vais re relire la doc de pysmfl au sujet de renderWindow

12
Python / Re : traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 13, 2014, 03:44:48 pm »
Il me reste une question, sur la methode draw de la classe Tilemap du tuto :
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        // on applique la transformation
        states.transform *= getTransform();

        // on applique la texture du tileset
        states.texture = &m_tileset;

        // et on dessine enfin le tableau de vertex
        target.draw(m_vertices, [b]states[/b]);
    }

Je ne comprend pas comment est elle appelée puisque dans Main() on a un simple :

window.draw(map);
puis le paramètre sf::RenderStates statesje ne voie nul pars ou il est envoyé :/


en python je suis obligé d'appeler la methode classiquement :

map.draw(window)

et sans passer le paramètre states

13
Python / Re : traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 13, 2014, 02:13:32 pm »
et non :)

Voici le message d'erreur  concernant la ligne : states.texture = tileset

Citer
TypeError: can't set attributes of built-in/extension type 'sfml.graphics.RenderStates'

EDIT :

ahh j'ai vue d’où provient une des erreurs :

states = sf.RenderStates()

Je vais déjà chercher de ce coté la :)


EDIT 2 :

J'arrive a afficher la map :)

Voici le code pour les intéressés  :

import sfml as sf

class TileMap (sf.TransformableDrawable) : # sf.Transformable

    def __init__ (self):
        sf.Drawable.__init__(self)
       
        # on declare la texture et le VertexArray
        self.m_tileset = sf.Texture
        self.m_vertices = sf.VertexArray(sf.PrimitiveType.QUADS)
     
    def load (self,tileset, tileSize, tiles, width, height) :
       
        # on charge la texture
        self.m_tileset = sf.Texture.from_file(tileset)

        # on redimensionne le tableau de vertex pour qu'il puisse contenir tout le niveau
        self.m_vertices.resize(width * height * 4);
       
        # on remplit le tableau de vertex, avec un quad par tuile
        for i in range(width) :
            for j in range(height) :
               
                # on récupère le numéro de tuile courant
                tileNumber = tiles[i + j * width];

                # on en déduit sa position dans la texture du tileset
                tu = tileNumber % (self.m_tileset.size.x / tileSize.x);
                tv = tileNumber // (self.m_tileset.size.x / tileSize.x);

                # On incremante une variable qui definie la position de chaque case
                case = (i + j * width) * 4;
               
                # on définit ses quatre coins
                self.m_vertices[case + 0].position = sf.Vector2(i * tileSize.x, j * tileSize.y)
                self.m_vertices[case + 1].position = sf.Vector2((i + 1) * tileSize.x, j * tileSize.y)
                self.m_vertices[case + 2].position = sf.Vector2((i + 1) * tileSize.x, (j + 1) * tileSize.y)
                self.m_vertices[case + 3].position = sf.Vector2(i * tileSize.x, (j + 1) * tileSize.y)
               
                # on définit ses quatre coordonnées de texture
                self.m_vertices[case + 0].tex_coords = sf.Vector2(tu * tileSize.x, tv * tileSize.y)
                self.m_vertices[case + 1].tex_coords = sf.Vector2((tu + 1) * tileSize.x, tv * tileSize.y)
                self.m_vertices[case + 2].tex_coords = sf.Vector2((tu + 1) * tileSize.x, (tv + 1) * tileSize.y)
                self.m_vertices[case + 3].tex_coords = sf.Vector2(tu * tileSize.x, (tv + 1) * tileSize.y)

    def draw(self, target) :
       
        states = sf.RenderStates()
        states.texture = self.m_tileset
        target.draw(self.m_vertices, states)

# ----- MAIN -----


# On crée la fenêtre principale
window = sf.RenderWindow(sf.VideoMode(800, 600), "PySFML test")
     
level = [
        0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
        1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
        0, 1, 0, 0, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 0, 0,
        0, 1, 1, 0, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2, 0, 0,
        0, 0, 1, 0, 3, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0,
        2, 0, 1, 0, 3, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1,
        0, 0, 1, 0, 3, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1,
    ]

# on crée la tilemap avec le niveau précédemment défini
map = TileMap()
map.load("resources/tileset1a.jpg", sf.Vector2(32,32),level,16,8)

# On démarre la boucle de jeu
while window.is_open :
    # on gère les évènements
    for event in window.events :
        if type(event) is sf.CloseEvent :
            window.close()
   
    # On dessine le niveau
    window.clear()
    map.draw(window)    
    window.display()
   

14
Python / Re : traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 13, 2014, 01:08:05 pm »
J'ai fait ce que tu m'a dit :) il n'y pas d'erreur mais il n'y a pas d'affichage non plus.

Je pense qu'il y a un truc qui rechape avec la méthode draw de la classe Tilemap et la methode sf.draw originale aussi


ce code fonctionne et m’affiche un jolie rectangle avec un dégradé de couleur :

import sfml as sf

window = sf.RenderWindow(sf.VideoMode(640, 480), 'SFML Window')

quad = sf.VertexArray(sf.PrimitiveType.QUADS, 4)
quad[0].position = (10, 10)
quad[1].position = (110, 10)
quad[2].position = (110, 110)
quad[3].position = (10, 110)

quad[0].color = sf.Color.RED
quad[1].color = sf.Color.GREEN
quad[2].color = sf.Color.BLUE
quad[3].color = sf.Color.YELLOW

window.draw(quad)
 

Mais pour appliquer une texture, je pensai qu'il suffisait de passer cette texture en paramètre comme l'indique le tuto

Citer
sf::VertexArray vertices;
sf::Texture texture;

...

window.draw(vertices, &texture);

donc :

tileset = sf.Texture.from_file("resources/tileset1a.jpg")
window.draw(quad, tileset)
 
Erreur :
Citer
TypeError: Argument 'states' has incorrect type (expected sfml.graphics.RenderStates,
got sfml.graphics.Texture)

Il faut passer un renderStates ? et la ...

quad = sf.VertexArray(sf.PrimitiveType.QUADS, 4)
quad[0].position = (10, 10)
quad[1].position = (110, 10)
quad[2].position = (110, 110)
quad[3].position = (10, 110)

quad[0].color = sf.Color.RED
quad[1].color = sf.Color.GREEN
quad[2].color = sf.Color.BLUE
quad[3].color = sf.Color.YELLOW

quad[0].tex_coords = (0, 0);
quad[1].tex_coords = (25, 0);
quad[2].tex_coords = (25, 50);
quad[3].tex_coords = (0, 50);

tileset = sf.Texture.from_file("resources/tileset1a.jpg")

states = sf.RenderStates
states.texture = tileset

window.draw(quad,states)



15
Python / Re : traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 12, 2014, 11:07:58 pm »
Merci pour ta réponse :) je vais essayer ça

J'en profite, pour un affichage en tuile, ( comme dans le tuto)  il est préférable d'utiliser les tableau de vertex ou un affichage de multiple sprites fonctionne aussi très bien ?

Pages: [1] 2 Suivante »
anything