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: « Précédente 1 [2]
16
Python / traduire le tuto c++ des vertexArray et le comprendre :)
« le: Février 11, 2014, 06:00:26 pm »
Bonjour :)

Je viens de débuter sur SFML

Je souhaiterai convertir mon projet de jeux 2d ( basé sur un affichage de tileset et de sprite ) en PyGame, loin d'être fini mais PyGame n’étant pas assez véloce dans certain domaine je voulais essayer SFML pour comparer. Puis apparemment cette librairie offre plus de possibilité :)

J’essaie de traduire le tuto en C++ des vertexarray ( celui qui charge un tileset et l'affiche ) mais je galère quand même pas mal

Voila l'url du tuto C++
http://www.sfml-dev.org/tutorials/2.1/graphics-vertex-array-fr.php

et voici mon début de traduction :

import sfml as sf

class TileMap (sf.Drawable) :

    def __init__ (self):
        sfml.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
                #
                # déjà la ça déconne ...
                #
                tu = tileNumber % (self.m_tileset.size.x / tileSize.x);
                tv = tileNumber // (self.m_tileset.size.x / tileSize.x);
               
               
               
                # on récupère un pointeur vers le quad à définir dans le tableau de vertex
                self.quad = self.m_vertices[(i + j * width) * 4]
               
                print(type(self.quad))
               
                # on définit ses quatre coins
                #
                # C'est la que je ne comprend pas ... un type(self.quad) m'indique que c'est un vertex
                # hors un vertex ne n'est pas iterable donc d’où vient le quad[2]
                #
                self.quad[0].position = sf.Vector2(i * tileSize.x, j * tileSize.y)
                self.quad[1].position = sf.Vector2((i + 1) * tileSize.x, j * tileSize.y)
                self.quad[2].position = sf.Vector2((i + 1) * tileSize.x, (j + 1) * tileSize.y)
                self.quad[3].position = sf.Vector2(i * tileSize.x, (j + 1) * tileSize.y)

                # on définit ses quatre coordonnées de texture
                self.quad[0].tex_coords = sf.Vector2(tu * tileSize.x, tv * tileSize.y)
                self.quad[1].tex_coords = sf.Vector2((tu + 1) * tileSize.x, tv * tileSize.y)
                self.quad[2].tex_coords = sf.Vector2((tu + 1) * tileSize.x, (tv + 1) * tileSize.y)
                self.quad[3].tex_coords = sf.Vector2(tu * tileSize.x, (tv + 1) * tileSize.y)




# On crée la fenêtre principale
window = sf.RenderWindow(sf.VideoMode(800, 600), "PySFML test")
# window.vertical_synchronization = True
# window.framerate_limit = 60
# icon = sf.Image.from_file("data/icon.bmp")
# window.icon = icon.pixels  
     
       
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,
    ]
tm = TileMap()
tm.load("resources/tileset1a.jpg",sf.Vector2(32,32),level,16,8)

window.draw(tm)
window.display()
 


Je ne comprend pas cette histoire de quad, qui est un vertex et qui serait iterrable ???

version C++ :

                // on récupère un pointeur vers le quad à définir dans le tableau de vertex
                sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

                // on définit ses quatre coins
                quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);

Pages: « Précédente 1 [2]