2017-11-20 15 views
1

私はタイルの等角写像をRenderTextureに描画しようとしています。問題は、RenderTextureの負の座標に描画するものは表示されません。つまり、マップ全体が半分になります。SFMLレンダリングテクスチャ:負の座標に描画できない

Screenshot

問題を示す簡単な例。

sf::RenderTexture renderTexture; 
renderTexture.create(64 * width, 32 * height); 

sf::RectangleShape rectangleShape(sf::Vector2f(100, 100)); 
rectangleShape.setFillColor(sf::Color::Red); 
rectangleShape.setPosition(-50, -50); 
renderTexture.draw(rectangleShape); 

renderTexture.display(); 

sf::Sprite sprite1; 
sprite1.setPosition(0, 0); 
sprite1.setTexture(renderTexture.getTexture()); 

window.draw(sprite1); 

矩形の1/4だけが表示されます。私のマップ全体(そしてすべてのエンティティ)を相殺することなくこれを修正する方法はありますか?

+0

'RenderTexture'の範囲外に描画することはできません。それをペイントキャンバスのように考える。あなたはキャンバスの外側の空気にペイントすることはできません。あなたの世界とエンティティの座標は変更する必要はありません。 'sf :: View'を使って"カメラ "を作りましょう。 – 0x5453

答えて

2

ビューを使用していただきありがとうございます、0x5453!

誰かがこれに遭遇すれば、私の解決策を得ます。

sf::RenderTexture renderTexture; 
renderTexture.create(tilesize * mapWidth, tilesize * mapHeight); 
sf::View view = renderTexture.getView(); 
view.setCenter(0, 0); 
renderTexture.setView(view); 

// Draw stuff to the renderTexture 

renderTexture.display(); 
sf::Sprite sprite; 
sprite.setTexture(renderTexture.getTexture()); 
sprite.setPostion(-(width*tilesize)/2), -(width*tilesize)/2) 
window.draw(sprite); 

非常に単純化されていますが、その要点です。

基本的にレンダリングテクスチャの中心をスクリーン座標(0、0)に設定します。レンダリングする前にそれを戻します。

関連する問題