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

Pages: [1]
1
Système / Re : Fonctionnement isKeyPressed et touches multiples
« le: Décembre 14, 2013, 11:37:16 am »
En effet je suis bête, bien joué pour avoir trouvé ça sans cette partie de mon code ;)

2
Système / [Résolu]Fonctionnement isKeyPressed et touches multiples
« le: Décembre 13, 2013, 02:43:13 pm »
Bonjour, voila mon pour la gestion du clavier

 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)){window.close();}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)){joueur.setAcc(20,0);}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q)){joueur.setAcc(-20,0);}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z)){joueur.setAcc(0,-20);}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)){joueur.setAcc(0,20);}
 
(Ce code n'est pas dans la boucle évenement)

Je n'arrive pas à appuyer sur 2 touche en même temps, genre D et S.
Sur d'autre sujets, j'ai lu que ce pourrait être une limitation due au clavier, cependant sur d'autres jeux (orc must die 2 par exemple) j'arrive sans problème à appuyer sur ces même touches en même temps.

Du coup je me demande comment fonctionne isKeyPressed?
Cette fonction vérifie-t-elle en continue que la touche est enfoncée? auquel cas ça expliquerait assez clairement pourquoi on peut se retrouver limité par le clavier.

Ou alors ce serait un tableau de booléen qui serait tenu à jour dans keyboard(je ne l'ai pas vu dans la doc mais c'est peut-être privé), les booléens seraient mis à 1 lorsque l'on recoit un signal "appuie" et à 0 lorsque l'on reçoit un signal "relache".

J'ai le sentiment que  isKeyPressed utilise la 1ère méthode et orc must die 2 la 2ème, ce qui expliquerait pourquoi lorsque j'appuis sur plusieurs touches sur orcs cela fonctionne mais pas sur mon projet sfml, et cela expliquerait aussi pourquoi sur orc must die 2, j'ai parfois mon personnage qui se met a courir sans s'arrêter jusqu'à ce que j'enfonce et relache la touche qui correspond à la direction vers laquelle il se dirige alors que ce bug est inéxistant avec isKeyPressed (je pense que du coup quand on appuie sur 2 touche sur orcs on il se peut qu'en les relachant un seul signal soit détecté ce qui expliquerait pourquoi le personnage ne s'arrêterait pas)

Du coup je me pose des questions :
Si j'ai raison :
-Existe-t-il sur SFML un gestion du clavier, si non, est-il possible de le recréer avec les évenement SFML?
Si j'ai tort:
-Comment fonctionne IsKeyPressed, et pourquoi cela ne fonctionne-t-il pas comme sur mes autres jeux?

3
Graphique / Re : Faire bouger une TileMap
« le: Novembre 18, 2013, 03:43:06 pm »
Ok je vais essayer de faire ça, c'est juste que ca me faisait peur je pense de charger un truc aussi enorme, je vais essayer de refaire ca et d'utiliser view.

4
Graphique / Re : Faire bouger une TileMap
« le: Novembre 18, 2013, 01:43:10 pm »
En fait j'ai une tilemap de 500 case de haut et 1200 case de longt(tableau d'unsigned char) et, si j'ai bien compris avec load, j'en charge (dans mon cas) 1600/32(width) de longt et 900/32(height) de haut, je n'ai pas l'impression de recréer ma map, mais il faut bien que je dessine les cases que j'affiche sur ma fenêtre non?

5
Graphique / Faire bouger une TileMap
« le: Novembre 18, 2013, 01:28:50 pm »
Voila, je tente d'utiliser le tutoriel pour afficher une TileMap à l'écran, j'ai reussi à le faire fonctionner, cependant je suis incapable de créer un mouvement "fluide" pixel par pixel et non tuile par tuile.
J'utilise la fonction load que j'ai un peu modifiée :
bool TileMap::load(const std::string& tileset, sf::Vector2u tileSize, unsigned char** level, unsigned int height, unsigned int width,int dx, int dy)
    {
        // on charge la texture du tileset
        if (!m_tileset.loadFromFile(tileset))
            return false;

        // on redimensionne le tableau de vertex pour qu'il puisse contenir tout le niveau
        m_vertices.setPrimitiveType(sf::Quads);
        m_vertices.resize((height) * (width) * 4);//nombre de tiles de haut * nb tiles de large * nombre de points par tiles.

        // on remplit le tableau de vertex, avec un quad par tuile
        for (unsigned int j = 0; j < height; ++j)
            for (unsigned int i = 0; i < width; ++i)
            {
                // on récupère le numéro de tuile courant
                int tileNumber = level[height-j-1-(dy/PPB)][i+(dx/PPB)];//on inverse l'axe des Y(j),de cette manière on obtient que la coordonnées 0,0 est le coin en bas à gauche, c'est plus pratique.

                // on en déduit sa position dans la texture du tileset
                int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
                int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);

                // on récupère un pointeur vers le quad à définir dans le tableau de vertex
                sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

                // on définit ses quatre coins
                quad[0].position = sf::Vector2f((i * tileSize.x)+dx%PPB, (j * tileSize.y));// coin haut gauche
                quad[1].position = sf::Vector2f(((i + 1) * tileSize.x)+dx%PPB, (j * tileSize.y));//coin haut droit
                quad[2].position = sf::Vector2f(((i + 1) * tileSize.x)+dx%PPB, ((j + 1) * tileSize.y));//coin bas droit
                quad[3].position = sf::Vector2f((i * tileSize.x)+dx%PPB, ((j + 1) * tileSize.y));//coin bas gauche

                // on définit ses quatre coordonnées de texture
                quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y); // coin haut gauche
                quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);//coin haut droit
                quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);//coin bas droit
                quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);//coin bas gauche
            }
        return true;
    }
 
