Re: [程式] 如何做到真正的透明色 by vb.net?

看板GameDesign (遊戲設計)作者 (史不拉雞五)時間15年前 (2010/04/19 20:36), 編輯推噓3(3010)
留言13則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/19 20:39, , 1F
至於其它細節我想給原po去思考了:p
04/19 20:39, 1F

04/20 10:39, , 2F
感謝您的方式讓我參考^^"
04/20 10:39, 2F

04/20 17:56, , 3F
照這個方式,所有的圖像都會畫成一張圖在picturebox 或
04/20 17:56, 3F

04/20 18:00, , 4F
form上 , 這樣如果要讓角色移動 , 就要全部刷掉重畫 .
04/20 18:00, 4F

04/20 18:03, , 5F
而沒有分圖層 , 譬如說 最底層是地圖 , 第二層是角色 ,
04/20 18:03, 5F

04/20 18:04, , 6F
第三層是天氣(雲 , 下雨之類...) , 這樣就可以設定每個
04/20 18:04, 6F

04/20 18:05, , 7F
物件的屬性(ex:角色的圖形 , MP HP , 雲的移動速度等.)
04/20 18:05, 7F

04/20 18:06, , 8F
就是希望構成的"圖" 是許多物件放在一起的 , -而非全部
04/20 18:06, 8F

04/20 18:06, , 9F
draw在一張上 .
04/20 18:06, 9F

04/20 19:29, , 10F
那就要靠你自己去管理這些物件的優先順序了~
04/20 19:29, 10F

04/20 19:29, , 11F
像我自己寫的東西 會有一個layer管理 會記住哪層有那些
04/20 19:29, 11F

04/20 19:30, , 12F
物件 然後依照我定義的layer優先順序 由底層畫到上層
04/20 19:30, 12F

04/20 19:31, , 13F
一般遊戲大多也是這種作法
04/20 19:31, 13F
文章代碼(AID): #1Bp4uzsr (GameDesign)
文章代碼(AID): #1Bp4uzsr (GameDesign)