В моем приложении SFML моя собственная функция перемещения не работает должным образом. Если я пишу код непосредственно в основную функцию, он работает правильно.
Моя цель - двигать и вращать автомобиль в соответствии с координатами и заданными дорожными плитками.
Дорога:
И каждая дорожная плитка имеет 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);
Если я напишу код, подобный этому, этот код не будет работать, и я должен написать так. Если я напишу функцию перемещения в последнюю строку основного кода напрямую, она будет работать нормально.
Как я могу решить эту проблему?