2017-01-07 29 views
0

我正在製作一款射擊遊戲,玩家可以在鼠標上進行拍攝,所以我拿到槍指向鼠標,但我無法弄清楚如何在圖像左轉後正確翻轉圖像。我的意思是,我確實翻轉了圖像,但沒有對齊。我不確定如何解釋它,這是我的代碼。如何翻轉圖像並同時將槍指向鼠標? (SFML)

void PortalGun::update(Vector2i mPos) { 

    float pi = 3.14159265359; 

    float rotation = atan2(sprite.getGlobalBounds().top - mPos.y,sprite.getGlobalBounds().left - mPos.x) * 180/pi; 

    int x = player->sprite.getGlobalBounds().left + 16; 
    int y = player->sprite.getGlobalBounds().top; 

    if (rotation > -90 && rotation < 90) { 
     player->dir = -1; 
     sprite.setTextureRect(IntRect(0, 32, 64, -32)); 
    } else { 
     player->dir = 1; 
     sprite.setTextureRect(IntRect(0, 0, 64, 32)); 
    } 


    sprite.setPosition(x, y + 15); 
    sprite.setRotation(rotation + 170); 

} 

當鼠標到噴槍的左側,它翻轉圖像,而是保持向上旋轉,以便鼠標20個ISH像素高。旋轉時我不能只改變位置,所以我該怎麼辦?對不起,聽起來有點神祕,有點難以解釋。

+0

是否有任何具體的原因你使用sf :: Sprite :: getGlobalBounds()'? – Mario

回答

0
  • 首先,你應該設置你的精靈的原點到你想旋轉槍的位置(通常是手柄或安裝點)。爲此,請使用sf::Sprite::setOrigin()。傳遞的座標相對於精靈的左上角。

  • 要獲取或設置您的精靈在世界中的位置(您的原點位置),您可以使用sf::Sprite::getPosition()sf::Sprite::setPosition()

  • 你的輪換可以保持原樣。它會圍繞你的原點旋轉。

  • 要反映你的精靈,只是規模(sf::Sprite::setScale())它使用一個不利因素:sprite.setScale(-1, 1);的負面因素將鏡像/在設定原點翻轉圖像,不強迫你更新紋理座標。