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ć.