Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - AlexisAG

Pages: [1]
1
Général / Re : Questionnement son + graphique
« le: Février 14, 2017, 07:41:18 pm »
Bonsoir,
J'apportes quelques précisions.

En fait la fonction shoott tourne dans un thread alors que la fonction draw tourne dans la boucle du jeu.

JJ'ai fais le test de créer un Trap et de faire tourner la fonction shoot et draww dans la boucle du jeu, et là.. j'ai bbien le son qui se lance, mais toujours pas d'affichage des bullets !

Le thread si jamais :
void thread_trap(sf::RenderWindow *window, TileMap *map, Player *player, int level[], std::array<Trap,NB_TRAP> &v_trap)
{
    sf::Clock clock;
    sf::View view;
    while(player->isAlive() && window->isOpen())
    {
        sf::Time deltaTime = clock.restart();
        //get view
        view = window->getView();
        //launch all
        for(unsigned int i=0; i<NB_TRAP; i++)
            v_trap[i].launch(window,map,player,level,view,deltaTime,player->getBulletVector());
    }
}
 

EDIT : Voici le lien vers mon drive ou se situe les fichiers du projet. https://drive.google.com/drive/folders/0B38UTGF6GjZffjk3RVV2bmhseVk5eXFtY1RfX3FhX3g4TG0wZWhXRnRRaU5mZ3FycWgwSUk?usp=sharing

2
Général / Re : Questionnement son + graphique
« le: Février 13, 2017, 09:42:42 am »
Voici mes constructeurs pour Bullet
/** CONSTRUCTOR && DESTRUCTOR **/
Bullet::Bullet()
{
    p_isVisible=true;
    p_circle.setRadius(RADIUS_BULLET);
    p_circle.setFillColor(sf::Color::Red);
}
Bullet::Bullet(sf::CircleShape circle)
{
    p_isVisible=true;
    p_circle.setRadius(circle.getRadius());
    p_circle.setFillColor(sf::Color::Red);

}
Bullet::Bullet(sf::Color color)
{
    p_isVisible=true;
    p_circle.setRadius(RADIUS_BULLET);
    p_circle.setFillColor(color);

}
Bullet::Bullet(sf::CircleShape circle, sf::Color color)
{
    p_isVisible=true;
    p_circle.setRadius(circle.getRadius());
    p_circle.setFillColor(color);
}
// destructor
Bullet::~Bullet()
{
   
}
 

Et voici la fonction addBullet() elle n'a rien de spécial :
void Trap::addBullet(Bullet &bullet)
{
    p_bullet.push_back(bullet);
}
 

p_bullet étant un vector<Bullet> en attribut.
Le son est géré du tir est toutefois sensé être géré par la classe Trap, le buffer est initialiser dans le constructeur de celui-ci puis le j'attribut le buffer au sound toujours dans le constructeur. Le buffer et le sound sont en attribut, mais toujours pas de son..

3
Général / Re : Re : Questionnement son + graphique
« le: Février 12, 2017, 11:19:46 pm »
Citer
Oui mais comme je l'ai dit, à la base j'avais créer un attribut buffer et un attribut sound, et que j'initialisais le tout dans le constructeur, et ça ne marchais pas.
Ca aurait déjà plus de chances de marcher que ce code-là ;)

Citer
J'ai mal copié désolé, bien évidemment je met ma bullet en paramètre ^^
Comment peux-tu te tromper en faisant un copier-coller ? ???

Je n'ai pas vraiment copié collé, le code ne possède pas cette faute là c'est tout ^^
Et pour le son, j'ai remis le système de buffer et sound en attribut que j'initialise dans le constructeur, mais toujours rien. Pourtant cela devrait fonctionner étant donné que le buffer n'est pas détruit..

4
Général / Re : Re : Questionnement son + graphique
« le: Février 12, 2017, 08:17:22 pm »
Les sons (et les musiques) sont jouées dans un thread à part. Cela signifie que vous pouvez faire tout ce que vous voulez après avoir appelé play() (sauf détruire le son ou son buffer, bien entendu), le son va continuer de jouer jusqu'à ce qu'il se termine ou soit stoppé explicitement.
Comme toutes les variables locales, ton sf::Sound et sf::SoundBuffer sont détruits à la fin du bloc où ils sont déclarés, c'est à dire à la fin du if. Donc à peine t'as appelé play que ton son est détruit et n'est donc jamais joué.
Il faut que tu les crées ailleurs, de sorte à ce qu'ils ne soient pas détruits prématurément.

Oui mais comme je l'ai dit, à la base j'avais créer un attribut buffer et un attribut sound, et que j'initialisais le tout dans le constructeur, et ça ne marchais pas.

Et je ne vois pas comment ta fonction addBullet sans paramètre peut ajouter où que ce soit le Bullet que tu viens de créer.

J'ai mal copié désolé, bien évidemment je met ma bullet en paramètre ^^ 

5
Général / Re : Probleme collision TileMap
« le: Février 12, 2017, 07:30:44 pm »
Comment veux tu gérer tes collisions en fait ?

Moi j'ai une méthode qui renvoie l'index de mon tile. ensuite avec cette indexx bah je met collision a true ou false.

