gpt4 book ai didi

c++ - 围绕给定偏移量的对象旋转

转载 作者:行者123 更新时间:2023-11-30 04:19:18 25 4
gpt4 key购买 nike

我正在尝试创建一种效果,其中两个射弹将以玩家的给定偏移量从给定实体射出。这是一个快速的实现;

sf::Vector2f offset = m_owner->GetSprite().getPosition();

offset.y -= 5;
createProjectile(offset, m_owner->GetSprite().getRotation());
offset.y += 10;
createProjectile(offset, m_owner->GetSprite().getRotation());

如果您的实体只想在 .x 轴上开火,这将非常有效,但是一旦您旋转玩家,它就会崩溃,因为偏移不会偏离玩家当前的旋转。

我尝试了很多实现方法,但似乎都没有用,而且我的数学非常糟糕,我自己也无法解决。

void Weapon::createProjectile(const sf::Vector2f& position, float angle)
{
m_owner->_state->addEntity(new Projectile(m_owner, position, angle,*m_texture, m_velocity, m_damage));
}

Projectile::Projectile(Entity* emitter, const sf::Vector2f& position, float angle,
const sf::Texture& image, int speed, int damage) :
Entity(emitter->_state, true, entityName::entityBullet, speed)
{
Load(_state->getApp()->gettextureManager().Get("Content/ball.png"));
GetSprite().setRotation(angle);

SetPosition(position.x,position.y);
GetSprite().setScale(0.4f,0.4);
}

回答:

float rad;
offset = m_owner->GetSprite().getPosition();

rad = math::to_rad(m_owner->GetSprite().getRotation());

offset.x += 5*sin(rad);
offset.y += -5*cos(rad);

createProjectile(offset,m_owner->GetSprite().getRotation());

offset = m_owner->GetSprite().getPosition();

offset.x += -5*sin(rad);
offset.y += 5*cos(rad);

createProjectile(offset,m_owner->GetSprite().getRotation());

最佳答案

您需要学习的数学是三角学。非常有用!

如果你的角色从“直线向上”顺时针旋转 theta 弧度,你的顶部偏移量将是:

offset.x += 5*sin(theta);
offset.y += -5*cos(theta);

另一个会是

offset.x += -5*sin(theta);
offset.y += 5*cos(theta);

这是“圆数学”(三角学),5 是您所说的偏移量,也称为圆的半径。进行此类数学运算时的快速健全性检查是考虑在 0 弧度时会发生什么。 sincos 的一些简单事实:

sin(0) = 0
cos(0) = 1
sin'(0) = 1
cos'(0) = 0

(第二个是导数:sin 最初增加,cos 一开始是平坦的。检查他们的图表。)这和更多的直觉有助于编写图形代码 - 如果我们考虑 theta 的情况= 0 我们取回您的原始代码。一个异常(exception):你得到的是相对于第一个偏移量的第二个偏移量:我会避免这样做,而是制作两份 m_owner->GetSprite().getPosition(); 或重置 创建第一个射弹后的偏移量

关于c++ - 围绕给定偏移量的对象旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952191/

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