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 - OualidH38

Pages: [1] 2 Suivante »
1
Général / Re : TmxLoader SFML
« le: Février 23, 2016, 05:55:04 pm »
C'est bon problème résolu, il suffisait de mettre le chemin qui menait à "tmx/..." da,s le répertoire d'include puis d'ajouter les fichiers cpp au projet ainsi que les fichiers zlib.h et zconf.h.


Résolu!

2
Général / [Résolu] TmxLoader SFML
« le: Février 23, 2016, 05:21:43 pm »
Salut à tous!

J'ai découvert il y a peu le logiciel Tiled, qui facilite la création de tilemap.
Du coup j'ai cherché un parser et je suis tombé sur celui ci:
https://github.com/fallahn/sfml-tmxloader

Le soucis est que je ne parviens pas à l'utilisé correctement. Sur le wiki (https://github.com/fallahn/sfml-tmxloader/wiki/Building) je parviens à linker zlib à mon projet, c'est la suite qui me pose problème:

Citer
Although the map loader comes with a CMake file currently the source of the map loader does not include the export macros required by Visual Studio to see functions exported in dynamic libraries. This means that, although you could use the CMake file to build a static library, sometimes it's easier to just include the source files in your project. This means you should also include the pugixml files, although tmx2box2d.cpp should only be added if your project links to the Box2D library. Including this file without Box2D will otherwise lead to linker errors.

Que faut il faire exactement? Incorporer au projet les fichiers .h et .cpp? Ou alors renseigner dans les propriétés le répertoire include où se trouvent les fichiers?

J'ai juste besoin d'un petit éclaircissement, n'ayant pas trouvé d'autres tuto que celui du wiki.


Merci d'avance!  ;D

3
Graphique / Re : Colision TileMap : personnage coincé
« le: Juin 30, 2014, 03:46:19 pm »
Le problème peut venir de ta tilemap, essai en remplaçant ça :
if (!map.load("tileset.png", sf::Vector2u(40, 40), level, 16, 8))
        return -1;
 
par ça :
if (!map.load("tileset.png", sf::Vector2u(40, 40), level, 8, 16))
        return -1;
 

Je dis surement n'importe quoi mais sait on jamais  ;D

4
Graphique / Re : Colision TileMap : personnage coincé
« le: Juin 30, 2014, 01:08:42 pm »
Tu peux très bien te passer d'un masque, c'est ce que je fais et ça marche très bien.
Tu peux faire comme ça par exemple :
//Imaginons que le personnage entre en collision avec les tiles 5 et 9:

bool collision(int level[], int x, int y, int tailleCase)
{
      if( level[ int(x/tailleCase) + 16*int(y/tailleCase) ] == 5 || level[ int(x/tailleCase) + 16*int(y/tailleCase) ] == 9)
             return true;
      else
      return false;
}
 

J'espère que ça t'aidera  :)

5
Graphique / Re : Colision TileMap : personnage coincé
« le: Juin 28, 2014, 06:29:02 pm »
Ah excuse moi j'avais mal compris  ;D

Par contre je ne vois pas pourquoi les zones de collision ne correspondent pas au masque, as tu pensé à gérer les collisions directement avec ton tableau "level" sans passer par un masque?

6
Graphique / Re : Colision TileMap : personnage coincé
« le: Juin 28, 2014, 11:28:55 am »
Regarde ce tuto il est en C mais la logique est la même : http://fr.openclassrooms.com/informatique/cours/tile-mapping/simple-personnage

J'espère que ça t'aidera à comprendre pourquoi ton personnage passe parfois à travers les tiles de ta map  ;)

7
Graphique / Re : Colision TileMap : personnage coincé
« le: Juin 25, 2014, 01:58:25 pm »
Je te conseil d'aller voir du côté de ce tutoriel : http://fr.openclassrooms.com/informatique/cours/theorie-des-collisions/formes-simples

En gros ce qu'il faut que tu comprenne c'est que tu dois faire en sorte de calculer la position future de ton personnage que l'on va appeler position2, tu fais ton test de collision sur position2, s'il n'y a pas collision alors tu fais un perso.setPosition(position2), s'il y a collision tu n'applique pas la nouvelle position.

Pour obtenir position2 il suffit d'ajouter à la position de ton personnage la vitesse :

sf::Vector2f position2;

position2.x = perso.getPosition().x + vitesseX;
position2.y = perso.getPosition().y + vitesseY;

//Une fois que tu as calculé position2 tu test si en position2 il y a collision

if(PAS COLLISION)
{
         perso.setPosition(position2);
}
else
        std::cout<<"Collision !"<<std::endl;
 

vitesseX et vitesseY sont seulement des variables dont la valeur dépend des touches sur lesquels tu appuies.


Voilà j'espère t'avoir aidé  ;)

