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

Pages: [1] 2 3 Suivante »
1
Graphique / Re : Collision Tilemap
« le: Mai 29, 2014, 04:53:08 pm »
Ok merci :)

2
Graphique / Re : Collision Tilemap
« le: Mai 29, 2014, 11:12:34 am »
Super merci!
ça marche!

Mais pourquoi avant ça ne marchiat pas c'est la SFML qui a buger, je supose?
Vus dans plein de forum en conseil de mettre "si tu n'intersecte pas" il y aurais pas un "sprite_perso.dontMove(mouvement)"  ;D

3
Graphique / Re : Collision Tilemap
« le: Mai 28, 2014, 02:07:50 pm »
Bonjours je crois avoir trouver mon problème :

sprite_perso.move(mouvement); //Je l'ai mis plus loins juste avant que l'on affiche (window.draw(..)

 if(!test.intersects(rect.getGlobalBounds()))
            {
            rect.setFillColor(sf::Color::Blue);
            }
            else
            {
            rect.setFillColor(sf::Color::Red);
            }

 if(!test.intersects(rect2.getGlobalBounds()))
            {
            rect2.setFillColor(sf::Color::Blue);
            }
            else
            {
            rect2.setFillColor(sf::Color::Red);
            }
}

Quand je collisionne un des deux carrés, il se met en rouge.

Donc mon problème vien de mon "sprite_perso" car il bouge que sur un carré, est t'il possible que ça vienne de ce sprite?

4
Graphique / Re : Collision Tilemap
« le: Mai 27, 2014, 06:07:05 pm »
if(!test.intersects(rect2.getGlobalBounds()))
            {
            sprite_perso.move(mouvement);
            }
            else
            {
            std::cout << "collision" << std::endl;
            }

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

Si je supprime "sprite_perso.move(mouvement);" à l'un ou un l'autre, mon personnage collisionne le mur
Mais, si je met les deux "sprite_perso.move(mouvement);"  le message "collision" s'affiche bien mais hélasse personnage bouge toujours...

Je vous passe toutes mes lignes de codes, car il serais alors surement possible que le bug vienne d'autre chose...

Main.cpp
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath>
#include "Shape.h"

bool collision = false;
sf::RenderWindow window;
sf::RectangleShape rect;
sf::RectangleShape rect2;
int speed = 2;
sf::Vector2i positionSouris;
sf::Texture perso;
sf::Sprite sprite_perso;

enum Dir{ Down, Left, Right, Up };
sf::Vector2i anim(1, Down);
bool updateFPS = true;
int blockSize = 32;
int blockDemiSize = 16;

/**[Les Void] **/
void gestion_Persocollision();
void gestion_souris();
/**[Les Void] **/

int main()
{
//Création de la fenêtre 800x600
window.create(sf::VideoMode(800, 600), "Test SFML");
//Modifier la position
window.setPosition(sf::Vector2i(192, 0));
window.setFramerateLimit(60);

std::cout << "Lancement du jeu" << std::endl;

rect = PB_Rect(400, 300, 100, 100);
rect2 = PB_Rect(100, 300, 100, 100);

sf::Clock time;

if (!perso.loadFromFile("resources/image.png"))
{
std::cout << "Erreur chargement de image.png" << std::endl;
}

//En pofine les FPS
perso.setSmooth(true);

sprite_perso.setTexture(perso);

//Tant que la fenêtre est ouverte...
while (window.isOpen())
{
sf::Event event;
//Test des événements
while (window.pollEvent(event))
{
//Si on clique sur fermer
if (event.type == sf::Event::Closed)
window.close(); //On ferme la fenêtre

if (event.type == sf::Event::KeyPressed)
{ /*Pour activer l'anim*/
updateFPS = true;
}
else
updateFPS = false;
anim.x = 1;

}

/**[Les Void] **/
gestion_Persocollision();
gestion_souris();
/**[Les Void] **/

if (updateFPS == true)
{
if (time.getElapsedTime().asMilliseconds() >= 50)
{ /*On change d'animation toutes les 50 milli secondes*/
anim.x--;
if (anim.x * blockSize >= perso.getSize().x)
anim.x = 2;
time.restart(); /*On relance le timer*/
std::cout << "X: " << sprite_perso.getPosition().x << " Y: " << sprite_perso.getPosition().y << std::endl;
}
}
//on "coupe" les parties de l'image pour les réutiliser en animation..
sprite_perso.setTextureRect(sf::IntRect(anim.x * blockSize, anim.y * blockSize, blockSize, blockSize));

// On dessine, on affiche et on met à jour
window.draw(rect);
window.draw(rect2);
window.draw(sprite_perso);
window.display();
window.clear();
}

return 0;
}




