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

Auteur Sujet: Affichage d'une partie d'un sprite  (Lu 4709 fois)

0 Membres et 1 Invité sur ce sujet

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Affichage d'une partie d'un sprite
« le: Juin 27, 2012, 06:19:40 pm »
Bonjour :)

Alors voici ma fonction:
void MapScroller::setViewport(const sf::IntRect& camera)
{
    mapsprite.setTextureRect(sf::IntRect(0, maptexture.getSize().y-winsz.y, winsz.x, winsz.y));
}
 

Le probleme: He bien, le rectangle d'affiche est toujours en haut a gauche ... !
Alors que normalement , je devrais avoir: sf::IntRect(0, 600, 800, 600);

Comment faire pour afficher simplement une partie ?

merci d'avance, nico

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #1 le: Juin 27, 2012, 09:04:06 pm »
void MapScroller::setViewport(const sf::IntRect& camera)
{
    mapsprite.setTextureRect(sf::IntRect(0, maptexture.getSize().y-winsz.y, winsz.x, winsz.y));
    masprite.setPosition(0,maptexture.getSize().y-winsz.y);
}
 

Citer
Le probleme: He bien, le rectangle d'affiche est toujours en haut a gauche ... !

Il faut utiliser sf::Sprite.setPosition pour déplacer un sprite.

Citer
Alors que normalement , je devrais avoir: sf::IntRect(0, 600, 800, 600
Ici tu sélectionne la partie de la texture que tu veux afficher. Donc la partie 0,600 de la texture et placé à la position du sprite 0,0 et se retrouve en haut à gauche.

Il ne faut pas penser que le sprite colle la texture en 0,0 puis dessine la partie du subRect.

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #2 le: Juin 28, 2012, 04:20:00 pm »
Bonjour.. malheureusement, ton code ne change rien... enfin je crois
j'essaye:

void MapScroller::setViewport(const sf::IntRect& camera)
{
    std::cout << "viewport"<<std::endl;
    mapsprite.setTextureRect(sf::IntRect(0, maptexture.getSize().y-winsz.y, winsz.x, winsz.y));
    mapsprite.setPosition(0, maptexture.getSize().y-winsz.y);
}

Je suis toujours en haut a gauche...

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #3 le: Juin 28, 2012, 05:04:59 pm »
Que retourne maptexture.getSize().y-winsz.y ? Moi je dirai 0, pas toi ? :p Sait tu au moins à quoi sa sert les setTextureRect ? Sa te permet de sélectionner une partie d'une texture.

Par exemple, si tu fais sprite.setTexture(sf::FloatRect(10, 10, 100, 100));Tu aura un carré.

Disons que le rectangle jaune c'est ta texture. Ben ton sprite sera le carré blanc avec le code si dessus : ta TextureRect commence bien à (10; 10) et fait bien une taille de 100 en x et 100 en y (j'ai pas pris ma règle tu t'en doute bien :p ).

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #4 le: Juin 28, 2012, 05:42:11 pm »
Non je comprend tres bien a quoi ca sert ! C'est justement ce que jessaye de faire !
Mais, maptexture.getSize().y-winsz.y retourne 600. (*c'est simple, ma texture fait 3000*1200).
Donc mon carré: debut: 0, 600. taille: 800,600 (ma fenetre.. !)

Pourtant je suis toujours en haut a droite de mon image :(

J'aimerais afficher le carré en bas a gauche.
Au final c'est une image 2D et je vais bouger le rectangle de gauche a droite.
« Modifié: Juin 28, 2012, 05:50:49 pm par nicooomg »

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #5 le: Juin 28, 2012, 06:09:06 pm »
Si t'a fenêtre fait 800,600, et que le carré est à 0, 600, il ne devrait même pas s'afficher sur la fenêtre normalement....

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #6 le: Juin 28, 2012, 06:11:24 pm »
La sfml est simple, mais alors cette fonctionnalité est plus simple sur la SDL.
J'ai une fenetre de taille 800*600.
Une texture de taille 3000*1200.

Je veux afficher la partie de la texture de
x:0
y:600 (donc, texture.y - window.y)
largeur: 800
hauteur: 600.

Comment faire?

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #7 le: Juin 28, 2012, 06:50:21 pm »
Impossible puisque t'a fenêtre fait 800,600 . Tu peux par contre (si j'ai bien compris ton problème parce qu'il est loin d'être évident) afficher ton sprite à 0(texture.x-window.y-sprite.y). Il sera donc placé pile poile en bas à droite.

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #8 le: Juin 29, 2012, 12:37:06 am »
Attend ya un probleme la ! C'est forcement possible.
Je m'explique avec la SDL.

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

grace a srcrect, on peut clipper une surface de telle sorte a selectionner uniquement une partie de la surface !
donc utiliser une feuille de sprite !

Ca je vais en avoir besoin.

Le deuxieme besoin, qui peut etre emuler aussi comme si cetait une feuille de sprite, cest que jai une image qui sert de fond decran, qui est donc gigantesque par rapport a la taille de la fenetre et je dois la deplacer (ou deplacer le viewport(??)) sur limage, pour effectuer un scroller dans toutes les directions, a ma guise, comme si cetait le fond decran du jeu mario !

Je suis peu etre plus clair sur ce que jrecherche maintenant :)

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #9 le: Juin 29, 2012, 12:39:36 am »
enfaîte t'a pas compris que ton image est EN DESSOUS de ta fenêtre. Imagine qu'il y a une suite dans ta fenêtre, ben ton image est juste en dessous ;) (comme t'a fenêtre fait 600 en hauteur, si tu met ton image à (0, 600), l'image sera pile en dessous ;) ).

Reycan

  • Newbie
  • *
  • Messages: 49
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #10 le: Juillet 04, 2012, 07:04:00 pm »
Bonjour,
J'en profite pour vite poser une petite question. Est-ce qu'il y a un moyen simple
de n'afficher qu'une partie de la texture qui serait une forme convexe/concave au lieu d'un rectangle ?

jDralliam

  • Jr. Member
  • **
  • Messages: 50
    • Voir le profil
Re : Affichage d'une partie d'un sprite
« Réponse #11 le: Juillet 05, 2012, 06:22:33 pm »
Convexe, c'est possible simplement avec une ConvexShape (qui a une méthode setTexture). Pour une forme concave, il faut passer par un VertexArray (et utiliser le champs texCoords des Vertex pour "lier" un sommet à un point de la texture); éventuellement, tu peux écrire ta propre classs pour gérer certaines formes concaves que tu désires (Laurent avait au début implémenté une classe StarShape, qu'il doit être possible de retrouver en cherchant dans l'historique de GitHub).

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Affichage d'une partie d'un sprite
« Réponse #12 le: Juillet 05, 2012, 06:53:17 pm »
Citer
Laurent avait au début implémenté une classe StarShape
En fait, ce n'était qu'un cas très particulier qui fonctionnait par les hasards de l'implémentation. En gros, ce qui marche avec SFML ce sont les formes convexes et les étoiles. Du coup ça ne montre absolument pas comment gérer n'importe quelle forme concave.
Laurent Gomila - SFML developer

 

anything