📄 游戏程式设计指南(hoho篇) lesson4.htm
字号:
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>Alpha混合绘制</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=401
src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_4.gif"
width=619><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>我们看看它最后的一个参数,16这个数值是通知HoHo进行16阶Alpha混合,这个参数的取值范围为0~32,16相当于是50%的混合;为什么取值范围那么小?为什么不是0~255?这是因为我们所用的图形模式是16Bit色彩,它所变换出来的色彩表现能力实际上最后只能得到0~32级的变化。<BR><BR>注意:Alpha混合操作的函数会自动进行ColorKey的过滤处理。<BR><BR><BR> 说到Alpha混合绘制,这里还需要介绍一下Alpha通道混合处理,HoHo支持的TGA图形Alpha通道数据,并且可以根据通道数据来进行处理,可能有些朋友对Alpha通道图不是很了解,这里我们简单的说说Alpha通道的作用。<BR><BR> 上面说的DrawBitmapAlphaMMX()可以对图像进行Alpha混合处理,但是有些时候我们需要的是图像的局部Alpha混合,或者是一张图片中不同的区域有不同的混合方法,如果这样的话,上面这支函数就无法达到,这时候就需要借助Alpha通道数据来协助图像的绘制。<BR><BR> 在Lesson3中,我们载入了一张TGA带通道的图像数据,这里我们可以通过以下方法来进行绘制,代码片段如下:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体
size=2> GetGraphics()->DrawBitmapAlphaChannelMMX( 300, 300,
g_pBitmapTGA, SCREENBUFFER );</FONT></P><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber13 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>Alpha通道混合绘制</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=401
src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_6.gif"
width=619><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>这样我们就可以把图像数据中的通道数据应用起来。<BR><BR> 还有一种情况,我们需要对带有Alpha通道的图像在加入Alpha值的处理,这时候只要在最末尾处加入一个Alpha混合值就行,就如同DrawBitmapAlphaMMX()的使用。<BR><BR><BR><BR><BR></FONT><B><FONT
size=4><A name=色彩饱和(Additive)绘制>色彩饱和(Additive)绘制</A></FONT></B><FONT
face=Arial size=2><BR><BR>
现在的游戏里面到处都是光影特效,比如武士飞舞大刀所带的刀光、法师施展的绚丽魔法等,这些都可以通过色彩饱和运算来实现,我们必须先来了解一下色彩饱和的处理方式,色彩饱和是将两张图像的数据融合起来,如果图像是黑色,则两张图像融合后还是原来的图像,当然,这样说可能不是很明了,可以看看本章节最后的附图,不过在看附图之前,我们来看看代码的实现:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体
size=2> GetGraphics()->DrawBitmapAdditiveMMX( 550, 100,
g_pBitmapBMP, SCREENBUFFER );</FONT></P><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber14 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>色彩饱和(Additive)混合</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=401
src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_5.gif"
width=619><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>由于色彩饱和混合的特殊性,它不需要进行ColorKey处理,也不需要Alpha值的参数,就如普通绘图一样。<BR><BR><BR><BR></FONT><B><FONT
size=4><A name=图像RECT裁减绘制>图像RECT裁减绘制</A></FONT></B><FONT face=Arial
size=2><BR><BR> 有时候我们载入了一张很大的图像,但我们在绘制过程中,我们只需要绘制其中的某个小区域,如果我们整张图进行绘制,那么将是极大的浪费资源,HoHo已经为你准备了这方面的处理;用过DirectDraw表面绘图的朋友肯定知道DDraw在绘图的时候需要一个RECT参数来进行绘制区域的确定操作,同样,你也可以传入一个RECT结构参数来确定你所需要的绘制区域,看看一下代码片段:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> RECT rect = { 0, 0, 32, 48
};<BR><BR> GetGraphics()->DrawBitmapMMX( 700, 100,
g_pBitmapBMP, SCREENBUFFER, &rect
);<BR> GetGraphics()->DrawBitmapMMX( 750, 100, g_pBitmapBMP,
SCREENBUFFER, &rect, true
);<BR> GetGraphics()->DrawBitmapAlphaMMX( 700, 160,
g_pBitmapBMP, SCREENBUFFER, &rect, 16
);<BR> GetGraphics()->DrawBitmapAdditiveMMX( 750, 160,
g_pBitmapBMP, SCREENBUFFER, &rect );</FONT></P><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber7 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>RECT裁减绘制</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=375
src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_7.gif"
width=639><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>这里我们制定绘制g_pBitmapBMP图像中的起点(0,0)至终点(32,48)位置的图像,仔细看,这些绘制函数不就是我们上面所介绍的函数,没错,在HoHo中有这些函数的重载操作,只要是第五个参数传入了RECT结构数据,那么HoHo就会根据RECT所制定的位置来进行绘制,当然,具体要进行如何的绘制方法就如同原函数的效果。<BR><BR><BR><BR>最后,我们看看今天的游戏程序运行结果:<BR><BR><IMG
border=0 height=625
src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_8.jpg"
width=806><BR>(图像资源来源于 <A href="http://www.gpgame.net/">金点时空</A>
的《圣剑英雄传II》)<BR><BR><BR> 本教程到目前为止的<A
href="http://www.gameres.com/HoHo/Guide/Lesson4.zip">工程文件下载</A>。<BR> (此档案不包含HoHo游戏引擎库,如若程式无法执行,请根据所使用的HoHo版本附带的DLL库文件替换程式所执行目录中的同名文件。)<BR><BR><BR><BR>Write
Date: 2003-08-11<BR></FONT><FONT face=宋体
size=2>----------------------------------------------------------------<BR></FONT><FONT
face=Arial size=2> HoHo游戏引擎下载以及最新资讯请访问 <A
href="http://www.gameres.com/HoHo">http://www.gameres.com/HoHo</A><BR>
未经许可请勿转载此系列教程,编写:林德辉(Sea_Bug)<BR> Copyright ©
中国游戏开发资源网(GameRes.com) All Rights reserved</FONT><FONT face=宋体
size=2><BR>----------------------------------------------------------------</FONT><FONT
face=Arial size=2><BR> </FONT></P></FONT></TD></TR>
<TR>
<TD width="100%"> </TD></TR>
<TR>
<TD bgColor=#151631 width="100%">
<P align=right><FONT size=1><A
href="http://www.gameres.com/">GameRes</A> </FONT></P></TD></TR>
<TR>
<TD width="100%">
<P align=right>
<FORM>
<P align=right><FONT size=1> </FONT><BR><INPUT onclick=window.close() type=button value="关 闭 窗 口"></P></FORM></TD></TR></TBODY></TABLE></CENTER></DIV></TD></TR>
<TR>
<TD width="100%">
<P align=center><BR><FONT face=Arial></FONT><BR><BR><FONT
size=2>本站中所有文章以及图形均为作者本人、公司所有,本站所有资讯仅供参考,若有任何损失本站概不负责,请自行斟酌。<BR>Copyright
© 2001-200? 中国游戏开发资源网(GameRes.com) All Rights reserved.<BR>This site is
optimized for at least 1024x768 resolution (hi-color) viewing with a
browser that supports style sheets.<BR>
<SCRIPT language=JavaScript><!--function SymError(){ return true;}window.onerror = SymError;var SymRealWinOpen = window.open;function SymWinOpen(url, name, attributes){ return (new Object());}window.open = SymWinOpen;//--></SCRIPT>
<SCRIPT src="游戏程式设计指南(HoHo篇) Lesson4.files/mystat.htm"></SCRIPT>
<BR> </FONT></P></TD></TR></TBODY></TABLE></FONT>
<SCRIPT
language=JavaScript><!--window.open = SymRealWinOpen;//--></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -