2012-07-26 49 views
0

我一直在C#中使用XNA構建遊戲引擎,作爲我第一次進入編程領域,我想用它來更全面地理解我需要的問題知道如何解決。用不同的屏幕分辨率和圖像拉伸處理基於背景的每個像素的碰撞

我目前正在使用的引擎部分是碰撞檢測。我正在處理的模式是基於圖像的主動式碰撞系統。

該角色有一個位置(XNA Rectangle),背景是2個紋理,並且該角色具有Vector2運動屬性。 1是顯示紋理,另一個是第一個紋理中碰撞區域的雙色圖。我顯示紋理1,並在加載背景時使用紋理的GetData例程將紋理2加載到Color []數組中。輸入解析例程不直接改變位置,它增加了運動屬性。

因此,每個更新: 檢查輸入解析器,並添加到運動Vector2。 比較玩家的位置.X/Y沿着每個表面的位置。寬度/高度與動作所需的方向相同。如果運動將它帶到碰撞區域(通過與Color []數組比較來檢測),運動將被歸零(除了重力子程序),並且不會在該特定方向上進行移動。

這讓我不會停止所有的動作,就像在超級馬里奧那樣的遊戲中,跳到一個方塊的一側不會結束你的Y軸運動。

現在,我的問題(即描述失控的快)...

我應該如何處理不同的決議?我不明白如何縮放圖像以填充所需的區域,然後以可用於拉取GetData的格式使用它?我不想讓遊戲爲每個分辨率加載不同的背景碰撞檢測器。我覺得這是編碼工作,而不是藝術/設計。

回答

1

使用比例的做法...

假設你的背景紋理的大小(WBK,HBK),而你是畫與大小視口(WVP,HVP)和offst(XVP,YVP)。

該視口是您的屏幕內繪製背景的矩形。

現在你要得到正確的COORDS(XC,YC)的內部背景紋理您畫精靈的屏幕位置(XS,YS)...

然後,你需要計算的乘法相對於您的視口的座標的背景紋理大小除以視口大小。

Xc= Wbk * (Xs-Xvp)/Wvp; 
    Yc= Hbk * (Ys-Yvp)/Hvp;