我是SFML新手,現在我有遊戲編程經驗。在我的代碼中,我使用它的座標具有不同的對象。現在我硬編碼所有x和y的固定分辨率。問題是如何正確的代碼?我的意思是如何編寫代碼,如果玩家將調整遊戲窗口大小,所有對象都將被調整大小?調整sfml應用程序的窗口
在此先感謝
最多
我是SFML新手,現在我有遊戲編程經驗。在我的代碼中,我使用它的座標具有不同的對象。現在我硬編碼所有x和y的固定分辨率。問題是如何正確的代碼?我的意思是如何編寫代碼,如果玩家將調整遊戲窗口大小,所有對象都將被調整大小?調整sfml應用程序的窗口
在此先感謝
最多
,你需要做的是應用轉換到繪製所謂的基本思想。
想出一個確定的大小,你希望你的「虛擬」顯示是640比480.在你的主窗口循環中,你應該對事件進行輪詢;我們正在尋找的事件是帶有SizeEvent類型的sf :: Event。調整窗口大小時,將調用此事件,您將獲得顯示區域的新X/Y分辨率。
當您處理該事件時,您將需要根據縮放繪圖函數的多少來生成一些新數字。例如,如果我的「目標」或「虛擬」顯示爲640×480,而窗口尺寸爲960×1600,則我將查看當前的高寬比並決定可以擴展多少。對於X,1600/640是250%的因素,但是我的Y僅爲960/480(200%)。在這種情況下,我會使用2倍來放大尺寸,然後在左右兩側放置160個像素的黑條(這樣我就可以保持相同的寬高比)。 AFAIK,SFML實際上沒有一個全局矩陣,你可以應用變換 - 我可能是錯的。但是,您可能需要做的是將您繪製的每個精靈的位置在X軸上偏移160個像素,然後縮放2.0倍。您可能還想在Window.display之前在屏幕的左側和右側繪製黑色矩形,以確保沒有「剪輯」邊緣。
對不起,我沒有給出任何實際的代碼 - API文檔是你的朋友,尤其是在this頁面上查看setScale(),setPositition()和setTransform()。
非常感謝!也許你知道我在哪裏可以閱讀關於實現的細節?我認爲,「手動」調整每個對象的大小並不是很好,可能更容易爲所有對象創建一個抽象類,在那裏我可以實現某些方法?任何鏈接,我可以在哪裏閱讀它,就足夠了。 – OneOne
靠近[link](http://www.sfml-dev.org/tutorials/2.0/graphics-transform.php)的底部,它指出所有對象都相對於它們的父對象進行了轉換。所以最好的方法是讓一個包含所有其他遊戲對象的父對象。然後,如果您調整該對象的大小,其他所有內容都會自動調整。 –