Я пытаюсь создать эффект, когда два снаряда выйдут на заданный объект с заданным смещением игрока. Это была быстрая реализация;Вращение вокруг объекта с заданным смещением
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());
Мне явно нужна ложка, питающаяся этим, даже после отличного объяснения, оно все еще не погружается. Я считаю, что сущность вращения была в градусах, поэтому я преобразовал ее в радианы, а затем попытался выполнить код выше. 'код (радиан = математика :: to_rad (m_owner-> GetSprite() getRotation());. offset.x = 5 * sin (рад); offset.y = -5 * соз (рад) createProjectile (offset, rad);) ' Кроме того, код, который вы указываете, сокращает исходное положение, как я могу применить его обратно к оригинальному? – user1725794
Это работало? Судя по вашему исходному коду 'createProjectile', нужно взять градусы, не так ли? Возможно, поместите код 'createProjectile' в ваш исходный вопрос. –
После двойной проверки createProjectile() принимает вращение в градусах, так как оно затем применяется к спрайту, который принимает его в дедугию. Так что я был прав, превратив его из града в рад, я сделал что-то правильно на этот раз! – user1725794