void gestion_souris() /** changer  "sprite" par "rect" **/
{
if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
//On récupère les coordonnées de la souris
positionSouris = sf::Mouse::getPosition(window);
//std::cout << "Mouse.x" << positionSouris.x << "Mouse.y" << positionSouris.y << std::endl;
int mouseX = positionSouris.x;
int mouseY = positionSouris.y;
sprite_perso.setPosition(mouseX, mouseY); // On positionne le rect
}
}

void gestion_Persocollision()
{
        sf::Vector2f mouvement(0,0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            mouvement.y -= speed;
            anim.y = Up;
        }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
         {
             mouvement.y += speed;
             anim.y = Down;

         }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
         {
             mouvement.x += speed;
             anim.y = Right;
         }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
         {
            mouvement.x -= speed;
            anim.y = Left;
         }


                sf::FloatRect test(sprite_perso.getPosition().x + mouvement.x,
                                   sprite_perso.getPosition().y + mouvement.y,
                                   sprite_perso.getGlobalBounds().height,
                                   sprite_perso.getGlobalBounds().width);

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

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

 

Shape.h
#ifndef DEF_SHAPE
#define DEF_SHAPE

#include <SFML/Graphics.hpp>


sf::RectangleShape PB_Rect(int posX, int posY, int width, int height)
{
    sf::RectangleShape rect(sf::Vector2f(width, height));
    rect.setPosition(posX, posY);
    rect.setFillColor(sf::Color(255, 0, 0, 255));

    return rect;
}
#endif // DEF_SHAPE
 

5
Graphique / Re : Collision Tilemap
« le: Mai 26, 2014, 07:24:47 pm »
salut!

auffette j'ai fait tout comme le rect en rajoutant "2" :D

Mais a ce que j'ai vu, quan dje supprime "rect" le rect2 a la collision(mais du coup pas le 1)

6
Graphique / Re : Collision Tilemap
« le: Mai 25, 2014, 01:32:45 pm »
Um... non dsl, marche toujours pas :-\
 :'(

ici rien ne se passe, même le message "collision" ni viens plus,

comment dois-je faire pour ajouter ce fameux murs?

ou y'at'il une autre solutuion de collision entre certin décor?

7
Graphique / Re : Collision Tilemap
« le: Mai 24, 2014, 11:26:21 am »
Citer
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);
        }
 
Oui merci est désolé j'ai script trop vite, mais ça marche toujours pas mon personnage est bloqué par le premier mur mais pas par le deuxième )=

