Afficher plusieurs fois le même sprite avec une condition [SFML]

Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - Modifié le 20 déc. 2017 à 20:57
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 - 11 août 2019 à 21:41
Bonjour,

Comme indiqué dans le titre, je voudrai afficher plusieurs fois le même sprite avec une condition


Pseudo code:



inclure le fichier "data1"



création de la texture "t_hero";
création du sprite "s_hero";

charger la texture "t_hero" depuis le fichier mémoire "g_data1" ;


appliquer la texture "t_hero" à "s_hero";

si le bouton du milieu de la sourie est pressé, alors :

créer une variable sf::Vector2u qu'on appel "positionSourie";
"positionSourie.x" = position de la sourie en abscisse;
"positionSourie.y" = position de la sourie en ordonnée;
afficher un nouveau "s_hero" et le positionner là où se trouve la sourie; //la où je bloque





soit


#include "data1"


sf::Texture t_hero;
sf::Sprite s_hero;

t_hero.loadFromMemory(g_data1, sizeof(g_data1));


s_hero.setTexture(t_hero);


if(sf::Mouse::isBottonPressed(sf::Mouse::middle)
{
           sf::Vector2u positionSourie;
           positionSourie.x = sf::Mouse::getPosition().x;
           positionSourie.y = sf::Mouse::getPosition().y;
           //le fameux code qui génère une x ième fois le même sprite               //je bloque içi
          /*le x ième*/ s_hero.setPosition(positionSourie.x, positionSourie.y);    //et là
}




Or, je ne vois pas comment afficher plusieurs fois le même sprite. J'ai entendu parler des vertexArray dans SFML mais apparemment il vaut mieux avoir TOUTES les textures dans une même image, et perso je n'aime pas utilisé ce genre de truc. Il y a t'il un autre moyen (si oui, comment ?) ou je dois faire avec vertexArray ?

Merci de vos réponses.


(Dîtes-moi si il est nécessaire de faire un pseudo-code, pour savoir)

4 réponses

Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
6 août 2018 à 17:54
Bonjour
Quand on exhume un question vielle de presque un an, on essaye
1
Bonjour, même si cela date un peu, ça peut aider les prochains.
Il me semble que l'on peut afficher autant de fois un sprite qu'on le veut.
imaginons :
sprite.setPosition(sf::Vector2f{0, 0});
sprite.draw(window);
sprite.setPosition(sf::Vector2f{250, 250});
sprite.draw(window);
/* Va afficher le sprite deux fois a deux position différentes, je n'ai pas d'IDE de dispo donc je ne sais pas si les fonctions setPosition et draw sont bien orthographiées *\


EDIT : Ajout des balises de code
0
amzounslideslide Messages postés 5 Date d'inscription samedi 10 août 2019 Statut Membre Dernière intervention 13 août 2019
10 août 2019 à 18:36
Salut

Utiliser une série de sprite n'est pas du tout performant pour le dessin d'une map, ça a pour conséquence de multiplier les appels a draw, qui est assez lourd.

Regarde du coté du vertexarray, ca permet de rentrer toutes les données de ta map dans un tableau, et de tous dessiner d'un seul coup.
ps: un vertexarray nécessite d'avoir toutes les tiles a dessiner sur la même texture.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
11 août 2019 à 21:41
Bonsoir, la question date de près de 2 ans, et le demandeur n’a pas donné suite il y a un an.
C’est p’tet pas la peine d’user la planète
0
Rejoignez-nous