8
Graphique / Re : Colision TileMap : personnage coincé
« le: Juin 24, 2014, 02:17:08 pm »
Ton problème vient de ton raisonnement au niveau de la gestion de collision,  dans ta boucle if tu test si oui ou non il y a collision. 
Ta fonction gestionClavier ( ) est la fonction permettant à ton personnage de se déplacer, si tu regarde bien dans ta boucle tu appelle cette fonction uniquement lorsqu'il n'y a pas collision, normal que ton personnage s'arrête de bouger dès qu'il entre en collision puisque tu n'appelle pas la fonction gestionClavier ( ).

Tu devrais plutôt faire en sorte que ton personnage puisse bouger vers une direction où il peut aller, car s'il est bloqué à droite il peut aller à gauche,  donc revois ton test de collision ;)

9
Graphique / Re : Collision Tilemap
« le: Mai 29, 2014, 11:37:53 am »
Non le problème venait de tes conditions if, tu avais une première condition qui disait :
- Si il n'y a pas de collision entre test et rect2 -> alors on fait bouger le sprite.
- Sinon -> écrit "collision" en console.

Et la deuxième condition qui disait :
- Si il n'y a pas de collision entre test et rect -> alors on fait bouger le perso.
- Sinon -> écrit "collision" en console.

Le problème il est là, imagine que "test" soit en collision avec "rect2" mais pas avec "rect", que va t-il se passer?

La première condition va dire :
"test est en collision avec "rect2", donc on affiche "collision" en console sans faire bouger le sprite.
La seconde condition va dire :
"test" n'est pas en collision avec "rect", donc on fait bouger le sprite.

Donc même s'il y avait collision entre test et l'un des rect le sprite bouger toujours.

Le code qui fonctionne dit seulement:
- S'il y a collision entre "test" et "rect2" ou entre "test" et "rect" -> alors affiche "collision" en console.
- Sinon -> faire bouger le sprite.

Donc s'il y a collision avec "rect2" ou bien "rect" le sprite ne bougera pas.

Hésite pas à poser des questions si tu n'as pas compris  ;)

10
Graphique / Re : Collision Tilemap
« le: Mai 28, 2014, 07:02:29 pm »
Essai ça:

if(test.intersects(rect2.getGlobalBounds()) || test.intersects(rect.getGlobalBounds()))
            {
            std::cout << "collision" << std::endl;
            }
 else
            {
             sprite_perso.move(mouvement);
            }

11
Graphique / Re : Collision Tilemap
« le: Mai 25, 2014, 11:37:02 am »
Essai ça:
if(!test.intersects(rect.getGlobalBounds()) || !test.intersects(rect2.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }


        if(!collision)
        {
            sprite_perso.move(mouvement);
        }
 

12
Graphique / Re : Collision Tilemap
« le: Mai 24, 2014, 11:17:53 am »
C'est pas un bug, tu t'es trompé sur ton booléen "collision", tu le met à true quand il n'y a pas collision et à false quand il y a collision, alors que c'est l'inverse puisque ta dernière condition vérifie s'il y a une collision pour faire bouger ton sprite.
Ca devrait plus ressembler à ça :
 if(!test.intersects(rect.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }

        if(!test.intersects(rect2.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }

        if(!collision)
        {
            sprite_perso.move(mouvement);
        }
 

13
Graphique / Re : Effacer un objet quand celui ci sort de l'écran
« le: Mai 04, 2014, 08:11:25 pm »
Merci pour ton aide c'est bon ça fonctionne, j'étais pas au courant pour le viewport encore merci!  ;D

Sujet Résolu  ;)

14
Bonjour à tous,
Je suis en train de coder un petit rpg dans lequel le personnage est capable de lancer des sorts et j'ai quelques questions:
Je stock chaque sorts(projectiles) créé dans un std::vector<Projectile> AllProjectile, et j'aimerais effacer du tableau chaque projectile se retrouvant hors écran mais voilà j'ai du mal.

J'ai essayé de récupérer le sf::IntRect de ma vue et de le comparer avec la position des projectiles:
for(int i =0; i < AllProjectile.size(); i++)
{
if(le projectile se trouve dans le IntRect)
{
   NE RIEN FAIRE
}
else
{
   AllProjectile.erase(AllProjectile.begin() + i);//On efface le projectile qui se trouve en dehors de la vue
}

//La manière dont je récupère le sf::IntRect
window.getViewport(window.getView);

//j'ai aussi essayé avec ça mais cela ne fonctionne pas non plus
window.getViewport(window.getDefaultView);
 

Mais bon cela fonctionne mal, les projectiles sont bien détruits une fois sorti de l'écran mais la zone semble fixe, si je déplace mon personnage et que la vue se déplace(scrolling) les projectiles seront toujours détruits au niveau de la vue de départ.

J'ai besoin d'aide s'il vous plait.
Merci

15
Graphique / Re : Problème de collisions avec des tiles
« le: Février 16, 2014, 08:41:44 pm »
Salut, j'ai eu le même problème que toi je l'ai en parti résolu je te redirige ici:
http://fr.openclassrooms.com/forum/sujet/sfml-reaction-suite-a-une-detection-collision

J'espère que cela va pouvoir t'aider!

Pages: [1] 2 Suivante »