Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Déplacement d'un objet  (Lu 3143 fois)

0 Membres et 1 Invité sur ce sujet

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Déplacement d'un objet
« le: Février 27, 2014, 08:11:14 pm »
Bonjour,

J'utilise un tableau qui stock mes projectiles. Jusque là tout va bien, j'arrive à ajouter des projectiles et à les afficher ainsi que les détruire mais je n'arrive pas à les déplacer.
Pourtant quand j'affiche la valeur x et y de ce projectile je vois bien une évolution mais rien ne se passe à l'écran ...

Voici le code du ProjectileManager :

#include "ProjectileManager.h"

ProjectileManager::ProjectileManager() : sf::Sprite()
{
    //ctor
}

ProjectileManager::~ProjectileManager()
{
    //dtor
}

void ProjectileManager::addProjectile(Spaceship &spaceship)
{
    m_projectiles.push_back(Projectile(&spaceship));
}

void ProjectileManager::deleteProjectile()
{
    for (unsigned int i = 0; i < m_projectiles.size(); i++)
    {
         m_projectiles.erase(m_projectiles.begin() + i);
    }
}

void ProjectileManager::drawProjectile(sf::RenderWindow& window)
{
    for (unsigned int i = 0; i < m_projectiles.size(); ++i)
    {
        window.draw(m_projectiles[i]);
    }
}
void ProjectileManager::moveProjectile()
{
    for (unsigned int i = 0; i < m_projectiles.size(); ++i)
    {
        m_projectiles[i].move(0, 1);
        int y = m_projectiles[i].getPosition().y;
        int x = m_projectiles[i].getPosition().x;
        //std::cout << x << " | " << y << std::endl;
    }
}

Ma classe principale :

ProjectileManager projectile;

if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space) )
                {
                    projectile.addProjectile(spaceship);
                }
if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::LControl) )
                {
                    projectile.moveProjectile();
                }

window.clear();
projectile.drawProjectile(window);
window.display();
 


et pour finir voici mon projectile :

#include "Projectile.h"

Projectile::Projectile(Spaceship* spaceship)
{
    Projectile_Blue.setSize(sf::Vector2f(10, 10));
    Projectile_Blue.setPosition(spaceship->getPositionX() + 25, spaceship->getPositionY()+25);
    Projectile_Blue.setFillColor(sf::Color::Blue);
    std::cout << Projectile_Blue.getPosition().y << std::endl;
}
 

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Déplacement d'un objet
« Réponse #1 le: Février 28, 2014, 07:52:19 am »
Ma classe principale :

ProjectileManager projectile;

if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space) )
                {
                    projectile.addProjectile(spaceship);
                }
if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::LControl) )
                {
                    projectile.moveProjectile();
                }

window.clear();
projectile.drawProjectile(window);
window.display();
 
Si tu fais ça à chaque tour de boucle, tu recrées un ProjectileManager à chaque fois, il risque pas de se passer grand chose. Pis les évènements ça va dans la boucle d'évènements.
Bref, j'imagine que le code posté n'existe pas en vrai, donc comment savoir ???

Projectile c'est un sf::Sprite ?

Sinon je rêve ou ProjectileManager hérite de sf::Sprite ?  ??? :o

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Déplacement d'un objet
« Réponse #2 le: Février 28, 2014, 11:14:52 am »
J'ai mal mis ma classe principale j'ai juste abrégé ;)

Enfin de compte, mon projectilemanager et hors boucle et les événements et le reste sont dans la boucle
Mon sprite est un rectangle et non tu ne rêves pas pour le projectile manager

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Déplacement d'un objet
« Réponse #3 le: Mars 05, 2014, 11:43:03 pm »
Bonjour je me permet de reposter un message pour faire appel à vous ;)

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Déplacement d'un objet
« Réponse #4 le: Mars 06, 2014, 12:19:16 am »
On n'en sait pas plus, y'a toujours du code qui n'existe pas et qui est incomplet. ^^

Si Projectile est un RectangleShape, c'est quoi le rectangle_blue dedans ? Ça se trouve t'en bouges un et tu dessines l'autre. Et si c'est un héritage, tu appelles pas le constructeur de RectangleShape avec Projectile ?

Bref, pour moi y'a pas assez d'infos (ou alors le prob est visible et je l'ai pas vu) alors poste le vrai code complet mais court. Tu enlèves tout ce qui n'a rien à voir mais tu fais en sorte que ça reste compilable, s'il te reste moins de 200 lignes c'est bien. :p

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Déplacement d'un objet
« Réponse #5 le: Mars 06, 2014, 11:59:13 am »
Le rectangle_blue est mon projectile.

Et je vois pas ce que je peux mettre de plus ...

#include "Scene.h"

Scene::Scene()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "Warrior Of Space", sf::Style::Default);
    window.setFramerateLimit(60);

    Spaceship spaceship;
    ProjectileManager projectile;


    while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                window.close();

                if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape) )
                {
                    window.close();
                }

                if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space) )
                {
                    projectile.addProjectile(spaceship);
                }
                if ( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::LControl) )
                {
                    projectile.moveProjectile();
                }
            }

            window.clear();
            projectile.drawProjectile(window);
            window.draw(spaceship);
            window.display();
        }
}
 

Ma Scene principale où je rassemble tout ...

linke

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : Déplacement d'un objet
« Réponse #6 le: Mars 06, 2014, 04:14:02 pm »
utilise un timer c bcp plus ...... comme ca tu peut regler la vitesse de tes objets a la fenetre

void ProjectileManager::moveProjectile()
{
    for (unsigned int i = 0; i < m_projectiles.size(); ++i)
    {
        m_projectiles[i].move(0, 1);

tu dois pas incrementer m_projectiles.move(0, 1);????
t projectiles vont rester au même point