Witam wszystkich serdecznie, mam do was pytanie jak zrobić by ciało było ciągle w ruchu za głową? ale robiąc te animacje że porusza się za nim, kombinuje kombinuje i ja wykombinować nie potrafię
void Gra::sprawdzkierunek(kierunek& pierwszy,sf::RectangleShape& kwadrat)
{
switch (pierwszy)
{
case prawo: kwadrat.move(10, 0); break;
case przod: kwadrat.move(0, -10); break;
case dol: kwadrat.move(0, 10); break;
case lewo: kwadrat.move(-10, 0); break;
}
Sleep(100);
}
bool Gra::waz(sf::RenderWindow& okno, sf::Sprite& tapeta)
{
float x, y;
int q = 0; // zmiena która oznacza długość węża
sf::Vector2f pw(300, 200); // Definiuje pozycje węża przy rozpoczeciu gry
sf::RectangleShape glowa(sf::Vector2f(30, 30)); // Tworzenie głowy węża (kwadrat)
glowa.setFillColor(sf::Color::Black); // nadawanie koloru wężowi
glowa.setPosition(pw.x, pw.y); // Nadawanie pozycji wężowi
sf::RectangleShape cialo; // Tworzenie tabily 20 elementowej która ma odgrywać rolę ciała która będzie wpuszczana do vectora i na koniec rysowane
std::vector<sf::RectangleShape> cialko; // Tworzymy vektor do przechowywania ciał
okno.clear(); // czyścimy ekran który otrzymaliśmy poprzez referencje
kierunek pierwszy;
pierwszy = prawo;
bool prawda=false;
okno.setKeyRepeatEnabled(true); // możliwość że gdy trzymamy klawisz postać się porusza,nie trzeba wciskać np 3 razy by zrobić 3 ruchy tylko w odpowiednich klatkach
cialko.push_back(cialo); cialko[0].setSize(sf::Vector2f(30, 30));
cialko[0].setFillColor(sf::Color::Green);
cialko[0].setPosition(glowa.getPosition().x - 50, glowa.getPosition().y);
while (okno.isOpen())
{
sprawdzkierunek(pierwszy, glowa);
sf::Event event;
while (okno.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed: okno.close(); break;
case sf::Event::KeyPressed: {
switch (event.key.code)
{
case sf::Keyboard::D: {if (pierwszy != lewo){ glowa.move(10, 0); pierwszy = prawo; } }break; // Jeżeli wąż nie porusza się w lewo porusz się w prawo
case sf::Keyboard::A: {if (pierwszy != prawo){ glowa.move(-10, 0); pierwszy = lewo; } }break;// Jeżeli wąż nie porusza się w prawo idź porusz się w lewo
case sf::Keyboard::W: {if (pierwszy != dol){ glowa.move(0, -10); pierwszy = przod; } }break;// Jeżeli wąż nie porusza się w dół porusz się w górę
case sf::Keyboard::S: {if (pierwszy != przod){ glowa.move(0, 10); pierwszy = dol; } }break;// Jeżeli wąż nie porusza się w górę porusz się w dół
case sf::Keyboard::E: { ++q;cialko.push_back(cialo); cialko[q].setSize(sf::Vector2f(30, 30));
cialko[q].setFillColor(sf::Color::Green); if (prawda = false)prawda = true; }break; // dodaj ciało
case sf::Keyboard::Q: { return false; }break; // zakończ wykonwywanie funkcji wróć do menu głównego
}
}break;
}
}
okno.clear(); // czyść ekran
okno.draw(tapeta); // background
okno.draw(glowa); // rysuj głowe
if (prawda = true)
{
for (int i = 0; i <= q; i++)
{
if (i == 0){
if (pierwszy == dol)
{
if (glowa.getPosition().y != cialko[0].getPosition().y) // jeżeli pozycja w pionie ciała jest inna niż głowy ustaw ją na taką samą jaka jest głowa
{
int roznica = glowa.getPosition().y - cialko[0].getPosition().y; // Liczymy różnicę pomiędzy pozycją Y głowy a ciała
if (cialko[0].getPosition().x-30 != glowa.getPosition().x)
{
int roznica = glowa.getPosition().x - cialko[0].getPosition().x;
cialko[0].move(roznica, 0);
}
cialko[0].move(0, roznica - 30);
}
else
cialko[0].setPosition(glowa.getPosition().x - 50, glowa.getPosition().y);
okno.draw(cialko[0]);
}
}
else
cialko[i].setPosition(cialko[i-1].getPosition().x - 50, cialko[i-1].getPosition().y);
okno.draw(cialko[i]); // rysujemyy odpowiednie elementy
}
}
okno.display(); // wyświetlamy na ekranie
}
}
Coś takiego chaotycznego zrobiłem, wiem że pierw powinno się planować ale zaczełem to to chciałem skończyć ten projekt