#include <SFML/Graphics.hpp>
#include <iostream>
using namespace std;
using namespace sf;
int main()
{
RenderWindow window(VideoMode(800, 600), "Lolyan", Style::Default);
Event event;
CircleShape circle(30.0f, 30.0f);
circle.setFillColor(Color::Blue);
circle.setPosition(40, 530);
window.setFramerateLimit(200);
window.draw(circle);
window.display();
int velocityX = 0, velocityY = 0;
Vector2i mousePosition;
while (window.isOpen()) {
circle.move(velocityX / 2, velocityY / 2);
window.draw(circle);
window.display();
while (window.pollEvent(event)) {
window.clear(Color::Black);
if (event.type == Event::Closed) {
window.close();
}
else if (event.type == Event::KeyPressed ) {
cout << velocityX << endl;
switch (event.key.code) {
case Keyboard::A:
velocityX = -5;
break;
case Keyboard::D:
velocityX = 5;
break;
case Keyboard::S:
velocityY = 5;
break;
case Keyboard::W:
velocityY = -5;
break;
}
}
else if (event.type == Event::MouseButtonPressed) {
circle.setFillColor(Color::Red);
}
else if (event.type == Event::MouseButtonReleased) {
circle.setFillColor(Color::Blue);
}
else if (event.type == Event::MouseMoved) {
mousePosition = Mouse::getPosition(window);
circle.setPosition(mousePosition.x - 30, mousePosition.y - 30);
}
else if (event.type == Event::KeyReleased) {
velocityX = 0;
velocityY = 0;
}
window.display();
}
}
return 0;
}
所以这不是我尝试移动球的第一个方法。第一种方法是每当按下一个键时x或y发生变化的每个事件,但是使用这种方法时,移动并没有我想要的那么平滑,因此在以下示例中尝试了该方法:当我按下w时,速度(velocityY)变为5游戏的每一帧位置都会改变。它运行平稳,但在球失灵并有时重新出现之前,会出现小故障轨迹。 我发现,当我在窗口中移动鼠标时(知道我实现了一个需要鼠标移动的事件),球的移动非常平稳。