Voilà ma méthode :
int TileMap::getTextureIndex(sf::Vector2f pos_Player, int level[], int dir)
{
    // dir 0 = gauche | dir 1 = right | dir 2 = up | dir 3 = down
    int x = pos_Player.x;
    int y = pos_Player.y;
    int index=-1;
    switch(dir)
    {
    case 0:
        index = ((x-(x%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width));
        break;
    case 1:
        index = ((x-(x%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width)) +1;
        break;
    case 2:
        index = (((x+16)-((x+16)%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width));
        break;
    case 3:
        index = (((x+16)-((x+16)%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width)) + p_width;
        break;
    }
    printf("Index texture %i \n",index);

    return level[index];
}
 

Je ne sais pas si c'est ce que tu veux faire mais bon voilà si ça peut t'aider à comprendre.

6
Général / Re : Questionnement son + graphique
« le: Février 12, 2017, 07:24:02 pm »
Voici la méthode permettant de créer une bullet et de la positionner sur la tourelle. Un son est sensé être joué ( mais ne fonctionne pas )
la constante PATH_SOUND est déjà utilisé ailleurs est fonctionne.
void Trap::shoot(TileMap *map, Player *player)
{
    sf::Time wait = sf::microseconds(250000);
    if(p_dir==0 && p_pos.x-player->getPos().x<=150)
    {
        printf("FONCTION SHOOT TRAP \n");
        sf::sleep(wait);
        sf::SoundBuffer buffer;
        buffer.loadFromFile(PATH_SOUND);
        sf::Sound sound;
        sound.setBuffer(buffer);
        sound.setAttenuation(80.f);
        Bullet bullet(sf::Color::Blue);
        bullet.shoot(p_pos,p_dir); //positionne la bullet
        addBullet(); // ajoute la bullet au vector<Bullet> de Trap avec passage par référence
        sound.play(); // ne fonctionne pas

    }
    for(unsigned int i=0; i<p_bullet.size();i++)
    {
        if(p_bullet[i].getIndex(map)==player->getIndex(map))
            player->setAlive(false);
    }
}
 

La fonction se déclenche bien puisque dans la console j'ai bien le message de mon printf. Et les bullet se créer puisque si je saute sur la tourelle je meurt.

Concernant l'affichage des bullet de mon Trap voici la fonction draw :
void Trap::draw(sf::RenderWindow &window, TileMap &map, int level[], sf::View &view, sf::Time deltaTime)
{
    if(isDrawable())
    {
        if(p_type==1)
        {
            for(unsigned int i=0; i<p_bullet.size();i++)
            {
                if(!p_bullet[i].draw(&window,&map,level,view,deltaTime))
                    delBullet(i);
            }
        }
        p_sprite.setPosition(p_pos);
        window.draw(p_sprite);
    }
}
 

Et la fonction draw de Bullet :
bool Bullet::draw(sf::RenderWindow *window, TileMap *map, int level[], sf::View &view, sf::Time deltaTime)
{
    setIndex(map);
    isVisible(view,p_dir,map,level); // check if the bullet is visible
    printf("FONCTION DRAW BULLET \n");
    if(p_isVisible)
    {
        switch(p_dir)
        {
        case 0:
            p_circle.move(-SPEED_BULLET*deltaTime.asSeconds(),0);
            break;
        case 1:
            p_circle.move(SPEED_BULLET*deltaTime.asSeconds(),0);
            break;
        case 2:
            p_circle.move(0,-SPEED_BULLET*deltaTime.asSeconds());
            break;
        case 3:
            p_circle.move(0,SPEED_BULLET*deltaTime.asSeconds());
            break;
        }
        p_pos = p_circle.getPosition();
        window->draw(p_circle);
        return true;
    }
    printf("non Visible \n");
    return false;
}
 

La fonction draw de Bullet ne se déclenche même pas ( pas le message dans la console )
Normalement cette dernière fonctionne parfaitement car déjà utilisé pour mon joueur et aucun soucis.

7
Général / Questionnement son + graphique
« le: Février 12, 2017, 01:51:11 pm »
Bonjour tout le monde.

Alors voilà je rencontre plusieurs soucis avec la sfml 2.4.1.

Lorsque je créer une classe et que dan celle-ci je créer un élément audio ou graphique, il ne se joue pas/ne se dessine pas, lorsque je j'instancie un objet de cette classe et que j'appel la méthode.

Petit exemple :
 
        sf::SoundBuffer buffer;
        buffer.loadFromFile(PATH_SOUND);
        sf::Sound sound;
        sound.setBuffer(buffer);
        sound.setAttenuation(80.f);
        addBullet();
        sound.play();
 

Voilà se morceau de code appartient à une de mes classes, le son devrait être joué, mais non... ( à la base j'avais créer un buffer et un sound en attribut et je les affectais dans le constructeur, mais ça ne fonctionnais pas non plus... )

et c'est la même chose pour les éléments graphique !
Ma classe possède un vector d'objet d'une autre classe qui elle est en fait un Cercle ( d'SFML ). et bien lorsque je dessine les objets du vector, rien n'apparait ! pourtant les objets sont bien dessiner ( en fait c'est une classe bullet si le cercle me touche je meurt, voilà comment je sais qu'il fonctionne!).

Si quelqu'un sait d'ou provient le problème je suis preneur, merci.

Pages: [1]
anything