2013-01-06 38 views
1

我有一個精靈,一個正方形,用於正交投影。現在我想用非常基本的簡單的等距方式進行投影。 (我知道這可能不太好,但我只想弄明白這一點)SFML生成等距貼圖

鑑於我的廣場,我把它旋轉45度。現在,如果我理解正確,我仍然應該將我的身高除以2.在SFML中這對我來說是不可能的。有一個比例函數,但如果我在y軸方向上以0.5的比例縮放,則我的立方體會被拉伸,而不是菱形。它看起來好像SFML根據它自己的相對軸(在...之前旋轉過)來轉換精靈。

既然你不能訪問精靈的高度,我想知道這是甚至可能嗎?

我可以在SFML中將方形精靈轉換爲菱形形狀嗎?

回答

5

使用sf :: RenderTexture是一個選項(請參閱other answer)。另一種選擇是搗鼓sf::View。加倍視圖的高度,並調整座標。它會像這樣:

my_sprite.setRotation(45.f); 
//adjust the position for new screen coordinates (once) 
my_sprite.setPosition(my_sprite.getPosition().x, my_sprite.getPosition().y * 2); 

//... 

//when drawing: 
sf::View v = my_render_window.getDefaultView(); 
v.setSize(v.getSize().x, v.getSize().y * 2); 
v.setCenter(v.getSize() *.5f); 

my_render_window.setView(v); 
my_render_window.draw(my_sprite); 
my_render_window.setView(my_render_window.getDefaultView()); 
+0

謝謝,這個作品很有魅力! – KWyckmans

1

旋轉你的精靈,你現在正在做。將其渲染到sf::RenderTexture。使用成員函數getTexture,並從中創建一個新的精靈,或重新使用舊的精靈。沿y軸縮放精靈。將其繪製到渲染窗口。

爲了將RenderTexture設置爲合適的尺寸並將原始精靈繪製在正確的位置上,您可能需要進行一些數學計算。

original_sprite.setRotation(45); 
sf::RenderTexture rt; 
rt.create(FigureOutWidth(),FigureOutHeight()); 
original_sprite.setPosition(MoreMathHere()); 
rt.draw(original_sprite); 
sf::Sprite new_sprite(rt.getTexture()); 
new_sprite.setScale(1.0,0.5); 

它應該不言而喻,但在初始化時,而不是在每個幀都做一次。

+0

另一種可能性是在繪製之前更改'sf :: View'的大小(雙倍高度,並相應地調整精靈的位置)。 –

+0

@AndreiTita:嘿,是的。這是有效的,而且更簡單。我不知道你可以這樣做。你爲什麼沒有回答? –