首页 IP地址查询 | Alexa排名查询 | 手机归属地查询
设为首页 收藏本站
  • 网络编程网络编程
  • 软件编程软件编程
  • 数据库技术数据库技术
  • 编程学院
  • 业界资讯 业界资讯
  • 源码中心源码中心
  • 会员中心会员中心
  • 页面导航: 首页游戏开发教程 → HOHO引擎开发游戏(三)

    HOHO引擎开发游戏(三)

    发布:林德辉(Sea_Bug) 发布日期:2008-09-25 字体:[增加 减小] 类型:转载


      通过Lesson1和Lesson2的介绍说明,我们的游戏程序框架基本上已经具备了初步形态,同时也完成图形部分的初始化工作,接下来我们来了解一下利用HoHo引擎,游戏是如何将图像文件的数据装载到内存中;HoHo支持多种标准的图形格式文件,其中有:BMP、TGA、JPG,这三种格式概括了图形常用的三种类型,其中BMP格式是最为普通的类型,它不具备压缩能力,我们可以这样考虑,BMP就是一块平整的图形存储空间,图形数据被一莫一样的保存着;TGA文件与BMP类似,它同样不具备压缩能力,但它特殊的地方是具备图形的通道数据保存,通道数据可以制作出很多图形特效;JPG文件跟以上两种有比较大的区别,它的最大特点是支持压缩,而且压缩效率非常之高,缺点是它的图像压缩是有损失精度的,不过对于游戏中一些登入界面以及一些不需要很标准细微的图像还是有很广泛的应用范围。

    注:现在新的BMP结构中也开始对32bit(带Alpha通道)的支持,HoHo引擎不对此类图形格式的支持。

    HoHo所支持的图形格式:
      256色(8 Bit)的BMP格式图像。
      真彩色(24 Bit)
    的BMP格式图像。
      
    真彩色(24 Bit)的TGA格式图像,此格式的TGA不带Alpha通道数据。
      真彩色(32 Bit)的TGA
    格式图像,此格式的TGA自带Alpha通道数据。
      真彩色(24 Bit)的JPG格式图像。
    以上图形格式均可以通过PhotoShop等一些标准作图软件制作。


    目录:
      准备工作
      载入图像
        载入BMP
        载入TGA
        载入JPG

      绘制图像
      图像释放



    准备工作

      在介绍如何载入图像资源之前,我们先来看看一个新手经常遇到的问题,那就是调试环境下程序的执行路径问题,在VC.Net的IDE编辑环境中直接用F5来执行调试程序,这时候VC.Net并不知道你真正需要的路径在哪里,换句话说,就是可能会产生你的程序和你程序需要载入的数据路径不符合,这样就会导致你程序无法打开你所需要的文件,这时候,你就需要对工程的执行路径进行设置,具体如下:

     
    打开工程属性页
     

     

    然后在工作路径中填入所指定的路径:

    修改工作路径
     

     

    好了,这样就可以把工作路径设置好,接下来我们就看看如何通过HoHo来载入图形数据。



    载入图像

      终于到了实质的部分了,前面一大部分都只是在介绍游戏程序的初始化还有一些所需要注意的细节,在这节中让我们来真正的从图形文件中载入图像数据,呵呵,实际上这部分是相当简单了,我们来看看载入图形数据的步骤:

      首先,我们需要声明图形指针句柄,不要问我为什么需要这个东西,多看看C++的书籍你就能够明白,如果你实在不明白,那你就跟着做就行,将来会明白的(但愿如此!)。我们看看下面代码段:

        LP_BITMAPX g_pBitmapBMP = NULL;
        LP_BITMAPX g_pBitmapTGA = NULL;
        LP_BITMAPX g_pBitmapJPG = NULL;

    声明指针
     

     



    这里我们定义了3个指针,LP_BITMAPX是HoHo内部定义的一个指针结构,这个东西包含了HoHo所需要的图形资源的数据;这3个指针是我们接下来要载入的三个图像的操作句柄;

      接下来我们来看看载入图形文件数据的代码片段:

        g_pBitmapJPG = GetGraphics()->CreateBitmapFromJPG( "background.jpg" );
        g_pBitmapTGA = GetGraphics()->CreateBitmapFromTGA( "tree.tga" );
        g_pBitmapBMP = GetGraphics()->CreateBitmapFromBMP( "character.bmp" );

    载入图形数据
     

     


    这里分别用了三支不同的函数来进行载入数据,分别是:

      用来载入JPG图形各式的
    CreateBitmapFromJPG() 注1
      用来载入TGA图形各式的
    CreateBitmapFromTGA()
      用来载入BMP图形各式的
    CreateBitmapFromBMP()

    这三支函数对应了3种不同格式的图形文件进行了支持,其中TGA格式会自动识别图像本身是否带Alpha通道数据,如果有,在LP_BITMAPX结构中会保存Alpha通道数据,以供将来使用,如果没有,则保存为普通的图形数据方式;另外,BMP格式会自动识别256色图形的数据,并且自动将其转换为16Bit的内部管理色彩数据。

      怎么样?很容易吧,具体如何实现图形数据载入的问题就留给HoHo来帮你解决。 :)



    绘制图像

      数据载入完成了,让我们来把它们Show一下,看看是否达到我们的要求。

      我们在以前已经建立好了游戏的循环体,我们现在只要把我们的显示图像的代码放入循环中,游戏程序就会为你不停的刷新游戏窗口,当然,它的刷新内容就是你所指定的图像了。让我们来看看代码片段:

        GetGraphics()->DrawBitmapMMX( 0, 0, g_pBitmapJPG, SCREENBUFFER );
        GetGraphics()->DrawBitmapMMX( 100, 100, g_pBitmapBMP, SCREENBUFFER );
        GetGraphics()->DrawBitmapAlphaChannelMMX( 300, 300, g_pBitmapTGA, SCREENBUFFER );

    显示图像
     

     

    这里我们使用了三句代码来进行图像绘制,前两句是使用普通的绘制方法来进行图像绘制,最后一句是让HoHo根据图像的Alpha通道数据来绘制那个图像,这里我们不介绍绘制函数的具体操作,我们会在Lesson4进行全面的了解,这里只是为了展示你所载入的图形文件。

      代码加入后,让我们来编译运行一下游戏程序,怎么样?是否如你所愿?下图是附带的例子工程运行截图。


    (图像资源来源于 金点时空 的《圣剑英雄传II》)

    有没有看到我们的树闪闪发光?嘿嘿!这个就是Alpha通道数据给我们带来的图像效果,是不是像一些游戏中经常可以看到的光影效果。具体如何实现这些,我们下回再讲!



    图像释放

      图形文件载入完了,也显示出来了,有一点需要我们紧记,创建了数据用完之后,把数据空间还给操作系统,养成良好的习惯是非常有用的,这里我们来看看HoHo如何释放数据:

      ……

    怎么?没有代码了?呵呵,放心,还记得前面有讲过HoHo的释放,实际上HoHo在图形设备被Delete的时候,会自动将自己所用过的图像数据释放,这点HoHo已经帮你完成了,不过可能有些用户会说,我不想等HoHo的图形设备被释放后才释放图像数据,我想我游戏一边运行一边释放不需要的数据,那好,我们来看看下面的例子代码:

        GetGraphics()->RemoveBitmap( g_pBitmapJPG );

    只要通过这句,就能简单的将g_pBitmapJPG这个图像数据给释放。


      好了,又到了结束时间,可能有些朋友会留下一个疑问,为什么总是要使用"
    GetGraphics()->"?我可以告诉你,这个函数可以获得HoHo的图像指针句柄,当然,前提是你已经初始化完成了,这个函数是全局的,有了这支函数,不管你游戏如何构架,只要呼叫这支函数,就能立即获得图像的操作权,这样可以给我们的游戏开发带来便利。:)


      本教程到目前为止的工程文件下载
      (此档案不包含HoHo游戏引擎库,如若程式无法执行,请根据所使用的HoHo版本附带的DLL库文件替换程式所执行目录中的同名文件。)


    注1:HoHo的JPG图像文件支持是通过 Intel 的 JPEG Library 进行支援,如果在游戏程序中有使用到JPG图像功能,均需要有 ijl51.dll 的支持,此文件在HoHo的数据包中有包含。




    Write Date: 2003-08-0
    7
    ----------------------------------------------------------------
        HoHo游戏引擎下载以及最新资讯请访问 http://www.gameres.com/HoHo
                未经许可请勿转载此系列教程,编写:林德辉(Sea_Bug)
       Copyright ? 中国游戏开发资源网(GameRes.com) All Rights reserved

    ----------------------------------------------------------------

     


    Tags: hoho 游戏 开发
    为配合网络严查,文章评论将关闭敬请谅解.
    同 类 文 章
    最 近 更 新
    热 点 排 行