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

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

📁 游戏程式设计指南
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.gameres.com/HoHo/Guide/Lesson4.htm -->
<HTML><HEAD><TITLE>游戏程式设计指南(HoHo篇) Lesson4 - GameRes.com</TITLE>
<META content=zh-cn http-equiv=Content-Language>
<META content="MSHTML 5.00.3700.6699" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META content="text/html; charset=gb2312" http-equiv=Content-Type></HEAD>
<BODY aLink=#ff9900 bgColor=#000000 leftMargin=0 link=#ff9900 text=#ffffff 
topMargin=0 vLink=#ff9900><FONT face=Arial>
<TABLE border=0 borderColor=#111111 cellPadding=0 cellSpacing=0 id=AutoNumber1 
style="BORDER-COLLAPSE: collapse" width="100%">
  <TBODY>
  <TR>
    <TD width="100%"><A href="http://www.gameres.com/" 
      title="中国游戏开发技术资源网 - GameRes.com"><IMG border=0 height=47 
      src="游戏程式设计指南(HoHo篇) Lesson4.files/titlesmall.jpg" width=200></A></TD></TR>
  <TR>
    <TD width="100%"> </TD></TR>
  <TR>
    <TD width="100%">
      <DIV align=center>
      <CENTER>
      <TABLE border=0 cellPadding=0 cellSpacing=0 id=AutoNumber2 
      style="BORDER-COLLAPSE: collapse" width="85%">
        <TBODY>
        <TR>
          <TD bgColor=#151631 width="100%">
            <P align=right><FONT size=1>林德辉(Sea_Bug)&nbsp;&nbsp; 
        </FONT></P></TD></TR>
        <TR>
          <TD width="100%">
            <P align=center><FONT size=1>&nbsp;</FONT><BR><FONT 
            color=#ffffee><B>游戏程式设计指南(HoHo篇)<BR>Lesson&nbsp;4 —&nbsp; 
            图形绘制篇</B></FONT></P></TD></TR>
        <TR>
          <TD width="100%"> </TD></TR>
        <TR>
          <TD width="100%"><FONT size=4><B>序</B></FONT><FONT 
            size=2><BR><BR>  这节讲述的是HoHo的2D模块最重要的功能,不用我多说,这就是HoHo的图像绘制部分,相信没人会否认图像绘制对于游戏的重要性,基本上游戏给玩家的表述多是用图像来说明,HoHo提供了多种多样的图像绘制方式,同时在性能方面也有相当的表现。<BR><BR>  一般在游戏中常用的绘图方式有4种:普通绘制、颜色键(ColorKey)绘制、Alpha混合绘制、色彩饱和(Additive)绘制,其中普通绘制和颜色键(ColorKey)绘制在DirectDraw中就有支持,Alpha和Additive则需要我们自己进行运算处理(这里</FONT><FONT 
            face=Arial 
            size=2>Alpha混合绘制和色彩饱和(Additive)绘制简称为Alpha和Additive),不过没关系,这些运算以及处理工作HoHo已经为你完成,你需要知道的就只是如何去使用。</FONT><FONT 
            size=2><BR><BR><BR></FONT><B>目录:</B><FONT size=2><BR></FONT>  <A 
            href="http://www.gameres.com/HoHo/Guide/Lesson4.htm#普通绘制" 
            target=_self>普通绘制</A><BR>  <FONT face=Arial><A 
            href="http://www.gameres.com/HoHo/Guide/Lesson4.htm#颜色键(ColorKey)绘制" 
            target=_self>颜色键(ColorKey)绘制</A></FONT><BR>  <FONT face=Arial><A 
            href="http://www.gameres.com/HoHo/Guide/Lesson4.htm#Alpha混合绘制" 
            target=_self>Alpha混合绘制</A></FONT><BR>  <A 
            href="http://www.gameres.com/HoHo/Guide/Lesson4.htm#色彩饱和(Additive)绘制" 
            target=_self>色彩饱和(Additive)绘制</A><FONT face=Arial><FONT face=Arial 
            size=2><BR></FONT>  <A 
            href="http://www.gameres.com/HoHo/Guide/Lesson4.htm#图像RECT裁减绘制" 
            target=_self>图像RECT裁减绘制</A><FONT face=Arial 
            size=2><BR><BR><BR><BR></FONT><B><FONT face=Arial size=4><A 
            name=普通绘制>普通绘制</A></FONT></B><FONT face=Arial size=2><BR><BR>   
            普通绘图非常简单,只要是HoHo载入的图像数据都可以用来直接普通绘制,普通绘制就是将图像原貌反映在屏幕上,只用通过以下简单的一句代码就可以完成,代码片段:<BR><BR></FONT></FONT></FONT><FONT 
            color=#99ccff face=宋体 size=2>    GetGraphics()-&gt;DrawBitmapMMX( 
            100, 100, g_pBitmapBMP, SCREENBUFFER );</FONT><FONT face=Arial><FONT 
            face=Arial size=2><BR> </FONT><FONT face=Arial>
            <DIV align=center>
            <CENTER>
            <TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0 
            id=AutoNumber8 style="BORDER-COLLAPSE: collapse" width="80%">
              <TBODY>
              <TR>
                <TD align=middle bgColor=#001824 width="100%"><FONT 
                  size=2>普通绘制</FONT></TD></TR>
              <TR>
                <TD align=middle width="100%"><FONT size=1>&nbsp;<BR><IMG 
                  border=0 height=401 
                  src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_2.gif" 
                  width=619><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV></FONT>
            <P><FONT face=Arial 
            size=2>这样就行了,是不是很简单?这里还需要说明一下SCREENBUFFER的功能目的,SCREENBUFFER实际上也就是一个LP_BITMAPX数据,只不过它比较特殊,它被HoHo默认创建,并且作为与DirectDraw接口进行图像数据更新的一个通讯图像数据,我们只需要知道把图像绘制到它上面就OK了。<BR><BR>  可能有人会问,我们这里的绘制是从g_pBitmapBMP到SCREENBUFFER,我们能否倒置?答案是肯定的,如果你把他们的位置倒换,那么就变成SCREENBUFFER的数据被绘制到g_pBitmapBMP中,除了SCREENBUFFER外,只要是常规的LP_BITMAPX数据结构都可以进行此项操作,有些特殊的LP_BITMAPX结构是无法互通数据,这里我们留着后面再来介绍,将图像绘制出来是此节的主要讨论内容。<BR><BR><BR><BR></FONT><B><FONT 
            face=Arial size=4><A 
            name=颜色键(ColorKey)绘制>颜色键(ColorKey)绘制</A></FONT></B><FONT face=Arial 
            size=2><BR><BR>  游戏中不可能所有的图像都是整块并且标准的四边形图像,比如游戏中的人物(精灵),它们在图形文件中所存储的数据如下:</FONT></P>
            <DIV align=center>
            <CENTER>
            <TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0 
            id=AutoNumber9 style="BORDER-COLLAPSE: collapse" width="80%">
              <TBODY>
              <TR>
                <TD align=middle bgColor=#001824 width="100%"><FONT 
                  size=2>人物(精灵)原图</FONT></TD></TR>
              <TR>
                <TD align=middle width="100%"><FONT size=1>&nbsp;<BR><IMG 
                  border=0 height=192 
                  src="游戏程式设计指南(HoHo篇) Lesson4.files/character.bmp" 
                  width=96><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
            <P><FONT face=Arial 
            size=2>如果我们按照普通绘制的方法,那么非人物(精灵)的图像数据部分也会被绘制到屏幕上,令人厌恶的紫色色块也会进入我们的游戏视野,我们来看看如何将这些紫色部分去掉,不要让它来影响我们游戏的视觉效果。(通常我们不需要的颜色称之为颜色键(ColorKey))<BR><BR>  HoHo中可以直接进行ColorKey的过滤处理,不过在HoHo对图像绘制进行ColorKey过滤的时候,我们必须事先通知HoHo,什么颜色是ColorKey,看看如下代码片段:<BR><BR></FONT></FONT><FONT 
            color=#99ccff face=宋体 size=2>    g_pBitmapBMP-&gt;SetColorKey( 
            RGB2Hi(255,0,255) );</FONT></P><FONT face=Arial>
            <DIV align=center>
            <CENTER>
            <TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0 
            id=AutoNumber10 style="BORDER-COLLAPSE: collapse" width="80%">
              <TBODY>
              <TR>
                <TD align=middle bgColor=#001824 width="100%"><FONT 
                  size=2>设置ColorKey</FONT></TD></TR>
              <TR>
                <TD align=middle width="100%"><FONT size=1>&nbsp;<BR><IMG 
                  border=0 height=395 
                  src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_1.gif" 
                  width=491><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
            <P><FONT face=Arial 
            size=2>这里我们用到了两支函数,其中SetColorKey()就不用多说了,它就是用来设置LP_BITMAPX的ColorKey,它需要的是一个PIXEL结构的数值,PIXEL是一个16Bit的数值,不要问我为什么是16Bit,我只能回答你,因为我们的游戏是在16Bit模式下运行的;另外,让我们看看RGB2Hi(),这是一支HoHo提供的全局函数,功能是将RGB颜色值转换为上面我们所说的16Bit的PIXEL数据,这里我们用RGB=255,0,255(紫色)来作为ColorKey的设置参数。<BR><BR>  再我们进行图像绘制之前,我需要说明一下,HoHo内部默认的ColorKey是RGB=0,0,0,可能有人会反对这样的做法,毕竟RGB=0,0,0就是黑色,黑色在游戏图像中出现的几率还是相当频繁,用黑色岂不是很不方便,用RGB=255,0,255来作为默认ColorKey不更好?我只能说请相信我,我这样做肯定有其好处,虽然这个好处未必明显;在SetColorKey()函数执行后,原来LP_BITMAPX的图像数据中的黑色(RGB=0,0,0)部分均会被假黑色代替(RGB=0,0,1),所以上面我们设置紫色为ColorKey,HoHo会将原图像中的紫色部分改变为黑色,而原来的黑色部分会被修正为假黑色。(如果你不明白这段文字所说的问题,请掠过此段继续看后面)<BR><BR>  说了那么久,在我们设置好ColorKey之后,我们可以同样通过DrawBitmapMMX()函数来进行ColorKey处理的图像绘制,代码示例如下:<BR><BR></FONT></FONT><FONT 
            color=#99ccff face=宋体 size=2>    GetGraphics()-&gt;DrawBitmapMMX( 
            250, 100, g_pBitmapBMP, SCREENBUFFER, true );</FONT></P><FONT 
            face=Arial>
            <DIV align=center>
            <CENTER>
            <TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0 
            id=AutoNumber11 style="BORDER-COLLAPSE: collapse" width="80%">
              <TBODY>
              <TR>
                <TD align=middle bgColor=#001824 width="100%"><FONT 
                  size=2>ColorKey图像绘制</FONT></TD></TR>
              <TR>
                <TD align=middle width="100%"><FONT size=1>&nbsp;<BR><IMG 
                  border=0 height=401 
                  src="游戏程式设计指南(HoHo篇) Lesson4.files/Lesson4_3.gif" 
                  width=619><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
            <P><FONT face=Arial 
            size=2>在这里我们只是简单的在函数后面加了一个true标记,此标记告诉HoHo,此图像要进行ColorKey处理。<BR><BR><BR><BR></FONT><B><FONT 
            size=4><A name=Alpha混合绘制>Alpha混合绘制</A></FONT></B><FONT face=Arial 
            size=2><BR><BR>   
            前面两种绘制方式是游戏中最基本的应用,现在我们来看看Alpha混合如何处理,Alpha混合处理可以给游戏带来非常多的特效以及更好的视觉效果,在HoHo中,Alpha混合的算法以及优化等工作都已经帮你完成,你所需要的就是简单的调用函数就可以轻松实现Alpha的混合处理,我们来看看一下的代码片段:<BR><BR></FONT></FONT><FONT 
            color=#99ccff face=宋体 
            size=2>    GetGraphics()-&gt;DrawBitmapAlphaMMX( 400, 100, 
            g_pBitmapBMP, SCREENBUFFER, 16 );</FONT></P><FONT face=Arial>
            <DIV align=center>
            <CENTER>
            <TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0 
            id=AutoNumber12 style="BORDER-COLLAPSE: collapse" width="80%">
              <TBODY>
              <TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -