gpt4 book ai didi

c++ - 处理鼠标事件 SFML

转载 作者:行者123 更新时间:2023-11-28 05:22:25 25 4
gpt4 key购买 nike

我在处理 SFML 中的事件时遇到了一些问题。我正在制作一个回合制游戏,当鼠标移动或单击鼠标左键时,我检查轮到谁了,然后在该对象位置产生一个射弹,当射弹与地形或对手发生碰撞时,它会被摧毁并转弯被改变了。

不过,这种行为并不是我所期望的。当点击射击时,射弹有时根本不会产生(并且它会立即改变转弯)。我已经禁用了所有碰撞,所以不能那样。我 90% 确定问题出在我处理事件的方式上,因此我非常感谢您提供有关如何让它变得更好的意见。

我学到的是你不应该在 while poll 事件中执行函数,它只是为了记录最近发生的事情,所以我把它们放在外面。这并不能解决我的问题......

    sf::Event event;
sf::Vector2i mousePos;
while (_window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
_window.close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) {
_window.close();
}
if(event.type == sf::Event::MouseMoved) { // <- this is how you check to see if an event
mousePos = sf::Mouse::getPosition();
moved = true;
}
if(event.type == sf::Event::MouseButtonPressed) { // <- this is how you check to see if an event
mousePressed = true;
}
}

if (mousePressed && tank1Turn)
{
sf::Vector2f spawnPos = _t1->getPos() + sf::Vector2f(0, -150);
sf::Vector2f initVel = _t1->getInitVel();
cout << endl;
_p = new Projectile(spawnPos, initVel);
tank1Turn = false;
tank1Firing = true;
mousePressed = false;
}
if (mousePressed && tank2Turn) {
sf::Vector2f spawnPos = _t2->getPos()+sf::Vector2f(0,-150);
sf::Vector2f initVel = _t2->getInitVel();
_p = new Projectile(spawnPos, initVel);
tank2Turn = false;
tank2Firing = true;
mousePressed = false;
}
if (tank1Turn && moved) {
_t1->aim(mousePos);
moved = false;
mousePressed = false;
}
if (tank2Turn && moved) {
_t2->aim(mousePos);
moved = false;
mousePressed = false;
}
}

最佳答案

将此视为评论。这不是一个答案(我没有足够的声誉来发表评论,所以我必须把它作为一个答案)但是我注意到了一些事情:

  • 您应该将事件循环中的 if 替换为 if-else,或者使用开关

  • sf::Keyboard::isKeyPressed 用于实时输入(将其放入游戏更新循环中)。在您的事件循环中,它应该是 sf::Event::KeyPressed 并使用 evt.key.code

  • 检查它是哪个键
  • 您没有检查按下的是哪个鼠标按钮。使用 evt.mouseButton.button(sf::Mouse::Button::Left 用于鼠标左键)

  • Of what ive learned is that you should not execute the functions in the while poll event, its only for registering what has happend most recently,so i put them outside instead.

你在哪里读到的?我不认为这是真的

  • 事件循环下面不应该只有一组if。代码的结构应该更好

关于c++ - 处理鼠标事件 SFML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41198932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com