2017-01-07 7 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ピクセル上になるように上向きに回転し続けます。私は回転時に位置を変更することはできませんので、私は何をしますか?少しわかりにくいのは申し訳ありませんが、説明するのは少し難しいです。

+0

'sf :: Sprite :: getGlobalBounds()'を使用している特定の理由はありますか? – Mario

答えて

0
  • まず、スプライトの原点を、ガン(通常はハンドルまたはマウントポイント)を回転させたい点に設定する必要があります。これを行うには、sf::Sprite::setOrigin()を使用します。渡された座標は、スプライトの左上隅からの相対座標です。

  • ワールド内のスプライトの位置(原点)を取得または設定するには、sf::Sprite::getPosition()sf::Sprite::setPosition()を使用できます。

  • あなたのローテーションはそのまま留まることができます。設定された原点を中心に回転します。あなたのスプライト、単に規模をミラーに

  • sf::Sprite::setScale())それがマイナス要因を使用して:sprite.setScale(-1, 1);マイナス要因は、テクスチャ座標を更新するためにあなたを強制することなく、設定した原点に画像を反転/ミラーます。

関連する問題