8
Graphique / Re : Collision Tilemap
« le: Mai 24, 2014, 09:50:29 am »
De Retour :-\
yo tout le monde après une semaine de script intense sur "aseba sthudio",
je me suis remis sur le projet,(certins amis m'avaient conseillé de faire plusieurs test de collision en même temps, ajouter "des murs")

bref je me suis remis a créer un porjet, animer, remettre emplace mon fameux "rect" en signe de mur,
aucun problème mon personnage et stopé par la collision quand t'il va contre le mur...

*Je recrée un "mur" qui s'appelle "rect2"*

et cette fois le personnage ne sârrette par quand t'il est dans un des murs, j'ai donc r'ajouter :
            else
            {
            std::cout << "collision" << std::endl;
            }
Quand mon personnage entre en collision le message "collision" s'affiche bien mais il ne s'arrête toujours plus,
mon compilateur ne détecte aucun bug, et normalement cela devrais fonctionner :(

Pour test, j'ai ajouter :
            {
            std::cout << "collision" << std::endl;
            collision = false;
            }

        if(collision != false)
        {
            sprite_perso.move(mouvement);
        }
}
ça marche mais qu'avec un(que si je supprime un des rect) sinon rien ne se passe, comme en haut..

Voici La gestion des collision :

void gestion_PersoCollision()
{
        sf::Vector2f mouvement(0,0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            mouvement.y -= speed;
            anim.y = Up;
        }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
         {
             mouvement.y += speed;
             anim.y = Down;

         }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
         {
             mouvement.x += speed;
             anim.y = Right;
         }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
         {
            mouvement.x -= speed;
            anim.y = Left;
         }


                sf::FloatRect test(sprite_perso.getPosition().x + mouvement.x,
                                   sprite_perso.getPosition().y + mouvement.y,
                                   sprite_perso.getGlobalBounds().height,
                                   sprite_perso.getGlobalBounds().width);

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

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

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

Que devrais-je faire pour enlevé ce bug plutôt ennuyeux? :-\ ???


9
Graphique / Re : Collision Tilemap
« le: Mai 14, 2014, 01:10:37 pm »
A non escuse au moment ou j'ai finis d'envoyé j'ai trouver le bug... ;D

10
Graphique / Re : Collision Tilemap
« le: Mai 13, 2014, 05:26:36 pm »
Oui :

Au cas ou j'aurais eu faux pour transofrmer ma gestion_clavier a un vecteur2f
je lui rajoute "sf::vector2f"?


11
Graphique / Re : Collision Tilemap
« le: Mai 12, 2014, 05:37:46 pm »
A aussi, pourquoi mon personnage bouge avec :

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            mouvement.x -= 1;
Normalement ça ne devrais pas être

avec Perso.x?

Citer
Nope ce serait
perso.move(gestion_clavier())
 
;)

Non Marche pas mon compilateur affichie des fautes...

Mais pour la gestion clavier on peux aire un "mouvement" sans que le personnage bouge avec ces lignes?

12
Graphique / Re : Collision Tilemap
« le: Mai 11, 2014, 09:21:53 pm »
Okey merci,
la ligne serait ~
perso.move(gestion_clavier)
?



13
Graphique / Re : Collision Tilemap
« le: Mai 11, 2014, 08:44:30 pm »
Oui dsl dailleur je l'ai enlevé dec j'ai compris (bug de ctr-v) ;D

perso.move(mouvement);
Je pourrais par exemple lui inscrite "gestion_clavier" a lieu de mouvement?






14
Graphique / Re : Collision Tilemap
« le: Mai 11, 2014, 08:24:37 pm »
Salut! Merci Beaucoup!!! ;D :D ;) :)

Juste une Dernière petite question :

        sf::Vector2f mouvement(0,0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            mouvement.y -= 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            mouvement.y += 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            mouvement.x += 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            mouvement.x -= 0.1;
Je peux bien évidément transormer en "gestion_clavier" comme je l'avais fais?

&
J'ai éxaminé le code, mais a aucun moment on dit ou le personnage dois s'arreter pour pas traversé le carré? qu'elle est cette magie :o


sur ce merci beaucoup pour ton aide! ;)






edit: je ne serais pas la cet semaine j'ai une gros test de script dans ma classe sur https://aseba.wikidot.com/fr:thymio (une programmation d'un robot de EPFL) ou je suis le plus avancé de ma classe...(par a port à la SFML ;D)

15
Graphique / Re : Collision Tilemap
« le: Mai 11, 2014, 06:13:04 pm »
 :-\La je n'arrive pas j'ai été sous 20 forum regarder 10 vidéo englaise et française... :-\

Le problème que que je suis un débutant et je ne sais même pas par ou commencer...

qqn aurait une vingène de lignes de code pour le début pour moi svp :-\ ???


Pages: [1] 2 3 Suivante »