2013-03-27 116 views
1

我遇到了很多麻煩,因爲我不太瞭解它的術語。儘管如此,這仍然是一個常見問題。我想迭代一個精靈表,但我希望它忽略精靈周圍的透明背景,而不是將它作爲顯示內容的一部分。如何加載夾住精靈的精靈圖表,排除背景?

例如,如果我有幾幀,我想遍歷每個幀並加載該圖像。然後,在那個框架中,我想通過圍繞圖像本身繪製一個矩形來縮小它的範圍,而不是額外的「背景」。這可能是通過找到不透明像素的精靈的角落來完成的(不知道這部分是如何工作的)。

這是否有意義?再次,不確定在這裏使用哪些單詞......讓我知道,如果這不清楚。

這裏的目標是加載與其他幀完全一樣的精靈,因此它們不會無意中搖擺或跳動。

非常感謝!

+1

對於它是什麼值得,我通常覺得最好在遊戲中使用spritesheet之前做這種「調整」。這樣遊戲代碼保持儘可能簡單,並且不需要延遲用戶「修復」。至於修復本身,我的經驗是,找到一個給定的sprite起源的自動化很少成功。例如步行角色可能會將他的手臂伸展到其中一個精靈,這意味着精靈的「起源」會錯誤地偏離一側。 – lzcd 2013-03-27 02:10:57

+0

很高興知道。謝謝。我從來沒有做過動畫,但我的假設是,如果我有一個sprite表格,但幀之間不是「正方形」,動畫時看起來不正確。就像你說的那樣,起源在某個方面或某個方面會過於遙遠。我認爲程序修復會更容易...或許不是:) – MattM 2013-03-27 02:28:52

+0

@PlanetLotus spriteset應該是a)是正交的(所有的精靈已經在正確的位置)或者b)有某種類型的描述記錄,它定義了您。對幀和偏移進行像素級檢測是非常不可靠的。 – Corey 2013-03-27 02:54:32

回答

1

我正在處理我的第一個遊戲,我也遇到了一個類似的問題,就是在我的精靈周圍的透明區域出現碰撞。

我所做的設定,讓每個精靈都有一個位置,高度,X和Y.

Vector2 position = new Vector2(100,100); 
int frameHeight = 48; 
int frameWidth = 48; 
int paddingX = 4; 
int paddingY = 3; 

隨着這些信息的寬度和填充你可以得到你所需要的,例如對於代表圍繞精靈邊框的矩形,我可以使用:

boundingRectangle = new Rectangle(
    (int)position.X + paddingX, 
    (int)position.Y + paddingY, 
    frameWidth - (paddingX * 2), 
    frameHeight - (paddingY * 2)); 

我讀到這在XNA 4.0遊戲開發的實例由庫爾特賊鷗(已一噸的幫助對我來說)

+0

感謝您的回覆。我不明白,但...你怎麼確定透明填充的大小?你是否在爲每一幀找到一個獨特的填充?如果是這樣的話,那麼定義工作表上的精靈位置並不一定要迭代精靈的行呢? – MattM 2013-03-28 06:16:08

+0

在我的情況下,我使用它作爲碰撞,我目前每幀使用相同的填充(這是一個側射手,所以你的船沒有變化太多,因爲它的動畫)我仍然需要填充,因爲它覺得你會得到通過發動機排氣口放牧或擊中。我也可以將填充改爲4值而不是2,這樣後部填充可以比前部更大。我通過檢查edtor中的圖形來確定填充的大小,但最終使其更大一些,因爲它只是感覺更好,可以使用額外的像素或兩個填充。 – 2013-03-28 07:20:47

+0

哦哦。我不確定這對我的工作是否有效,因爲我遇到的問題是,例如,「走右」框架之一比「靜止」框架橫向更長。因此,我的通用框架比一些精靈大得多,但精靈的大小各不相同。這就是爲什麼我想要以透明度爲基礎以編程方式剪裁到精靈大小的原因。 – MattM 2013-03-28 23:58:11