2007/03/31

[DirectX]圖形跳動


由於現在的案子是2D模式,當人物紙娃娃一多的時候,就需要許多的圖來使用,所以如果是一張張讀入記憶體時,就會浪費許多的空間。尤其是裝備的圖檔,空白的地方非常的多,在讀圖的同時也會讀入,所以就需要使用材質管理,來管理記錄使用非空白的部份。


以下是我的嘗試做的方法:


就把一張張畫面中所需要部份切割出來,去除不需要部份,再把許多切割出來的圖形,放在一張256x256的材質中。為什麼要256x256呢?因為在Directx最佳化的說明文件中,256x256讀入記憶體的速度最快的。
(同時依網友的回答中,DDS 也就是 DirectX 內建的格式,讀入速度也是最快的。因為不用壓縮、轉換,直接讀到記憶體中,但是同時 DDS 如果使用壓縮也是破壞性的壓縮,會影響到圖形的精美度,由於我們遊戲是2D當然不能使用破壞壓縮,但是這樣儲存出來的檔案也比原來的大上許多)。
然後在遊戲使用中時候在再依需要的圖形載入記憶體,這樣就會比全圖載入所使用的記憶體用量少許多,然後也會比一張張的圖形載入速度較快。


以下表列一下如何動作:



  1. 載入圖檔
  2. 記錄非空白區域
  3. 產生256x256材質記憶體
  4. 尋找空白位置,填入圖形資料
  5. 以上動作重複執行,直到處理完所有圖檔

原本在自已的電腦中,測試是沒有問題的,但是一使用美術的電腦的時候就會發生圖形跳動的問題。



後來發現在第2步中的記錄非空白區域時,如果邊寬長是奇數的話,在用DirectX繪圖時,圖形位置會不太正確,以至於在後來拼貼圖形時會產生跳動的情況。所以在記錄非空白的區域時,要將邊寬長放大至偶數,才不會產生跳動的情形。


可能是因為在材質繪製是使用比例去切割所需要圖形,當為奇數時可能切割的部份會有小誤差,設成偶數誤差就會比較少了。


後來Debug才發現,原來是底層的繪圖長寬使用RECT計算長寬時
長=RECT.left-RECT.right+1
寬=RECT.bottom-RECT.top+1
要+1才是正確的長寬度,以上修正之後,圖形就不會有跳動的問題,但是之前介面的部份沒有+1會正常顯示,現在+1之後圖形的上跟左都會多畫一條線,如果在設定繪圖範圍先-1,就會少畫下跟右的一條線,有點困擾中,到底+1是正確的嗎?

2008.08.15

之後上過課才知道,原來是內部的DirectX問題,只要在材質長寬加上0.5 就可以避免這個問題,有興趣的請參考DirectX的教學。

Blog位置轉換


由於這個智邦的網站期限快到了,而且在來信中只通知加長期限,而沒有之前的加入廣告聯播等方法。可以免費繼續使用,於是就轉到朋友介紹的 Blogger 啦 ,雖然可以選的版面比較少,也比較醜一點,也請大家多多包涵啦~


以下是我的新Blog網址,舊的文章也已經轉過去了.


http://kwedr.blogspot.com/




2007/03/26

東勢軟埤坑賞螢 450元玩整天

東勢軟埤坑賞螢 450元玩整天

看起來很不錯又便宜,沒賞過螢的朋友可以去看看喔~

2007/03/10

Hello 我的部落格


其實 聽blog 這個名詞已經很久了,可能對別人來說已經是個每天必備更新的日記,不過對我而言他還是個新玩意。


雖然對我而言離打一篇文章已經是離我很久遠了,但是我還是希望藉由此來記錄我的生活。 也許每天的文字並不多,但是更新就代表我仍用我的心去感受這個我生活的世界。


自從看愈來愈多的朋友開始使用blog,我就也想尋找在國內某個好用的blog,至少對我這個blog新手而已,後台的中文可以讓我更快的進入與適應這個 BLOG 新玩意。可是經過 "有名" 與 "地瓜籐" 這兩個有名的Blog網站(至少對我而言) 的大搬風,讓許許多多的bloger 唉聲連連,而讓我卻步觀望許久。


某天讓我看到 台灣部落客免費架站計畫 ,有一個免費的主機讓我可以好好把玩 Blog 從後台的程式設定,前台的外觀設計(好吧,我承認我只是個程式),好看又玩好的外掛,就讓我義無反顧的投入這個blog的汪汪大海。


雖然外觀仍然不漂亮,使用仍然不順手,但是我跨出了我向WEB2.0前進的第一步。


以此用我部落格記錄我的世界,並向我的朋友大聲呼喊「2007 新年快樂」


值得記念的一日


以一個從前幾乎沒什麼免費遊整而到處玩CB OB的遊戲遊民,時至今日愈來愈多的免費遊戲,讓我這個遊民也開始定居下來了,現在手頭主要玩了三款遊戲 飛天、完美、戰魂。


而今天晚上想說玩一下完美的時候 ,發現 我被盜帳號了~我被盜帳號了~我被盜帳號了,身上的金錢物品跟倉庫的金錢物品就這樣被盜光了.............


我被盜帳號狀況是我有兩隻角色,一隻被盜光另一隻沒事,雖然有可能是我不小心,但以我猜測應該是屬遊戲程式某方面被攻破了,因為要盜也把兩隻都拿光光,但是留下一隻沒有被盜,也許盜帳號的人有那麼好心,後來才知道原來這樣讓玩家可以繼續玩下次才可以再盜你一次。

造成被盜帳號其實有許許多的原因,有可能是玩家自已在網咖被盜錄帳號、或是使用外掛電腦被植入木馬、被有心人偷取帳號、密碼,林林總總許多玩家不小心造成的,但以一個遊戲程式設計師而言,以上不是最嚴重的部份,嚴重的就是玩家資料被竊、網路封包被解密、伺服器被攻破,這將造成一個遊戲的快速落敗。


以程式而言,如果只是單純的猜測密碼跟帳號,在12位數帳號跟12位數密碼的情況之下,要猜得到也要花費許多時間,而一般的登入伺服器,在登入錯誤例如三次以上都會有些許的限制,所以想要單純的猜得到帳號、密碼其實不是太容易的事情。但是,如果是封包被反解密的情況之下,就非常的容易取得玩家的帳號密碼。以現在線上遊戲來看,遊戲的即時性是非常受到注重的,所以過份的封包加密是不太可取的。但是過於簡單的加密有容易被破解的危機,所以這其中的取捨就要看待遊戲設計時的考量。


以上林林總總說明,其實遊戲不是很難盜,但是也要花費一些功夫去研究、反解譯資料,如果一個遊戲值得去研究盜帳號,那也代表這個遊戲也蠻是熱門了,要如何的去反解譯,在將來也許某一天自已的遊戲被攻擊也許就會有更深入的研究,但也要有上市並且火熱的那一天了.


以一個遊戲程式設計者、線上遊戲遊民的我而言,第一次的線上遊戲被盜帳號,這不能說不是一個值得記念的日子。