SFML моя функция перемещения не работает правильно - PullRequest
0 голосов
/ 26 марта 2020

В моем приложении SFML моя собственная функция перемещения не работает должным образом. Если я пишу код непосредственно в основную функцию, он работает правильно.

Моя цель - двигать и вращать автомобиль в соответствии с координатами и заданными дорожными плитками.

Дорога:

enter image description here

И каждая дорожная плитка имеет 239 * 239, а автомобиль начинается с 150 * 150.

Моя функция движения:

void Vehicle::move(int increment, int increment2, float &ax, float &ay, sf::Sprite &mySprite)
{
    ax += increment;
    ay += increment2;

    if(ax == 150 && ay == 150)
    {
        mySprite.setRotation(0);
        increment = 1;
        increment2 = 0;
    }

    else if((ax == 239*2 + 90) && ay == 150)
    {
        mySprite.setRotation(90);
        increment = 0;
        increment2 = 1;
    }

    else if((ax == 239*2 + 90) && ay == 239*2 + 150)
    {
        mySprite.setRotation(0);
        increment = 1;
        increment2 = 0;
    }

    else if((ax == 239*4 + 90) && ay == 239*2 + 150)
    {
        mySprite.setRotation(90);
        increment = 0;
        increment2 = 1;
    }

    else if((ax == 239*4 + 90) && ay == 239*4 + 90)
    {
        mySprite.setRotation(180);
        increment = -1;
        increment2 = 0;
    }

    else if((ax == 150) && ay == 239*4 + 90)
    {
        mySprite.setRotation(270);
        increment = 0;
        increment2 = -1;
    }

}

Моя основная функция:

float x = 150.f;
float y = 150.f;
float angle = 0.f;
int increment = 1;
int increment2 = 0;

sf::RenderWindow renderWindow(sf::VideoMode(1200, 1200), "Traffic Simulator");

tVehicleType myVehicleType = VEHICLE5;

sf::Sprite mySprite;
sf::Texture myTexture;

Vehicle *myVehicle;

myVehicle = new Vehicle(myVehicleType, x, y, angle, mySprite, myTexture);


sf::FloatRect boundingBox = mySprite.getGlobalBounds();
mySprite.setOrigin(sf::Vector2f(boundingBox.width / 2, boundingBox.height / 2));

while (renderWindow.isOpen())
{
    sf::Event event;

    while(renderWindow.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
             renderWindow.close();
    }

    mySprite.setPosition(x, y);

    renderWindow.clear(sf::Color::White);

    renderWindow.draw(mySprite);
    renderWindow.display();

    myVehicle->move(increment, increment2, x, y, mySprite);

Если я напишу код, подобный этому, этот код не будет работать, и я должен написать так. Если я напишу функцию перемещения в последнюю строку основного кода напрямую, она будет работать нормально.

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 26 марта 2020

@ CodingLab, моя цель такова, и если я добавлю код в свою основную функцию, это произойдет:

enter image description here

Однако, если я напишу код функции, это происходит:

enter image description here

Автомобиль не go ниже, он идет только в направлении + x.

...