⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 游戏程式设计指南(hoho篇) lesson4.htm

📁 游戏程式设计指南
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                <TD align=middle bgColor=#001824 width="100%"><FONT 
                  size=2>Alpha混合绘制</FONT></TD></TR>
              <TR>
                <TD align=middle width="100%"><FONT size=1>&nbsp;<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()-&gt;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>&nbsp;<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()-&gt;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>&nbsp;<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()-&gt;DrawBitmapMMX( 700, 100, 
            g_pBitmapBMP, SCREENBUFFER, &amp;rect 
            );<BR>    GetGraphics()-&gt;DrawBitmapMMX( 750, 100, g_pBitmapBMP, 
            SCREENBUFFER, &amp;rect, true 
            );<BR>    GetGraphics()-&gt;DrawBitmapAlphaMMX( 700, 160, 
            g_pBitmapBMP, SCREENBUFFER, &amp;rect, 16 
            );<BR>    GetGraphics()-&gt;DrawBitmapAdditiveMMX( 750, 160, 
            g_pBitmapBMP, SCREENBUFFER, &amp;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>&nbsp;<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>&nbsp;&nbsp;&nbsp; HoHo游戏引擎下载以及最新资讯请访问 <A 
            href="http://www.gameres.com/HoHo">http://www.gameres.com/HoHo</A><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            未经许可请勿转载此系列教程,编写:林德辉(Sea_Bug)<BR>&nbsp;&nbsp; Copyright &copy; 
            中国游戏开发资源网(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>&nbsp;&nbsp;</FONT></P></TD></TR>
        <TR>
          <TD width="100%">
            <P align=right>
            <FORM>
            <P align=right><FONT size=1>&nbsp;</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 
      &copy; 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 + -