Sprajty się nie przemieszczają/ sfml

0

Mam problem z poruszaniem sprajtów w sfml. Chciałem stworzyć grę przypominającą space invaders.

funkcja głowna

#include <SFML/Graphics.hpp>
#include <cthulu.h>
#include <player.h>
int main()
{
    int i = 0;
    cthulu enemy_1(100, 100);
    cthulu enemy_2(200, 100);
    cthulu enemy_3(300, 100);
    cthulu enemy_4(400, 100);
    cthulu enemy_5(500, 100);
    cthulu enemy_6(600, 100);
    cthulu enemy_7(700, 100);
    cthulu enemy_8(800, 100);
    cthulu enemy_9(900, 100);
    cthulu enemy_10(1000, 100);
    cthulu enemy_11(1100, 100);
    player gracz(15);
    sf::RenderWindow okno( sf::VideoMode( 1280, 800, 32 ), "Cthulu Invaders" );

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

            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                    okno.close();

            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Left)
                gracz.sprajt.move(-10,0);

                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Right)
                gracz.sprajt.move(10,0);


        }

            enemy_1.ruch(enemy_1.sprajt, i);
            enemy_2.ruch(enemy_2.sprajt ,i);
            enemy_3.ruch(enemy_3.sprajt, i);
            enemy_4.ruch(enemy_4.sprajt, i);
            enemy_5.ruch(enemy_5.sprajt, i);
            enemy_6.ruch(enemy_6.sprajt, i);
            enemy_7.ruch(enemy_7.sprajt, i);
            enemy_8.ruch(enemy_8.sprajt, i);
            enemy_9.ruch(enemy_9.sprajt, i);
            enemy_10.ruch(enemy_10.sprajt, i);
            enemy_11.ruch(enemy_11.sprajt, i);
            i++;
            if(i == 10)
            {
                i = 0;
            }


        okno.clear( sf::Color( 0, 0, 10 ) );
        okno.draw(gracz.sprajt);
        okno.draw(enemy_1.sprajt);
        okno.draw(enemy_2.sprajt);
        okno.draw(enemy_3.sprajt);
        okno.draw(enemy_4.sprajt);
        okno.draw(enemy_5.sprajt);
        okno.draw(enemy_6.sprajt);
        okno.draw(enemy_7.sprajt);
        okno.draw(enemy_8.sprajt);
        okno.draw(enemy_9.sprajt);
        okno.draw(enemy_10.sprajt);
        okno.draw(enemy_11.sprajt);
        okno.display();
    }
        return 0;
}

cthulu.h

#include <SFML/Graphics.hpp>
#ifndef CTHULU_H
#define CTHULU_H


class cthulu
{
    public:
        cthulu(float x, float y);
        sf::Texture tekstura_1;
        sf::Sprite sprajt;
        sf::Vector2f pozycja;
        void ruch(sf::Sprite sprit, int i);
    protected:

    private:

};

#endif // CTHULU_H

cthulu.cpp

#include "cthulu.h"

cthulu::cthulu(float x, float y)
{
    sprajt.setPosition(x, y);
    tekstura_1.loadFromFile("cthulu_1.png");
    sprajt.setTexture(tekstura_1);
}


void cthulu::ruch(sf::Sprite sprit, int rucha)
{
   if(rucha < 6)
   {
       sprit.move(10, 0);
   }
   if( 5 < rucha)
   {
       sprit.move(-10,0);
   }

}

Program prawidłowo wyświetlił duszki u góry ekranu ale nie mogą się one poruszać.

0

Nie pamiętam jak to jest w c++, ale chyba przekazujesz sprite do poruszenia przez wartość, a nie referencję, więc nie poruszasz przekazanego sprite'a, tylko jego kopię.
Myślę, że trochę za szybko się bierzesz za pisanie gry - czemu enemy nie są w tablicy, tylko enemy_1, enemy_2 itp? Czemu przekazujesz sprite do metody klasy, która tego sprite'a zawiera? Wygląda na to, że brakuje ci podstawowej wiedzy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1