【问题标题】:sfml - vector[0].getPosition() returns 0sfml - vector[0].getPosition() 返回 0
【发布时间】:2017-08-12 14:57:25
【问题描述】:

我正在制作一个简单的蛇游戏,但是当我尝试移动蛇的一部分时 它去了0,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;
}

我认为这与指针有关? 但我不知道如何解决这个问题......

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

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


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

    movingDirection 应该是enum

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2021-05-17
      • 2022-01-23
      • 1970-01-01
      • 2012-02-23
      • 2013-04-03
      相关资源
      最近更新 更多