J'ai entre autre, rajouté des argument dx et dy qui servent à bouger l'image.
Cependant, j'ai un problème, quand j'essaye d'ajouter un mouvement horizontal, les tuiles les plus à gauches (dont les points les plus à gauche sont en dehors de l'écran) ne s'affichent pas.
J'ai rajouté dx/PPB (pixel par bloc) pour charger les bonnes tuiles.
et je les déplace le tout de dx%PPB pixel vers la droite(en ajoutant dx%PPB à leurs coordonnées)
Du coup j'ai une barre noire de taille dx%PPB à gauche de mon écran.
Si j'enlève 32 pixel à toutes mes coordonnées le problème reste le même.
J'ai l'impression qu'on ne peut pas afficher des choses trop à gauche de l'écran.edit(il n'aime peut-être pas les coordonnées négatives)

6
Général / Re : Impossible d'afficher une fenêtre
« le: Octobre 22, 2013, 10:54:07 am »
Pour info tout mon projet, code::blocks inclus est dans un dossier le  tout avec des chemin relatif, lorsque je copie le tout sur un pc de ma fac, (windows xp) dont je ne connais pas le matériel, le programme fonctionne bien, cela viendrais donc de mon pc.

7
Général / Re : Impossible d'afficher une fenêtre
« le: Octobre 21, 2013, 11:16:38 am »
Je me rends compte que je ne suis peut-être pas clair, quand je dis que les dll sont avec les .exe, je veux dire que les dll de SFML utilisés sont dans le dossier du .exe.
Edit : Pour ce qui est du lien statique par défaut, je n'ai touché à rien et j'ai réinstaller code::blocks avant d'installer SFML, donc je suppose qu'il a bien la configuration par défaut.

8
Général / Re : Impossible d'afficher une fenêtre
« le: Octobre 21, 2013, 10:05:16 am »
Je n'ai pas de DLL à part ceux de SFML, faut-il vraiment des dll de mingw (je crois que c'est le compilateur avec mon code::blocks) si oui lesquels? j'ai essayé d'ajouter mingwm10.dll sans succès. J'avais déjà fais d'autres projets avec d'autres bibliothèques et je n'ai pas le souvenir d'avoir eu à ajouter de dll autres que ceux des bibliothèques, est-ce spécifique à SFML?

9
Général / Impossible d'afficher une fenêtre
« le: Octobre 21, 2013, 09:20:20 am »
Voila j'essaye de me mettre à SFML, j'ai donc essayé de suivre ce tuto :
http://www.sfml-dev.org/tutorials/2.1/start-cb.php

Mon problème est que le programme compile bien, cependant lorsque je lance l'exemple du tuto, aucune fenêtre ne s'affiche.
Le programme se lance, me prend genre 30% de cpu, mais aucune fenêtre ne s'affiche.
De plus (je ne sais pas si c'est normal) le programme ne peut être arrêté sans le gestionnaire de processus.
Lorsque je le lance le debuggeur, je met un break point sur la première ligne, là cpu =0%
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");// première ligne;
il s'y arrête et lorsque je fais ligne Next line, il n'atteint probablement jamais la seconde ligne et bloque (cpu = 30%)(cependant là je n'ai plus besoin du gestionnaire pour fermer le processus)
sf::CircleShape shape(100.f); // deuxieme ligne;

version de code::blocks http://www.codeblocks.org/downloads/binaries : codeblocks-12.11mingw-setup.exe
version de SFML : GCC 4.7 TDM (SJLJ) - 32 bits (version 2.1) (je suis quasiment sûr que j'ai bien besoin de SJLJ)

Windows 8, 64 bit.
Carte graphique : -AMD Radeon HD 7600M Series, version du pilote : 13.200.16.0
                        -Carte graphique HD Intel(R) 4000 (Microsoft Corporation (Microsoft Corporation - WDDM 1.2), version du pilote : 9.17.10.2768

Le projet est un empty project de type : GUI application;
Dans build target, les search directories semblent bons (lib et includes).
De même pour les linkers. graphics -> window -> system
Les dll sont bien avec le .exe




Pages: [1]