作者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
1F:→ Splash5:至於其它细节我想给原po去思考了:p 04/19 20:39
2F:推 GoodTauSo:感谢您的方式让我参考^^" 04/20 10:39
3F:推 GoodTauSo:照这个方式,所有的图像都会画成一张图在picturebox 或 04/20 17:56
4F:→ GoodTauSo:form上 , 这样如果要让角色移动 , 就要全部刷掉重画 . 04/20 18:00
5F:推 GoodTauSo:而没有分图层 , 譬如说 最底层是地图 , 第二层是角色 , 04/20 18:03
6F:→ GoodTauSo:第三层是天气(云 , 下雨之类...) , 这样就可以设定每个 04/20 18:04
7F:→ GoodTauSo:物件的属性(ex:角色的图形 , MP HP , 云的移动速度等.) 04/20 18:05
8F:→ GoodTauSo:就是希望构成的"图" 是许多物件放在一起的 , -而非全部 04/20 18:06
9F:→ GoodTauSo:draw在一张上 . 04/20 18:06
10F:→ Splash5:那就要靠你自己去管理这些物件的优先顺序了~ 04/20 19:29
11F:→ Splash5:像我自己写的东西 会有一个layer管理 会记住哪层有那些 04/20 19:29
12F:→ Splash5:物件 然後依照我定义的layer优先顺序 由底层画到上层 04/20 19:30
13F:→ Splash5:一般游戏大多也是这种作法 04/20 19:31