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

Auteur Sujet: L'origine d'un sprite  (Lu 3484 fois)

0 Membres et 1 Invité sur ce sujet

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
L'origine d'un sprite
« le: Avril 19, 2013, 04:46:53 pm »
Salut, je suis en train de trouver une manière définitive de placer une explosion sur un sprite. Rien de difficile. Actuellement, je récupère l'origine du sprite pour l'envoyer vers l'explosion via un constructeur.

Cela marche très bien pour des sprites d'une petite taille vu que l'explosion arrive à les recouvrir. Lorsque j'utilise un sprite de grande taille, l'explosion se place au mauvais endroit...

Pour que cela marche comme je le voudrais, j'ai décidé de dessiner les sprites selon leur centre. Cela marche pour le grand sprite mais pas pour les petits sprites. Bref en clair, je trouve pas le bon compromis si ce n'est d'ajuster la position de l'explosion en fonction du sprite en question.

J'ai l'impression de ne pas avoir le choix si ce n'est dessiner des explosions par rapport aux tailles de mes sprites ou simplement changer le scale en fonction de la taille du sprite. J'ai déjà testé cette dernière et cela règle le problème. Oui mais je voulais trouver une méthode qui fonctionne pour tous les sprites histoire de limiter les lignes de codes.

Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : L'origine d'un sprite
« Réponse #1 le: Avril 19, 2013, 05:40:09 pm »
Tu veux placer ton explosion comment par rapport au sprite ? Ca veut dire quoi "au mauvais endroit" ? C'est quoi le bon endroit ? Qu'est-ce que tu veux faire, et qui ne marche pas avec les grands sprites ?
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : L'origine d'un sprite
« Réponse #2 le: Avril 19, 2013, 06:29:41 pm »
Je voudrais placer l'explosion par dessus le sprite et si possible au centre de ce sprite.

Jusqu'à présent, j'avais juste besoin de dessiner mon sprite avec comme origine Vector2f(0,0);. Lorsque je crée une explosion via le constructeur, je lui transmet le centre du sprite. Enfin, je pense que le mieux c'est que je te montre le code :

// Ma classe Enemy

Vector2f Enemy::setOrigin() {
    return Vector2f((sprite.getGlobalBounds().width / frameCount) / 2, sprite.getGlobalBounds().height / 2);
}

Vector2f Enemy::getOrigin() {
    return sprite.getOrigin();
}

Enemy::Enemy() {
    origin = setOrigin();
    sprite.setOrigin(origin);
}

// Ma classe Explosion

Explosion::Explosion(Vector2f position, Vector2f origin, float rotation, Vector2f scale) {
    sprite.setTexture(FileManager::Instance()->items[4]);
    sprite.setOrigin(origin);
    this->origin = origin;
    sprite.setPosition(position);
    sprite.setRotation(rotation);
    sprite.setScale(scale);
    this->scale = scale;
    this->position = position;
    this->rotation = rotation;
    active = true;
    initialize();
}

// Création d'une explosion
explosions.emplace_back(Vector2f(wave.enemies[i].getPosition(), wave.enemies[i].getOrigin(), wave.enemies[i].sprite.getRotation(), Vector2f(1.2,1.2));

 

Ce code fonctionne très bien pour un sprite de grande taille, l'explosion apparaît bien au centre du sprite. Mais étrangement, pour les sprites de petites taille il se dessine légèrement plus en bas et légèrement plus vers la droite. Logique vu que je lui demande de dessiner l'explosion par rapport au centre...

Le plus simple que je vois, c'est dessiner au centre l'explosion d'un sprite de grande taille et des petits sprite par rapport à Vector2f(0,0); ?
« Modifié: Avril 19, 2013, 06:56:48 pm par shingo »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : L'origine d'un sprite
« Réponse #3 le: Avril 19, 2013, 06:44:42 pm »
A quel endroit exactement est-ce que tu prends le centre du sprite ? Ca n'apparaît pas dans ton code.

Citer
Mais étrangement, pour les sprites de petites taille il se dessine légèrement plus en bas et légèrement plus vers la droite. Logique vu que je lui demande de dessiner l'explosion par rapport au centre...
C'est ironique ou bien ça te paraît vraiment logique ? ;D
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : L'origine d'un sprite
« Réponse #4 le: Avril 19, 2013, 06:53:27 pm »
Je me suis trompé en copiant le code, j'ai édité. Je prend l'origine via setOrigin().

Disons que c'est ironique :)

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : L'origine d'un sprite
« Réponse #5 le: Avril 19, 2013, 07:42:38 pm »
Voici le code que j'ai mis en place pour que cela fonctionne dans les deux cas :

 if (wave.enemies[i].enemyType < 14)
            explosions.emplace_back(Vector2f(wave.enemies[i].getPosition().x - (wave.enemies[i].getSize().x / 2), wave.enemies[i].getPosition().y), wave.enemies[i].getOrigin(), wave.enemies[i].sprite.getRotation(), Vector2f(1.2,1.2));
            else explosions.emplace_back(Vector2f(wave.enemies[i].getPosition().x, wave.enemies[i].getPosition().y), wave.enemies[i].getOrigin(), wave.enemies[i].sprite.getRotation(), Vector2f(2.5,2.5));

Pour le moment ça fonctionne, est-ce que le code te semble bon ?

Koryushin

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : L'origine d'un sprite
« Réponse #6 le: Avril 22, 2013, 01:22:43 pm »
Je suis pas sur de comprendre l'intégralité du problème, mais ne serait il pas plus simple de placer le centre de l'explosion sur le centre des tes sprites ?

En gros :
- calculer le centre de l'explosion, une fois pour toute.
- calculer le centre des tes sprites, une fois pour toute.
- positionner le centre de l'explosion sur le centre des sprites.