2017-08-12 58 views
1

我在做一个简单的蛇游戏,但是当我尝试移动我的蛇的一部分时 它到了0,0。 我把蛇的所有部分都放在一个向量中。 但是当我做类似sfml - vector [0] .getPosition()返回0

vector[0].getPosition() 
//(In my code: snakeParts[0].getPosition()) 

它只是返回0,0。 编译时我也没有遇到任何错误。 这里是我的代码:

#include <SFML/Graphics.hpp> 
#include <iostream> 
#include <string> 
#include <unistd.h> 
#include <vector> 

using namespace std; 

sf::RenderWindow App(sf::VideoMode(854, 480), "Snake"); 
sf::RectangleShape snake; 
sf::RectangleShape snake2; 

vector<sf::RectangleShape> snakeParts; 

string movingDirection = "Right"; 

int updatePos() { 

    snakeParts[1].setPosition(snakeParts[0].getPosition()); //Where my problem lies 

    if (movingDirection == "Left") { 
     snake.move(-32,0); 
    } 
    else if (movingDirection == "Right") { 
     snake.move(32,0); 
    } 
    else if (movingDirection == "Up") { 
     snake.move(0,-32); 
    } 
    else if (movingDirection == "Down") { 
     snake.move(0,32); 
    } 
    //for (int i=0; i<snakeParts.size(); i++) { 
     //int target = snakeParts.size()-i; 
} 

int main() 
{ 
    snake.setSize(sf::Vector2f(32, 32)); 
    snake.setFillColor(sf::Color::Green); 
    snake2.setSize(sf::Vector2f(32, 32)); 
    snake2.setFillColor(sf::Color::Red); 
    snakeParts.push_back(snake); 
    snakeParts.push_back(snake2); 

    while (App.isOpen()) 
    { 
     sf::Event event; 
     while (App.pollEvent(event)) 
     { 
      if (event.type == sf::Event::Closed) 
       App.close(); 
      if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { 

       movingDirection = "Left"; 
      } 
      else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { 

       movingDirection = "Right"; 
      } 
      else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { 
       movingDirection = "Down"; 
      } 
      else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { 
       movingDirection = "Up"; 
      } 

     } 
     usleep(100000); 
     //cout << movingDirection << endl; 
     updatePos(); 
     App.clear(); 
     App.draw(snake); 
     App.draw(snake2); 
     App.display(); 
    } 

    return 0; 
} 

我认为这是与指针有关? 但我不知道如何修复...

回答

1

转储那些全球snakeN变量!如果您想拥有100个单元格,您是否要将所有内容都声明为snake100?你的向量正在存储副本(那些在(0,0)上保持不变),你应该在其上执行所有的逻辑。


使所有其他全局变量局部为函数或类的成员,并在需要时使用函数参数。

movingDirection应该是enum

updatePos其目前的签名应该是return的东西。

+1

感谢它的作品也感谢您的额外建议! –