1
Graphics / Shape is disappearing when i try to move it
« on: November 12, 2017, 08:27:12 pm »
Hello i just started learning sfml and i decided it would be fun to create the snake game. It went until i got stuck with the tail. I know, the code is messy, but i commented the important parts. So i think the problem is in the the part with switches, but according to the console log it should work fine at least for x axis.
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace std;
void setupShape(sf::RectangleShape& shape, sf::Vector2f const& pos, sf::Color const& color)
{
shape.setFillColor(color);
shape.setPosition(pos);
shape.setOrigin(shape.getSize() * 0.5f); // The center of the rectangle
}
int main()
{
int px=300, py=300;
int xv=0, yv=0;
int tail=5;
int tx;
int ty;
sf::RenderWindow window(sf::VideoMode(600, 600), "Snek");
//Set target Frames per second
window.setFramerateLimit(6);
sf::Vector2f startPos = sf::Vector2f(px,py);
sf::RectangleShape playerRect(sf::Vector2f(20, 20));
setupShape(playerRect, startPos, sf::Color::Green);
/The shape itself
sf::RectangleShape tailRect(sf::Vector2f(20, 20));
setupShape(tailRect,sf::Vector2f(100, 100), sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::EventType::Closed)
window.close();
}
// input
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down))
{yv= 20;
xv= 0;}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up))
{yv= -20;
xv= 0;}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right))
{xv= 20;
yv= 0;}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left))
{xv= -20;
yv= 0;}
px = px+xv;
py = py+yv;
playerRect.move(xv, yv);
// trying to move the shape here..
switch (xv)
{
case 20:
tailRect.move(px-20*1, py);
cout << "tailx=" << px-20 << " " << "playerx=" << px << endl;
case -20:
tailRect.move(px+20*1, py);
}
switch (yv)
{
case 20:
tailRect.move(px, py-20*1);
case -20:
tailRect.move(px, py+20*1);
}
//cout << "px=" << px << "py" << py << endl;
if (px <= 0){
playerRect.move(580, 0);
px = px + 580;
}
if (px >= 600){
playerRect.move(-580, 0);
px = px -580;
}
if (py >= 600){
playerRect.move(0, -580);
py = py -580;
}
if (py <= 0){
playerRect.move(0, 580);
py = py +580;
}
window.clear(sf::Color::Black);
//drawing the shape.
window.draw(tailRect);
window.draw(playerRect);
window.display();
}
return 0;
}
#include <iostream>
using namespace std;
void setupShape(sf::RectangleShape& shape, sf::Vector2f const& pos, sf::Color const& color)
{
shape.setFillColor(color);
shape.setPosition(pos);
shape.setOrigin(shape.getSize() * 0.5f); // The center of the rectangle
}
int main()
{
int px=300, py=300;
int xv=0, yv=0;
int tail=5;
int tx;
int ty;
sf::RenderWindow window(sf::VideoMode(600, 600), "Snek");
//Set target Frames per second
window.setFramerateLimit(6);
sf::Vector2f startPos = sf::Vector2f(px,py);
sf::RectangleShape playerRect(sf::Vector2f(20, 20));
setupShape(playerRect, startPos, sf::Color::Green);
/The shape itself
sf::RectangleShape tailRect(sf::Vector2f(20, 20));
setupShape(tailRect,sf::Vector2f(100, 100), sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::EventType::Closed)
window.close();
}
// input
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down))
{yv= 20;
xv= 0;}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up))
{yv= -20;
xv= 0;}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right))
{xv= 20;
yv= 0;}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left))
{xv= -20;
yv= 0;}
px = px+xv;
py = py+yv;
playerRect.move(xv, yv);
// trying to move the shape here..
switch (xv)
{
case 20:
tailRect.move(px-20*1, py);
cout << "tailx=" << px-20 << " " << "playerx=" << px << endl;
case -20:
tailRect.move(px+20*1, py);
}
switch (yv)
{
case 20:
tailRect.move(px, py-20*1);
case -20:
tailRect.move(px, py+20*1);
}
//cout << "px=" << px << "py" << py << endl;
if (px <= 0){
playerRect.move(580, 0);
px = px + 580;
}
if (px >= 600){
playerRect.move(-580, 0);
px = px -580;
}
if (py >= 600){
playerRect.move(0, -580);
py = py -580;
}
if (py <= 0){
playerRect.move(0, 580);
py = py +580;
}
window.clear(sf::Color::Black);
//drawing the shape.
window.draw(tailRect);
window.draw(playerRect);
window.display();
}
return 0;
}