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

Auteur Sujet: tableau de sprite  (Lu 2959 fois)

0 Membres et 1 Invité sur ce sujet

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
tableau de sprite
« le: Novembre 19, 2015, 03:59:59 pm »
Bonjour, je souhaiterais s'avoir quel est la meilleur solution pour faire un tableau de sprite.

   1. Je fait un tableau de sprite comme ceci : std::vector<projectile> nom tableau ;

   2.Je fait un tableau de sprite avec des pointeurs pour pouvoir gérer leur destruction.

Le seul hic c'est que je ne sait comment faire pour l'option 2 du coup si vous pourriez m'éclaircir sur ce point j'en serais ravi
 
« Modifié: Novembre 19, 2015, 04:10:27 pm par Snitteur »

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : tableau de sprite
« Réponse #1 le: Novembre 20, 2015, 07:03:50 am »
Dans tous les cas tu peux les détruire que ce soit avec un vector ou avec l'opérateur new, il te suffira de faire .pop_back() ou delete pour l'opérateur new.

Le truc important à savoir c'est combien tu veux de sprites ? Car si tu en as beaucoup autant opter pour un vertexArray (Comme on peut le voir dans le tutoriel "Concevoir ses formes avec les tableaux de vertex")

Mais sinon pour l'opérateur new il te suffit de faire :

NomDeTonObjet *NomDeTonTableau = new NomDeTonObjet[Nbr_d'objet_total_dans_ton_tableau];
Et pour y accéder tu peux faire NomDeTonTableau[ID] ...

Sinon je te conseille d'aller voir ici : http://www.cplusplus.com/reference/new/operator%20new[]/

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : tableau de sprite
« Réponse #2 le: Novembre 20, 2015, 02:42:53 pm »
Pourquoi utilisé des pointeurs de sprites ? c'est source de problème. la stl te permet de détruire facilement un élément dans le vector avec un prédicateur , dans ce genre là :

// ta classe
class Projectile{
public:

        ...
       
        Projectile(const sf::Texture & texture){
                m_texture = &texture;
                m_sprite.setTexture(m_texture);
                m_markedForRemove = false;
        }
 
        ...
        ...
 
        bool isRemovable(){
         return m_markedForRemove;
        }
 
private:

        bool                    m_markedForRemove;
        sf::Texture*    m_texture;
        sf::Sprite              m_sprite;


};


bool remove_projectille (Projectile & p) {
        return p.isRemovable();
}

// declaration de ton vecteur
std::vector<Projectile> MonVecteur;


// suppression d'un element marqué pour l'effacement
MonVecteur.erase(std::remove_if(MonVecteur.begin(), MonVecteur.end(), remove_projectille), MonVecteur.end());
       
 


j'ai pas testé le code, mais c'est la voie que j'emprunterais. pas de destruction a géré du coup.

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
Re : tableau de sprite
« Réponse #3 le: Novembre 20, 2015, 04:09:58 pm »
Grosomodo pour le moment j'aurais environ 5 sprites dans mon tableau. Hier soir j'ai test un petit bout de code mais je ne suis pas satisfait du résultat, car je ne peut pas modifier leur position.
Voici le code :

World.h ( la ou s'execute ma boucle principale )
(click to show/hide)


world.cpp
(click to show/hide)

avposte.h
(click to show/hide)

et avposte.cpp
(click to show/hide)

En gros ce que je cherche à faire c'est créer un sprite "d'avant poste" a une certaine position et un autre à une autre après pour ceux ci, je n'ai pas l'utilité de les détruire ( pour le moment ). Leur création ce fait que si on appuis sur une touche. 

Je ne sait pas si ma base est bonne ou si tout est à revoir.


Ps merci petit marc pour ton aide.

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : tableau de sprite
« Réponse #4 le: Novembre 20, 2015, 04:31:13 pm »
une texture par objet, c'est pas une bonne idée , tu vas saturé ta mémoire gpu plus ou moins vite en fonction du contenu. Regarde la surcharge du constructeur que j'ai mis plus haut, je lui passe une texture.
Ton problème de position est simple, relis les tutos sur les drawable perso : http://www.sfml-dev.org/tutorials/2.3/graphics-vertex-array-fr.php , tu n'appliques pas la matrice de transformation a ton sprite, il ne peu donc pas bouger, de plus , ton objet dérive de drawable & transformable, alors que c'est ton sprite qu'il aurais fallu bougé , pas ton objet.

pas bon : MonObjet.setPostion(x,y)
bon     : MonObjet.sprite.setPostion(x,y)

mais bon, c'est dégueu comme "solution" ^^
relis bien le tuto de Laurent.