Bonjour tout le monde,
Je rencontre un problème avec ConvexShape, mais je suis quasiment certain que c'est de ma faute..
J'essaye de faire un rectangle arrondi mais le résulat ne suit pas :-[ j'ai qulques points qui se trouvent a des endroits improbables( voir la piece jointe ) j'ai entouré, pour un coin, deux points qui ne sont meme pas listé dans ma shape et tracé en vert la forme qu'elle devrait normalement avoir.
Evidemment vous ne pourrez pas m’aider sans code:
C'est long, mais la moitié c'est du "debug" ;)
RoundRect::RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius, const int unsigned& pointCount)
{
unsigned int i;
m_shape.setPointCount(pointCount*4); // m_shape est un sf::conexshape
for(i=0;i<pointCount;++i) //ANGLE 1
{
m_shape.setPoint(i, sf::Vector2f(position.x - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y - borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
}
for(i=pointCount; i<pointCount*2; i++)
{
m_shape.setPoint(i, sf::Vector2f(position.x + dimensions.x + borderRadius - borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
}
for(i=pointCount*2; i<pointCount*3; i++)
{
m_shape.setPoint(i, sf::Vector2f(position.x + dimensions.x - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y + dimensions.y - borderRadius + borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
}
for(i=pointCount*3; i<pointCount*4; i++)
{
m_shape.setPoint(i, sf::Vector2f(position.x + borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)), position.y + dimensions.y - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
}
update();
}
Est-ce que quelqu'un sait d'où ca vient :o
Merci
Trop tard j'ai trouvé ;D si quelqu'un est interressé par une classe RoundRect, ajoutez vous meme les couleurs!
RoundRect::RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius, const int unsigned& pointCount)
{
unsigned int i;
m_shape.setPointCount(pointCount*4);
for(i=0;i<pointCount;++i) //ANGLE 1
{
m_shape.setPoint(i, sf::Vector2f(position.x +borderRadius - borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y +borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
//std::cout << "PosX of point " << i << ": " << m_shape.getPoint(i).x << std::endl;
//std::cout << "PosY of point " << i << ": " << m_shape.getPoint(i).y << std::endl;
}
for(i=0;i<pointCount;++i)
{
m_shape.setPoint(i+pointCount, sf::Vector2f(position.x -borderRadius+ dimensions.x + borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y +borderRadius- borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
//std::cout << "PosX of point " << i+pointCount << ": " << m_shape.getPoint(i+pointCount).x << std::endl;
//std::cout << "PosY of point " << i+pointCount << ": " << m_shape.getPoint(i+pointCount).y << std::endl;
}
for(i=0;i<pointCount;++i)
{//was with sin sin
m_shape.setPoint(i+pointCount*2, sf::Vector2f(position.x + dimensions.x -borderRadius+ borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y + dimensions.y - borderRadius + borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));//Both cos used to be sin
//std::cout << "PosX of point " << i+pointCount*2 << ": " << m_shape.getPoint(i+pointCount*2).x << std::endl;
//std::cout << "PosY of point " << i+pointCount*2 << ": " << m_shape.getPoint(i+pointCount*2).y << std::endl;
}
for(i=0;i<pointCount;++i)
{
m_shape.setPoint(i+pointCount*3, sf::Vector2f(position.x + borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)), position.y -borderRadius+ dimensions.y + borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
//std::cout << "PosX of point " << i+pointCount*3 << ": " << m_shape.getPoint(i+pointCount*3).x << std::endl;
//std::cout << "PosY of point " << i+pointCount*3 << ": " << m_shape.getPoint(i+pointCount*3).y << std::endl;
}
update();
}