Yo, j'ai un petit probleme qui m'a meme decourager sur mon code pendant un petit moment mais je m'y suis remis au boulot et je n'ai toujours pas resolu mon probleme, je fais appel a vous pour si vous le voulez m'aider ca serait gentil.
Alors en fait je développe un petit moteur 2d avec l'aide de la sfml et avant j'animé directement dans la classe Player mais depuis j'aimerai la rendre plus accessible a d'autre classe pour plus tard (du genre les enemies ou les png par exemple) ducoup j'ai creer une classe Animation, j'ai adapter mon code a la situation mais un probleme est apparu que je n'avais pas avant, lorsque j'enclenche une animation quand je bouge, le sprite(La texture qui est censé etre afficher) disparait et toutes pas moyens de faire reapparaitre la texture sans redemarrer l'application, pourtant quand je lance mon application de test le premier sprite s'affiche bien, je pense alors que c'est un probleme de decoupage mais je ne vois pas comment c'est possible vu que c'est le meme code que avant, et le sprite que je recois dans la classe animation est bien une reference et donc ce n'est pas une copie voici mon code (je sais tres bien qu'il manque des constructeur c'est en cours de developpement):
//Animation.cpp
#include "Animation.h"
Animation::Animation(unsigned int Largeur, unsigned int Hauteur, float Delay, int nbframes,unsigned int Lignes,unsigned int collones, sf::Sprite& Sprite) : m_Sprite{ Sprite } {
m_elapsed = 0;
m_Largeur = Largeur;
m_Hauteur = Hauteur;
m_delayAnim = Delay;
m_nbFrames = nbframes;
m_SpriteToDraw = 0;
m_Collones = collones;
m_Lignes = Lignes;
m_FirstFrame = 0;
m_FrameLimit = m_FirstFrame + nbframes;
CutSprite();
}
void Animation::Update(sf::Time deltatime) {
m_elapsed += deltatime.asSeconds();
if (m_elapsed >= m_delayAnim) {
++m_SpriteToDraw;
if (m_SpriteToDraw >= m_FrameLimit) {
m_SpriteToDraw = m_FirstFrame;
}
m_Sprite.setTextureRect(m_SpriteAnimation[m_SpriteToDraw]);
ResetTime();
/*sf::Vector2f Position{ m_Sprite.getPosition() };//debug
std::cout << Position.x << " " << Position.y << " " << m_SpriteToDraw<< std::endl;*/
}
}
void Animation::setFrame(int frame) {
m_SpriteToDraw = m_FirstFrame + frame;
}
void Animation::ResetTime() {
m_elapsed = 0;
}
void Animation::setAnim(int Fframe) {
m_FirstFrame = m_nbFrames * Fframe;
m_FrameLimit = m_FirstFrame + m_nbFrames;
}
void Animation::CutSprite(){
m_SpriteAnimation.clear();
for (unsigned int i = 0; i < m_Collones; ++i) {
for (unsigned int j = 0; j < m_Lignes; ++j) {
int x = j * m_Largeur;
int y = i * m_Hauteur;
m_SpriteAnimation.push_back(sf::IntRect(x, y, m_Largeur, m_Hauteur));
}
}
m_Sprite.setTextureRect(m_SpriteAnimation[m_SpriteToDraw]);
}
Animation.h
#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>
class Animation
{
public:
Animation(unsigned int Largeur, unsigned int Hauteur, float Delay, int nbframes,unsigned int Lignes,unsigned int collones, sf::Sprite& Sprite);
void Update(sf::Time deltatime);
void setFrame(int frame);
void ResetTime();
void setAnim(int Fframe);
void CutSprite();
private:
sf::Sprite &m_Sprite;
unsigned int m_Largeur;
unsigned int m_Hauteur;
int m_nbFrames;
int m_Collones;
int m_Lignes;
float m_delayAnim;
float m_elapsed;
int m_FrameLimit;
int m_FirstFrame;
std::vector<sf::IntRect> m_SpriteAnimation;
std::size_t m_SpriteToDraw;
};
j'ai arranger quelques truc et j'ai reussi a faire reaparaitre le premier rect seulement, les autres ne s'affiche pas et sont encore invisible, pourtant les points des rect correspondent je ne comprends pas(C'est comme si seulement une etape de l'animation etait sur limage et les autres disparu)
- Edité par Kiwi_Dch 21 octobre 2019 à 21:17:01
[SFML2.5]Probleme d'animation et de decoupage
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.