作者Splash5 (史不拉雞五)
看板GameDesign
標題Re: [程式] 如何做到真正的透明色 by vb.net?
時間Mon Apr 19 20:36:11 2010
※ 引述《GoodTauSo (Do live Loop)》之銘言:
: 歹勢,我在把問題描述詳細一點,
: 這次我google了一隻瑪莉歐,
: 首先我用photoimpact存成gif,並設定透明色,如下圖
: http://www.wretch.cc/album/show.php?i=kensirom&b=11&f=1208290598&p=5
: 接著我用了兩個picturebox分別代表兩個角色,
: 使用transparent屬性分別將兩個控制項背景變成透明,語法如下
: PictureBox1.BackColor = System.Drawing.Color.Transparent
: PictureBox2.BackColor = System.Drawing.Color.Transparent
: 執行效果如下,兩隻瑪莉歐的背景變透明了
: http://www.wretch.cc/album/show.php?i=kensirom&b=11&f=1208290597&p=4
: 後來發現,其實它的透明只是去截取背景圖來補欲透明的顏色,不是真正透明
: 只要兩個角色一接近,就破功了
: http://www.wretch.cc/album/show.php?i=kensirom&b=11&f=1208290595&p=2
: 實際上我想要的效果應該是這樣
: http://www.wretch.cc/album/show.php?i=kensirom&b=11&f=1208290596&p=3
: 這樣角色之間才能互動(攻擊,聊天,交易等...)
: 要如何做到真正的透明呢?
: 工具:VB.NET 2008
本來想用推文的 發現會寫一堆XD..
最近剛好有在用c#寫editor 所以有用到這些東西
我直接說我的作法好了.. 先擺1個picturebox到form上面去
在form的建構式裡面或form_load之類的function寫:
picturebox.clientsize = new size(你的視窗大小)
這樣 你的picturebox就跟視窗一樣大了
接著寫picturebox.image = new bitmap(picturebox.clientsize)
之後我們畫圖都是畫到這個bitmap上面去
再來把會用到的圖都讀進來
bitmap mariobitmap = new bitmap("mario.gif");
bitmap background = new bitmap("bg.png");
最後宣告一個Graphics物件
Graphics g = Graphics.FromImage(picturebox.image);
g.Clear();
畫圖的時候 考慮誰要蓋誰 先畫的會被蓋 所以先畫底圖
人物的話就看程式先處理誰就先畫誰
g.DrawImage(background, .....);
g.DrawImage(mariobitmap, .....);
g.DrawImage(mariobitmap, .....);
大致上就這樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.203.198
→ Splash5:至於其它細節我想給原po去思考了:p 04/19 20:39
推 GoodTauSo:感謝您的方式讓我參考^^" 04/20 10:39
推 GoodTauSo:照這個方式,所有的圖像都會畫成一張圖在picturebox 或 04/20 17:56
→ GoodTauSo:form上 , 這樣如果要讓角色移動 , 就要全部刷掉重畫 . 04/20 18:00
推 GoodTauSo:而沒有分圖層 , 譬如說 最底層是地圖 , 第二層是角色 , 04/20 18:03
→ GoodTauSo:第三層是天氣(雲 , 下雨之類...) , 這樣就可以設定每個 04/20 18:04
→ GoodTauSo:物件的屬性(ex:角色的圖形 , MP HP , 雲的移動速度等.) 04/20 18:05
→ GoodTauSo:就是希望構成的"圖" 是許多物件放在一起的 , -而非全部 04/20 18:06
→ GoodTauSo:draw在一張上 . 04/20 18:06
→ Splash5:那就要靠你自己去管理這些物件的優先順序了~ 04/20 19:29
→ Splash5:像我自己寫的東西 會有一個layer管理 會記住哪層有那些 04/20 19:29
→ Splash5:物件 然後依照我定義的layer優先順序 由底層畫到上層 04/20 19:30
→ Splash5:一般遊戲大多也是這種作法 04/20 19:31