2012-05-05 9 views
1

sf :: Xのオフセットを取得するにはどうすればいいですか?sf :: Viewを2次元カメラとして使用していますので、マウスをクリックするとマウスが表示されますsfのXとYオフセットを取得する::

void LMButtonDown(int mX, int mY) 
{ 
    printf("[%d][%d]\n", mX/TILE_SIZE, mY/TILE_SIZE); 
} 

に私がクリックてるタイルのXとY COORDSこれは素晴らしいですが、私はカメラを動かしたらsf::View COORDS、考慮にSFを取るいけない期待通りに表示::オフセット。私はDocumentation でXまたはYを得るための関数を見ないので、オフセットを考慮に入れることができます。 これについての助けに感謝します。

ありがとうございました。

答えて

2

sf::RenderTarget::mapPixelToCoords and mapCoordsToPixelをご覧ください。このメソッドを使用すると、座標を「ビュー」から「ワールド」スペースに変換して戻すことができます。ドキュメントには具体的にあなたのニーズが例として記載されています。

この関数は、レンダーターゲットの指定されたピクセルに一致する2D位置を見つけます。言い換えれば、グラフィックスカードの逆を行い、レンダリングされたピクセルの初期位置を見つける。

Vector2iを取ると、手動ビューを供給することなく、レンダーターゲットのviewに基づいて、それを変換する方法はまた、オーバーロードされたバージョンがあります。

RenderTargetを何らかの理由で使用できない(またはアクセスできない)場合は、手動で翻訳を実行できます。 sf::Viewがスケーリングまたはローテーションを実行していない(つまり、変換のみを実行している)限り、非常に簡単です。

ビューの左上隅を取得するには、中心を取り、幅と高さの半分を単に差し引くだけです。次に、ビューの左上隅を使用してマウス座標を変換します。このような

何か:

// Somewhere else... 
sf::View view; 

void LMButtonDown(int mX, int mY) 
{ 
    sf::Vector2f viewCenter = view.getCenter(); 
    sf::Vector2f halfExtents = view.getSize()/2.0f; 
    sf::Vector2f translation = viewCenter - halfExtents; 

    mX += static_cast<int>(translation.x); 
    mY += static_cast<int>(translation.y); 

    printf("[%d][%d]\n", mX/TILE_SIZE, mY/TILE_SIZE); 
} 
+0

どうもありがとう:)も素晴らしい説明!あなたが私を助けることができるかもしれない1つの質問、[[0] [0] 'をクリックすると' '[0] [0]'が得られますが、[-1] [0] '私は '[0] [0]'を得るが、 '[-2] [0]'をクリックすると '[-1] [0]'を返す。下と右。そのようにyとxに沿って0の2つの行/列があります。 :S – Elgoog

+0

興味深い質問が好きです;)関連するコードの一部を見るのに役立ちます。この最も興味深い問題を概説する別の質問を投稿することをお勧めしますか? –

関連する問題