gpt4 book ai didi

c++ - 如何根据用户在c++中单击鼠标的位置旋转弹丸

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:50 26 4
gpt4 key购买 nike

现在我有一个播放器,每次单击鼠标时我都想发射一个射弹。但是根据鼠标点击的位置,我希望弹丸旋转,这样弹丸似乎总是直接从玩家身上射出。我正在使用 sfml。

检查鼠标是否被点击:

if (sf::Mouse::isButtonPressed(sf::Mouse::Left)){
projectile.fire();
}

效果很好,我的问题是正确旋转并让射弹缓慢地向鼠标移动而不是立即传送到那里,所以基本上是整个 projectile.fire 方法。

这是我的 projectile.h 中的内容:

#pragma once
#include "Entity.h"

class Projectile : public Entity {
public:
void fire() {

}


};

不多,因为它继承自 Entity.h,所以这里是 Entity.h:

#pragma once
#include <iostream>
#include <SFML\Graphics.hpp>
#include <string>

class Entity {
public:
int x, y;
int speed = 1;

sf::Sprite sprite;
sf::Rect<float> size = sprite.getGlobalBounds();

void disappear() {
sprite.setPosition(-10, 0);
}

void setOriginToCenter() { // NEED TO FIX
sprite.setOrigin(sf::Vector2f(size.width / 2, size.height / 2));
}

void setOrigin(float x, float y) {
sprite.setOrigin(x, y);
}

sf::Vector2f getOrigin() {
return sprite.getOrigin();
}

void setPosition(float x, float y) {
sprite.setPosition(x, y);
}

sf::Vector2f getPosition() {
return sprite.getPosition();
}

void setScale(float xscale, float yscale) {
sprite.setScale(xscale, yscale);
}

void move(int ax, int ay) {
sf::Vector2f position = getPosition();
position.x += ax * speed;
position.y += ay * speed;
sprite.setPosition(position.x, position.y);
}

};

我不确定我是否很好地解释了问题或提供了足够的代码/信息,所以请告诉我是否是这种情况。

在此先感谢您的帮助!

最佳答案

您可以像这样计算所需的旋转:

#include <cmath>
float radians = std::atan2(buttonClickX, buttonClickY);

很可能 SFML 现在提供了旋转 Sprite 的功能,例如

sprite.rotate(radians);

您必须查找文档以了解准确的函数名称。

关于c++ - 如何根据用户在c++中单击鼠标的位置旋转弹丸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59114104/

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