Witam
Mam taką oto zagwozdkę.
W mojej grze chce dodac kolizje. Kolizje dzialaja lecz nie moge zrobic czegos takiego ze jak wystapi kolizja to wyswietla sie na ekranie Game Over.
W obecnym kodzie mam metode GameDraw() kora odpowiada za rysowanie wszystkiego oraz GameOver() ktora odpowiada za wyswietlenie napisu Game Over.
Czy ktos moglby mi powiedziec jak to napisac aby GameDraw przerwalo wykonanie po wystapieniu kolizji bo nie moge z tym sie uporac i mam takie cos jak wystapi kolizja ekran czarny + gracz, a gdy wyjde za obszar kolizji to znowu rysuje mape. A chce zeby po wystapieniu kolizji nie moglem sie juz poruszac tylko wczytac od nowa gre.
Prosze o pomoc
Oto kod:
#include "Game.h"
sf::Vector2f velocity(sf::Vector2f(0, 0));
Game::Game(void)
{
sf::Vector2i source(1, Down);
if (textureBackground.loadFromFile("background.png"))
{
spriteBackground.setTexture(textureBackground);
}
window.create(sf::VideoMode(1366,768), "Runner");
//wczytanie tekstur
for (int i = 1; i<Level::LAVA; i++)
{
tekstura[i].loadFromFile("Leveltexture.png", sf::IntRect((i - 1)*level.tile_width, 0, level.tile_width, level.tile_height));
}
//ustawienie kafli
level.loadFromFile("map.txt");
Game::LoadColMap("colMap.txt");
for (int i = 0; i<level.height; i++)
{
for (int j = 0; j<level.width; j++)
{
if (level.poziom[i][j].type != Level::NONE)
{
spritemap[i][j].setTexture(tekstura[level.poziom[i][j].type]);
spritemap[i][j].setPosition(j*level.tile_width, i*level.tile_height);
}
}
}
Game::PlayerTexture();
}
void Game::PlayerTexture()
{
if (texturePlayer.loadFromFile("player.png"))
{
spritePlayer.setTexture(texturePlayer);
}
spritePlayer.setPosition(0, groundHeight);
}
void Game::Movement()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
source.y = Right;
velocity.x = movespeed;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
source.y = Left;
velocity.x = -movespeed;
}
else
velocity.x = 0;
//source.y = Right;
//spritePlayer.move(0.5, 0);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
velocity.y = -jumpspeed;
}
spritePlayer.move(velocity.x, velocity.y);
if (spritePlayer.getPosition().y + 32 < groundHeight || velocity.y <0)
{
velocity.y += gravity;
}
else
{
spritePlayer.setPosition(spritePlayer.getPosition().x, groundHeight );
velocity.y = 0;
}
}
void Game::GameStart()
{
while (window.isOpen())
{
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape))
window.close();
}
Movement();
Aktualizacja();
spritePlayer.setTextureRect(sf::IntRect(source.x * 32, source.y * 32, 32, 32));
//rysowanie mapy
for (int i = 0; i < level.height; i++)
for (int j = 0; j < level.width; j++)
if (level.poziom[i][j].type != Level::LAVA)
window.draw(spritemap[i][j]);
for (int i = 0; i < colMap.size(); i++)
{
for (int j = 0; j < colMap[i].size(); j++)
{
if (colMap[i][j] == 1)
{
bottom = i * 32 + 32;
top = i * 32;
right = j * 32 + 32;
left = j * 32;
if (spriteright<left || spriteleft>right ||
spritetop > bottom || spritebottom < top)
{
gameov = false;
}
else
gameov = true;
break;
}
}
}
if (gameov != true)
{
GameDraw();
}
else
GameOver();
}
}
void Game::Aktualizacja()
{
spritebottom = spritePlayer.getPosition().y + 32;
spriteleft = spritePlayer.getPosition().x;
spriteright = spritePlayer.getPosition().x + 32;
spritetop = spritePlayer.getPosition().y;
}
void Game::LoadColMap(std::string filename)
{
std::ifstream openfile(filename);
std::vector<int> tempMap;
colMap.clear();
if (openfile.is_open())
{
while (!openfile.eof())
{
std::string str, value;
std::getline(openfile, str);
std::stringstream stream(str);
while (std::getline(stream, value, ' '))
{
if (value.length() > 0)
{
int a = atoi(value.c_str());
tempMap.push_back(a);
}
}
colMap.push_back(tempMap);
tempMap.clear();
}
}
}
void Game::GameOver()
{
window.clear();
sf::Text tekst;
tekst.setCharacterSize(70);
tekst.setString("GAME OVER");
tekst.setPosition(1920 / 2 - tekst.getGlobalBounds().width / 2, 250 * 120);
window.draw(tekst);
}
void Game::GameDraw()
{
window.draw(spritePlayer);
view.setCenter(spritePlayer.getPosition().x, spritePlayer.getPosition().y);
window.setView(view);
window.display();
window.clear();
}